/ OS

OS(8) - Monitor

OS 관련 포스팅

Monitor

  • semaphore 이후 process synchronization tool
  • semaphore(assembly 수준) 보다 고수준(high level language 수준) 개념
  • 구조
    공유자원(common variable) + 공유자원 접근함수
    → 2개의 queues: 배타동기 + 조건동기
    → 공유자원 접근함수에는 최대 1개의 thread만 진입(배타동기)
    : mutual exclusion
    → common variable에 접근한 method를 실행하고 있다면 다른 thread는 queue에 대기
    → 진입 thread가 조건동기(wait())로 block되면 새 thread 진입가능
    : conditional synchronization
    : wait()을 부르면 실행중인 thread가 queue에 갇힘(= 새 thread 진입가능)
    → 새 thread는 조건동기(notify())로 block된 thread를 깨울 수 있음
    → 깨운 thread는 현재의 thread가 나가면 진입할 수 있음

Java Monitor

  • Java의 모든 객체는 monitor가 될 수 있음
    → 배타동기: synchronized 키워드 사용
    → 조건동기: wait(), notify(), notifyAll() method사용

일반적 사용(1): Mutual exclusion

synchronized {
Critical-Section
}

synchronized 키워드만 사용하면 됨: 간단
→ monitor는 초깃값 설정 없음
→ semaphore는 semaphore import, 초깃값(= 1) 설정,
C.S. 앞뒤로 acquire(), release() 선언: 복잡

일반적 사용(2): Ordering

p1 p2
  wait();
S1; S2;
notify();