Parallel Program
동시에 여러개를 처리함.
한 번에 여러개를 처리할 때 더 효과적으로 할 수 있는 방법은?
Threads
-> 프로그램 (Process)의 실행단위. 하나의 프로세스는 여러개의 쓰레드로 구성이 가능하다.
이렇게 쓰레드는 하나의 프로세스 안에 존재하며, 그 process의 address space를 공유한다.
(자유롭게 메모리에다가 read/write 가능.)
우리는 스케줄을 쓰레드 단위로 할 수 있다.
이런 식으로 &buff 를 사용하여 간단히 resource들을 옮길 수 있다.
Process -> address space / resources ...
Thread -> sequential execution
(Thread는 Scheduling의 unit이 된다. )
Process는 그냥 컨테이너가 되고, running,blocked,ready... 등은 Thread가 수행한다.
Thread 사용의 장점:
managing overhaed 감소. PCB를 만들지 않고 쓰레드를 공유하여 managing을 감소시킬 수 있다.
Process vs Threads
POSIX Threads
User-level mode / Kernel mode
User-level mode -> function call
Synchronization
멀티 쓰레드 / 멀티 프로세스 의 경우
협동작업이 중요하다. (execution이 조종되어야 함.)
Non-deterministic output.
협동을 하지 않았기 때문에 생기는 문제.
Shared resource를 사용할때 (특히 write) Synchronization을 해줘야 함.
쓰레드 관점에서 Resources Shared -> Global/Dynamic object가 해당한다.
해결책: Critical Region 설정.
If, Critical Region
A, B
shared resourse access -> A
NOT B
CSP requirements
1. mutual exclusion
한 번에 하나만!
2. 기다리는 쓰레드 중 순서를 정해줘야 하는데, 무한정으로 기다리는 starvation 조심
3. T 때문에 S가 Critical section에 못 들어가면 안됨.
4. CPU의 speed나 number를 가정해서 제한하면 안됨.