- Semaphores
- 프로그래머가 이렇게 lock/unlock 관련한 코드를 고민하기 어려우므로 앞의 방식들을 추상화한다
- Semaphore S
- integer variable (자원의 수) (이전의 알고리즘들은 S=1인 경우라고 생각할 수 있다)
- 아래 두가지 atomic 연산에 의해서만 접근 가능
- critical section을 수행중인 다른 프로세스를 CPU ready queue가 아닌 semaphore에 대한 wait queue에서 대기
- 이 연산에서 S 변수는 S가 양수면 기다리는 프로세스가 없다는 것, 음수면 기다리고 있다는 의미 (위에서와 다름)
- critical section의 길이가 긴 경우 block/wakeup이 좋음
- critical section의 길이가 매우 짧은 경우 block/wakeup 오버헤드가 busy-wait 오버헤드보다 더 커질 수 있음
- 일반적으로는 block/wakeup 방식이 더 효율적
- P0가 P(S)를 수행하고 CPU를 P1에 넘겨주면 서로 영원히 기다리게 된다 -> 자원 얻는 순서를 정해서 해결
출처: https://core.ewha.ac.kr/publicview/C0101020140404151340260748?vmode=f
'CS > OS' 카테고리의 다른 글
15. Process Synchronization 4 (0) | 2022.03.29 |
---|---|
14. Process Synchronization 3 (0) | 2022.03.29 |
12. Process Synchronization 1 (0) | 2022.03.27 |
11. CPU Scheduling 2 (0) | 2022.03.23 |
10. CPU Scheduling 1 (0) | 2022.03.23 |