Monitor
Monitor
▶ Semaphore의 문제점
- 코딩하기 힘들다
- 정확성(correctness)의 입증이 어렵다
- 자발적 협력(voluntary cooperation)이 필요하다
- 한번의 실수가 모든 시스템에 치명적인 영향을 미친다
▶ Monitor
- 공유데이터에 대한 접근을 책임진다 <-- by. monitor 내 함수
- 공유데이터에 대한 lock/unlock이 필요 없다
※ condition variable
: 자원 여부 판단 --> sleep/wakeup 결정해서 queue에 줄 세우고/queue에서 꺼내온다.
- 자원 개수 세는 역할x =/= P(empty), V(full)
- x.wait(): suspended --> queue에 줄 세운다.
- x.signal(): wakeup --> 자원 여분이 없어서 queue에 줄 세워져 있는 process를 queue에서 꺼내온다.
1) Bounded-Buffer Problem
※ Semaphore vs. Monitor
▶ Semaphore
- P(empty), V(full): 생산자(빈)/소비자(찬) buffer 필요 --> count 변수
- P(mutex), V(mutex): mutual exclusion을 보장하기 위한 lock/unlock
▶ Monitor
- condition variable -- wait/signal: sleep/wakeup 결정
- monitor에서 mutual exclusion을 보장하기 때문에, lock/unlock은 필요하지 않다.
3) Dining Philosophers Problem
- Problem: deadlock
- Solution: 양쪽 젓가락을 모두 잡을 수 있을때만 젓가락을 잡을 수 있도록 한다.
'운영체제' 카테고리의 다른 글
[운영체제] KOCW 7 - Ch7: Deadlock (0) | 2023.06.09 |
---|---|
[운영체제] KOCW 6.3 - Ch7: Deadlock (0) | 2023.06.09 |
[운영체제] KOCW 6.1 - Ch6: Process Synchronization (0) | 2023.06.09 |
[운영체제] KOCW 5.3 - Ch6: Process Synchronization (0) | 2023.06.09 |
[운영체제] KOCW 5.2 - Ch6: Process Synchronization (0) | 2023.06.09 |