JUST WRITE

Monitor 본문

OS

Monitor

천재보단범재 2022. 1. 16. 16:02
이 글은 KOCW 강좌 중 경성대학교 양희재 교수님의 '운영체제' 강의를 정리한 글입니다.

 

Monitor

Monitor

MonitorSemaphore 이후에 나온 Process 동기화 도구이다.

Semaphore보다 고수준의 동기화 기능을 제공한다.

Monitor는 공유자원, 공유자원 접근 함수, 2개의 Queue로 이루어져 있다.

2개의 Queue는 Mutual exclusion Queue, Conditional synchronization Queue이다.

Mutual exclusion Queue에는 1개의 Thread만 진입한다.

wait()를 통해 공유자원을 쓰고 있는 Thread가 Conditional synchronization Queue에 들어간다.

새로운 Thread가 Mutual exclusion Queue에 들어갈 수 있다.

Mutual exclusion Queue에 들어간 새로운 Thread가 notify()를 통해 Conditional synchronization Queue에 들어간 Thread를 깨울 수 있다.

Monitor in Java

Java에서 Monitor를 제공한다.

Java의 모든 객체는 Monitor가 될 수 있다.

  • Mutual exclustion -> synchronized 키워드 사용
  • Conditional synchronization -> wait(), notify(), notifyAll() 사용
class Test {
    private int value, ....;
    
    synchronized void f() {
        ...
    }
    synchronized void g() {
        ...
    }
    void h() {
        ...
    }

위 코드에서 f()와 g()는 키워드 synchronized를 갖고 있으므로 Critical Section을 갖는다는 의미이다.

그래서 1개의 Thread가 f(), g()를 실행 중이면 다른 Thread가 f() 나 g()에 접근할 수 없다.

synchronized 키워드로 Mutual exclusion을 할 수 있다.

ordering 역시 가능하다.

  • wait() -> Thread를 Conditional synchronized Queue에 삽입
  • notify() -> Conditional synchronized Queue에 있는 Thread를 반환
  • notifyAll() -> Conditional synchronized Queue에 있는 모든 Thread를 반환

위 3가지 Method를 호출하여 ordering이 가능하다.

Thread A Thread B
  wait();
Critical Section Critical Section
notify();  

[참고사이트]

728x90
반응형

'OS' 카테고리의 다른 글

Paging  (0) 2022.01.20
Main Memory Management  (0) 2022.01.17
Deadlock  (0) 2022.01.15
Process 동기화  (0) 2022.01.14
Process vs Thread  (0) 2022.01.12
Comments