sw사관학교정글/OS 개념정리

[week08] KOCW 운영체제(반효경교수님) - Process Synchronization 2

D cron 2021. 12. 30. 19:13

Process Synchronization 2

Monitor 1

Semaphore의 문제점

정확성(correctness)의 입증이 어렵다.

한 번의 실수가 모든 시스템에 치명적 영향

  • P와 V 순서 잘못될때(왼쪽)
  • P연산후 V를 안해줬을 때(오른쪽)

monitor는 특별히 프로그래밍 언어 차원에서 Synchronization 문제를 해결하기 때문에 high-level synchronization construct라고 한다.

공유데이터를 접근하기 위해서는 내부의 procedure를 통해서만 접근가능하게 만듬

Monitor 2

프로그래머 입장에서는 뭐가 편할까?

  • lock을 걸 필요가 없다.
  • 기본적으로 monitor에 대한 동시접근을 허용하지 않는다. 나머지 프로세스는 기다려야 함(monitor가 자동으로 해결해서 프로그래머의 부담 줄여줌)

lock을 걸 필요는 없지만 자원의 개수를 세는건 필요하다. → condition variable

프로세스가 모니터 안에서 기다릴 수 있도록 하게 위해 condition variable 사용

Condition variable

  • condition x,y ;
  • Condition variable은 wait와 signal 연산에 의해서만 접근 가능

x.wait()

  • 어떤 조건을 만족하지 않아서 오래기다려야 할 때, 그 프로세스를 잠들게 하려고 사용
  • x라는 condition variable에 가서 줄을서도록 함
  • x.wait()을 invoke한 프로세스는 다른 프로세스가 x.signal()을 invoke하기 전까지 suspend됨

x.signal()

  • x라는 condition variable 조건을 기다리면서 잠든애들중에 하나를 깨워줘라.
  • x.signal()은 정확하게 하나의 suspend된 프로세스를 resume한다.
  • suspend된 프로세스가 없으면 아무 일도 일어나지 않음