Process
- 실행 중인 프로그램으로 메모리에 적재되어 CPU의 할당을 받을 수 있는 것.
- 운영체제로 부터 시스템 자원인 주소, 파일, 메모리, 스택, 힙, 데이터, 코드 영역과 고유 PCB 를 할당 받는다.
- PCB엔 PID, 프로세스 상태, PC, CPU register, 스케줄링 정보, 메모리 관리 정보 등이 있다.
- 할당 받은 자원들은 프로세스마다 각각 독립적이며 다른 프로세스의 변수나 자료에 임의로 접근할 수 없다.
=> IPC 기법을 사용하면 접근이 가능하다 - 파이프, 소켓, 파일 등을 이용한 통신 방법. - 최소 1개의 쓰레드를 가지고 있다.
- 멀티 프로세스 프로그래밍
- 하나의 응용 프로그램을 여러 프로세스로 구성한다.
- 장점
- 프로그램 구현, 설계가 직관적이고 쉽다.
- 문제 발생 시 해당 프로세스만 처리하면 되고 이러한 결과가 다른 프로세스에 쉽게 영향을 끼치지 않는다.
- 단점
- 응용 프로그램 구동시 필요한 공유 자원인 경우에 IPC 기법이라는 복잡하고 까다로운 기술이 필요하다.
- 특정 조건에 의해 Context Switching이 발생할 경우 오버헤드가 크다.
- CS 발생 시 여러 자원 정보(특히 cashe)를 PCB에 저장하고 초기화하고, 다시 할당 받을 때 적재하여야 한다.
Thread
- 프로세스의 실행 단위로서 프로세스의 특정한 수행을 처리한다.
- 프로세스의 여러 자원을 (Code, Data, Heap )을 공유하고, 레지스터(PC)와 Stack 영역은 쓰레드마다 할당 받는다.
- 멀티 스레드 프로그래밍
- 하나의 응용프로그램을 여러 개의 스레드로 구성하고 각 스레드로 하여금 하나의 작업을 처리하도록 하는 것이다.
- 장점
- 메모리 공간, 시스템 자원 소모가 감소되어 자원의 효율성이 증가한다.
프로세스마다 필요한 자원을 하나로 나누어 쓰고, 이를 할당하는 데 필요한 시스템콜도 줄어든다. - 프로세스 내의 여러 쓰레드는 Heap 등을 통해 공유 자원 접근 및 통신이 용이하다.
- 따라서 처리량, 응답시간이 상승한다.
- 프로세스에 비해 작업의 크기가 작아 CS이 빠르고 모든 자원이 아닌 쓰레드의 Stack 영역만 초기화, 적재하면 된다.
- 메모리 공간, 시스템 자원 소모가 감소되어 자원의 효율성이 증가한다.
- 단점
- 프로그래밍 설계가 복잡하고 어렵다.
- 하나의 쓰레드에 문제가 있을 시 전체 프로세스에 악영향이 끼친다.
- 공유 자원에 대한 동기화 문제가 존재한다.
- Thread Safe 한 멀티 쓰레드 프로그래밍
- 동기화 문제, 공유 자원 접근 시의 문제를 해결 하여 의도한대로 작동하도록 설계하자.
- 임계영역에 대한 상호배제, 진행, 한정된 대기 특성을 만족시켜서 동기화를 달성한다.
- 공유 자원 접근 시 제공된 매개 변수만을 사용하여 재진입성을 보장한다.