[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: 결제 대기실

→ 정리

  1. P1이 책방 도착
  2. 대여 대기실로 들어감 (Request Entry Queue에 들어감)
  3. 책(공유 자원)이 책방에 있으니 빌려감 (request() → Resource Unavailable)
  4. P2, P3 차례대로 책방 도착 → (Request Entry Queue에 들어감)
  5. 책을 P1이 쓰고 있으므로 P2, P3는 대여 요청 명단에 이름 적고 대기 (Condition Queue에 들어감)
  6. P1이 책 다 읽어서 반납함 (release() → Resource Available)
  7. P2가 기다리고 있으니 잠깐 책방에서 나옴 (Signaler Queue에 들어감)
  8. P2가 책 빌려감 (request() → Resource Unavailable)
  9. P2가 책방에서 나갔으니 P1이 다시 들어와서 결제함 (release 후 남은 작업 처리)
  10. P1 ㅂㅂ

세마포어나 Eventcount-Sequencer로 처리할라면 머리아픔

  • 장점:
    • 사용이 쉽다
    • 에러 발생 가능성이 낮다
  • 단점:
    • 지원하는 언어에서만 사용 가능
    • 컴파일러가 OS를 이해하고 있어야 함