[OS] Lecture 6. Process Synchronization and Mutual Exclusion 7_7 - kibitzing/EnGrow GitHub Wiki
유튜브 링크
진구
사이드바 미쳐따리..
모니터 넘 좋은데..?!
쓰기 쉬운데 에러나는 경우도 적다는게 매우 매력적이다.
심심할 때 세마포어로 다이닝 필로소퍼를 짜본다...?!
다이닝 필로소퍼 뭔가 엄청 난제라고 생각했었는데 그렇지는 않네.
드디어 7강 끝!
세영
사이드바 꽃단장 해봤습니다 ㅋㅋㅋ
Language Level Solution
Monitor
- High level mechanism
- 이전의 방법들과 다르게 사용이 쉬워서 버그의 가능성이 낮아진다
Monitor란
- Critical Data & Section이 들어가는 공간
- 최대 한 프로세스만 들어갈 수 있음
- Mutual Exclusion, 정보 은폐성 (공유 데이터는 모니터 내에서만 접근 가능)
wait(),signal()연산으로 작동
Monitor 구조
- Entry Queue
- Condition Queue (대기실)
- Signaler Queue (
signal()을 호출한 프로세스가 대기하는 공간)
모니터: 책방 (한 명만 들어갈 수 있는 책방)
공유 자원: 책
request entry queue: 책 대여 대기실
request(): 책 빌리는 중
release entry queue: 책 반납 대기실
release(): 책 반납하는 중
condition queue: 책 대여 요청 명단
signaler queue: 결제 대기실
→ 정리
- P1이 책방 도착
- 대여 대기실로 들어감 (Request Entry Queue에 들어감)
- 책(공유 자원)이 책방에 있으니 빌려감 (request() → Resource Unavailable)
- P2, P3 차례대로 책방 도착 → (Request Entry Queue에 들어감)
- 책을 P1이 쓰고 있으므로 P2, P3는 대여 요청 명단에 이름 적고 대기 (Condition Queue에 들어감)
- P1이 책 다 읽어서 반납함 (release() → Resource Available)
- P2가 기다리고 있으니 잠깐 책방에서 나옴 (Signaler Queue에 들어감)
- P2가 책 빌려감 (request() → Resource Unavailable)
- P2가 책방에서 나갔으니 P1이 다시 들어와서 결제함 (release 후 남은 작업 처리)
- P1 ㅂㅂ
- …
세마포어나 Eventcount-Sequencer로 처리할라면 머리아픔
- 장점:
- 사용이 쉽다
- 에러 발생 가능성이 낮다
- 단점:
- 지원하는 언어에서만 사용 가능
- 컴파일러가 OS를 이해하고 있어야 함