Post

[운영체제-양희재 교수님]16강 모니터

경성대학교 양희재 교수님의 운영체제 16강

모니터(Monitor)

  • 모니터
    • 세마포 이후 등장한 프로세스 동기화 도구
      • 현재는 동기화 도구로써 세마포보다 모니터를 더 많이 사용
    • 세마포다 고수준으로 구성되어 사용하기 쉽다.
  • 구조
    • 공유 자원 + 공유 자원 접근 함수 + 상호 배타를 위한 queue + 조건 동기를 위한 queue
    • 공유 자원 접근 함수에는 최대 1개의 쓰레드만 진입 가능
      • 진입을 대기하는 쓰레드는 상호 배타를 위한 queue에서 대기
    • 진입 쓰레드가 조건 동기를 위한 queue에 갇혀 블록되면 새 쓰레드 진입 가능
      • wait()
    • 새 쓰레드는 조건 동기로 블록된 쓰레드를 깨울 수 있다.
      • notify()
    • 깨워진 쓰레드는 공유 자원에 접근 중인 현재 쓰레드가 나가면 재진입할 수 있다.

자바 모니터

  • 자바의 모든 객체는 모니터가 될 수 있다.
  • 상호 배타 ⇒ synchronized 키워드 사용하여 지정

    1
    2
    3
    
      synchronized {
      	Critical-Section
      }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    
      class C {
      	private int value, ;
      	synchronized void f() {
      	// 여기에는 한 개의 쓰레드만 접근할 수 있다.
      	...
      	}
      	synchronized void g() {
      	// 여기에는 한 개의 쓰레드만 접근할 수 있다.
      	... 
      	}
      	void h() {
      	// 여기에는 여러 개의 쓰레드도 접근할 수 있다.
      	... 
      	}
      }
    
  • 조건 동기 ⇒ wait(), notify(), notifyAll() 메소드 사용
  • Ordering

    1
    2
    3
    4
    
      P1                   P2
                           wait();
      S1                   S2
      notify();
    
This post is licensed under CC BY 4.0 by the author.