cs/운영체제

6강-5. Process Synchronization 5

Tomato_Coffee 2023. 11. 6. 11:21

프로세스 동기화 (process synchronization) = 병행 제어( concurrency control)

  • 모니터의 역할
    • active 한 프로세스가 하나만 모니터 안에 있는 코드를 실행할 수 있게 한다.
      • 프로그래머는 공유 데이터를 접근할 때, lock을 신경 쓸 필요가 없어진다.
    • 예시
      • A 프로세스가 모니터 안에 와서 공유 데이터를 접근하는 코드를 실행하고 있을 때, cpu를 빼앗겼다.
      • B 프로세스가 모니터를 접근하는 코드를 들어오려고 한다.
      • 그러나 A 프로세스는 active 한 상태로 모니터에 남아있다.
      • 그래서 B 프로세스는 모니터안에 있는 코드를 실행시키지 못한다.
      • 모니터 밖에 있는 큐에서 기다리게 된다. 
        • 그러면 언제 모니터 내부에 들어올 수 있는가?  
          • 1. 모니터 안에 있는 active 한 프로세스 개수가 0개 
          • 2. 내부에 있는 프로세스가 잠에 빠질때 .

큐에서 기다리게 된다.
조건이 맞지 않아서 내부에 있는 프로세스가 잠에 빠질때

wait() : 프로세스를 잠에 들게 한다. 

  • x.wait() : x라는 조건을 만족하지 못해서 잠에 빠진다.
  • x.signal() :  x에 잠들어 있는 프로세스를 깨워준다.


  • 세마포어와 모니터는 목적이 다르다.
    • 모니터는 동시접근을 막는 것을 모니터 차원에서 지원을 해준다.
    • 세마포어는 자원을 획득하기 위해서 프로그래머가 알아서 p, v 연산을 해줘야 한다.

모니터 방식 : 식사하는 철학자 문제
state [i] == hungry 부분을 생각해 보자
다른데서도 test 함수를 쓰기 때문에 본인이 배고픈지 체크해야한다.
철학자 i 가 잠들어 있다면 깨워준다.


 

양쪽 젓가락을 잡을 수 없는 상태이면 잠에 든다.


왼쪽, 오른쪽 철학자(인접 철학자)를  test 해서 검사해준다.