Program : 파일이 Disk에 저장되어 있지만 메모리에는 올라가 있지 않은 정적인 상태 (코드 덩어리 파일)
Process : 운영체제로부터 자원을 할당 받은 작업의 단위(메모리에 올라가 프로그램을 실행한 상태 = 동적인 상태)
Process는 Code, Data, Stack, Heap의 구조로 되어 있는 독립된 메모리 영역을 할당 받는다.
각 Process는 별도의 주소 공간에서 실행되며, 서로 독자적인 메모리 공간을 갖기 때문에 서로 메모리 공간을 공유할 수 없다. (= 다른 Process의 변수나 자료구조에 접근할 수 없다.)
다른 Process자원에 접근하려면 Process간의 통신(IPC)을 이용해야 한다.
Process는 최소 하나 이상의 Thread를 포함한다.
- Processor : 컴퓨터 운영을 위해 기본적인 명령어들을 처리하고 반응하기 위한 논리회로
디바이스가 해야할 일을 총 지휘하는 Processor = CPU
- 동시성(Concurrency) : Processor는 원래 한번에 하나의 Process만 작업할 수 있다.
동시성은 Processor 하나가 여러 작업을 돌아가며 일부분씩 수행하는 방식이다.
이렇게 진행중인 작업을 바꾸는 것을 Context Switching이라고 한다.
매우 빠른 속도로 돌아가기 때문에 여러 Process들이 동시에 진행되는 것 처럼 보인다.
Thread : 프로세스가 할당받은 자원을 이용하는 실행 흐름의 단위 (일의 최소 단위)
각 Thread는 독자적인 Stack 메모리를 갖는다.
Thread는 Process 내에서 각자의 Stack을 할당받고 Code, Data, Heap 영역은 공유한다.
각각의 Thread는 별도의 레지스터와 Stack을 갖고 있지만, Heap 메모리는 서로 읽고 쓸 수 있다.
Thread는 메모리를 공유하기 때문에 동기화, 데드락 등의 문제가 발생할 수 있다.
Multi Process VS Multi Thread
Multi Process : 하나의 응용프로그램을 여러 개의 Process로 구성하여 각 Process가 하나의 작업을 처리하도록 하는 것
- 장점 : 여러 개의 자식 Process 중 하나에 문제가 발생하면 그 자식 Process 이상으로 다른 영향이 확산 되지 않음.
- 단점
1. Context Switching 과정에서 캐시 메모리 초기화 등 무거운 작업이 진행되고 많은 시간이 소모되는 등 오버헤드 발생
2. Process는 각각의 독립된 메모리 영역을 할당받았기 때문에 Process 사이에 공유하는 메모리가 없음.
Multi Thread : 하나의 응용프로그램을 여러 개의 Thread로 구성하고 각 Thread로 하여금 하나의 작업을 처리 하도록 하는 것
- 장점
1. 시스템 자원 소모 감소 (자원의 효율성 증대)
2. 시스템 처리량 증가 (처리 비용 감소, Context Switching이 빠름)
3. 프로그램 응답 시간 단축
- 단점
1. 주의 깊은 설계가 필요 (동기화 문제, 데드락 등)
2. 디버깅이 힘듦
3. 하나의 Thread에 문제가 생기면 전체 Process가 영향을 받음
'개발에 도움이 되는 > CS' 카테고리의 다른 글
가비지 컬렉션(Garbage Collection) (0) | 2022.01.10 |
---|---|
컴퓨터를 켜면 일어나는 과정 (OS 부팅 과정) (0) | 2022.01.09 |
가상 메모리(Virtual Memory) (0) | 2022.01.09 |
뮤텍스(Mutex)와 세마포어(Semaphore)의 정의 (0) | 2021.12.16 |
경쟁상태(Race Condition), 교착상태(DeadLock), 기아상태(Starvation)의 정의 (0) | 2021.12.15 |