동기화 문제 해결 방법
- 상호 배제 Mutual Exclusion : 프로세스 A가 critical section을 수행중이면 다른 모든 프로세스는 그들의 critical section에 들어가면 안됨
- 진행 Progress : 아무도 critical section에 있지 않은 상태에서 critical section에 들어가고자 하는 프로세스가 있으면 critical section에 들어가게 해주어야 한다.
- 유한 대시 Bounded waiting : 프로세스가 critical section에 들어가려고 요청한 후부터 그 요청이 허용될 때까지 다른 프로세스들이 critical section에 들어가는 횟수에 한계가 있어야한다.
- critical section에 들어가길 원하는 상태에서 자신의 turn이면 critical section에 들어감
- 정수형, S는 여분의 자원의 개수를 나타냄
- P, V 연산 두가지 있음
- P : 자원 획득
- V : 자원 반납
P
while(S<=0) wait;
S--;
V
S++;
- block : 커널은 block을 호출한 프로세스를 suspend 시킴. 이 프로세스의 PCB를 세마포어에 대한 wait queue에 넣음
- wakeup : 블럭된 프로세스 p를 wakeup시킴. 이 프로세스의 PCB를 ready queue로 옮김
- CS 길이가 길면 Block/Wakeup 적당
- CS 매우 짧으면 Block/Wakeup 오버헤드 커질수있음
- 일반적으로는 Block/wakeup이 더 좋음