Program
프로그램
- 어떤 작업을 위해 실행할 수 있는 파일
- 파일이 저장 장치에 저장되어 있지만 메모리에는 올라가 있지 않은 정적인 상태 = "그냥 코드 덩어리"
- 아직 운영체제가 프로그램에게 독립적인 메모리 공간을 할당하지 않음
- 실행되지 않은 파일 ( .exe / .dmg )
Process
프로세스 과정
- 프로그램을 실행하면 그 순간 해당 파일이 컴퓨터 메모리에 올라가게 되고, 동적인 상태로 변하게 되는 프로그램을 프로세스라고 한다.
프로세스 정의
- 운영체제로부터 자원을 할당받은 작업의 단위
- 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램
- 동적인 개념으로는 실행된 프로그램
- 보조 기억장치 저장되어 있는 프로그램 ( 인텔리제이,배틀그라운드 같은 응용프로그램 → 저장된다고 다 실행되진 않음, 할당 받기전까지 죽어있음 )들이 사용하고자 메인 메모리에 할당되어 실행되는 상태
프로세스 특징
- 프로세스는 각각 독립된 메모리 영역 Code, Data, Stack, Heap 구조를 할당 받음
- 기본적으로 프로세스 당 최소 1개의 스레드 ( 메인 스레드 ) 가짐
- 프로세스끼리는 직접적으로 접근할 수 없다.
- 각 프로세스는 별도의 주소 공간에서 실행되며, 한 프로세스는 다른 프로세스의 변수나 자료구조에 접근할 수 없다.
Thread
스레드 등장
-
프로그램 실행부터 종료할때까지 프로세스 하나만 사용했던 과거와 달리, 점점 프로그램이 복잡해지고 프로세스 하나만을 사용해서 프로그램을 실행하기가 벅차게 되었다
-
대안 생각 : 여러 프로세스로 하나의 프로그램 실행시키기
→ 불가능 : 운영체제는 안정성을 위해 프로세스마다 자신에게 할당된 메모리 내의 정보에만 접근할 수 있도록 제약이 있고 이를 벗어나는 정보에 접근시 오류 발생
-
다른 대안 : 프로세스보다 더 작은 실행 단위 개념이 필요했고 그 개념이 스레드이다.
→ 한마디로, 스레드는 프로세스 특성의 한계를 해결하기 위해 만들어진 개념
스레드 의미
- 프로세스 내에서 할당받은 자원을 이용해 동작되는 여러 실행의 흐름
스레드 특징
- 같은 프로세스 내의 스레드들은 주소 공간, 자원들을 공유한다.
- 스레드는 프로세스와 달리 스레드 간 메모리를 공유하며 작동
- 스레드는 프로세스 내에서 각각 Stack만 따로 할당받고 Code,Data,Heap영역은 공유한다.
- 스레드를 코드에 비유하자면, 코드 내에 선언된 함수들 ( ex - main 함수 )
→ 한 줄 요약 : 스레드는 프로세스의 코드에 정의된 절차에 따라 실행되는 특정한 수행 경로
Process, Thread 작동 방식
메모리에 접근
-
운영체제는 프로세스마다 각각 독립된 메모리 영역을 [Code,Data,Stack,Heap] 형식으로 할당해준다.
→ 프로세스는 다른 프로세스의 변수나 자료에 접근이 불가능!!
-
스레드는 프로세스가 할당받은 메모리 영역 내에서 Stack형식으로 할당된 메모리 영역을 따로 할당 받고, 나머지 [Code,Data,Heap]형식으로 할당된 메모리 영역을 공유한다.
→ 같은 프로세스 내의 스레드는 주소 공간, 자원들을 공유한다.
실행하다 오류 발생 시 영향
-
한 프로세스가 강제로 종료될 경우, 다른 프로세스에게 영향을 주지 않는다.
( 단, 공유하고 있는 파일을 손상시키지 않았을 경우 )
-
한 스레드 하나에서 오류 발생시 , 스레드는 Code,Data,Heap 메모리 영역을 공유하기때문에 같은 프로세스 내의 다른 스레드 모두 같이 강제 종료
기타 연관 내용
- 멀티 프로세스, 멀티 스레드, Context Swiching, Thread Safe, 비동기 처리 등
Thread Safe
여러 thread가 동시에 사용되어도 안전하는 것을 의미
Context Swiching
CPU에서 여러 프로세스를 돌아가면서 작업을 처리하는 과정
동작 중인 프로세스가 대기를 하면서 해당 프로세스의 상태를 보관하고 대기 하고 있다가 다시 실행시 복구하는 비용(시간)을 말한다.## Program