Semaphore and Monitor


  • Semaphore의 문제점 보완
    - 함수명으로 Semaphore의 사용을 구분한다.


  • Mutex (Mutual exclusion)
    - Mutual exclusion을 구현하기 위해 사용하는 Sleeping Lock
    - 동일한 Mutex를 사용할 때 Mutex_lock()을 호출한 Process와 Mutex_unlock()을 호출한 Process가 일치해야 된다.

  • Semaphore의 구현
    - 기본적으로 C 구조체 이다.


  • P함수 / V함수 구현
    - Interrupt disable을 사용해야 안전성이 보장된다.
    - 짧은 시간이기 때문에 Interrupt disable을 사용해도 문제가 없다.
    - Cnt = Semaphore
    - Cnt가 0이상일 경우 : 남아있는 열쇠(자원)의 개수
    - Cnt가 0이하일 경우 : 절대값이 Queue에서 대기중인 Process의 개수
    - 기본적으로 Single Processor용 Mechanism


  • Multi Processor Semaphore Mechanism
    - Atomic OS 필요 : 글로벌 자원를 읽고, 쓰는 등 전체의 과정을 쪼갤 수 없는 기본 단위로 만듦
    - Bus를 장악하여 한 Processor가 자원을 사용하고 있을 경우 다른 Processor의 Bus Transaction을 차단

  • TAS (Test And Set) Instruction
    - 대표적인 Multi Processor Semaphore Mechanism
    - 메모리의 Boolean 변수를 읽어서 확인 후 값을 1로 쓰는 작업을 Atomic하게 수행
    - Busy waiting이란 단점이 있다.
        *Busy Waiting(Spining) : 특정 조건의 만족 여보를 루프를 돌면서 반복하여 확인하는 기법

  • Monitor
    - P나 V를 빼먹어서 생기는 오류를 최대한 줄이기 위해 사용
    - Java에서 Synchronized Class가 예


  • Monitor API
    - condition 변수 : 어떤 조건이 충족되기를 기다리고 있는 Process들의 Waiting Queue
    - Monitor는 한번에 하나의 Process만 내부의 Method를 수행할 수 있도록 허용하기 때문에 Monitor 내부의 변수들을 따로 보호하지 않는다.



  • Hoare Style Monitor(Signal-and-Urgent-wait monitor)
    - waitQueue에서 깨어난 Process가 바로 monitor내부로 진입하는 방식의 Monitor
        *Signaler Queue : Signal을 보낸 Process가 Monitor밖에서 대기하기 위한 Queue

  • Brinch-Hansen Style Monitor
    - Wait Queue에 Signal을 보낸 Process가 수행을 계속하는 방식의 Monitor

  • Monitor Implementation



'프로그래밍 > 운영체제' 카테고리의 다른 글

Process Synchronization  (0) 2016.10.20
CPU Scheduling  (0) 2016.10.15
MultiThreading  (0) 2016.10.13
Context Switching(2)  (0) 2016.10.11
Context Switching(1)  (0) 2016.10.11

+ Recent posts