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

Process Synchronization


  • Synchronization
    - Proecess간에 Interrupt -> Resource Share

  • Reentrant code(재진입가능 코드)
    - 여러 Process들에 의해 동시에 호출되거나, 이전 호출이 완료되기 전에 반복 호출되어도 올바르게 수행 되는 코드

  • Race Condition(경합 조건)
    - Synchronization의 문제로 여러 Process들이 동기화 절차를 거치지 않고 동시에 자원을 사용하기 위해 경쟁하므로써 그 수행결과를 예측할 수 없게 되는 상황

  • Critical Section
    - 하나의 Process가 자원을 독차지 하고 모든 작업을 수행시키는 공간
    - Mutual exclusion : 한 Process 외의 다른 Process는 배제 시킨다.
    - 여러개 Process가 진입 요청시 그중 하나의 Process만 허용한다.

  • Semaphore (중요)


    - Synchronization을 제공해 주는 정수형 변수
    - 초기값은 1로 초기화 한다.
    - Mutual exclusion 제공
    - Scheduling 제공된다.

    (semaphore Scheduling)

  • Binary Semaphore
    - 0 또는 1의 2가지 상황만 있는 경우

  • Counting Semaphore
    - 0과 1외 또다른 2가지 이상의 상황이 있는 경우

  • Producer / consumer
    - Producer : Data 생성 -> 버퍼에 넣는 행위
    - consumer : Data 사용 -> 버퍼에서 읽는 행위



  • Producer / Consumer에 Semaphore적용
    - Producer가 Consumer보다 빠를 경우 Producer는 대기현상이 발생
    - Consumer가 Producer보다 빠를 경우 Consumer행위는 대기현상이 발생
    -> 두 현상 모드 Semaphore를 사용하여 해결


  • Interrupt Disable을 사용한 Synchronization의 문제
    - Interrupt Disable은 시스템 전체에 영향을 미치기 때문에 상관없는 Process의 수행도 방해하게 됨

  • Semaphore의 단점
    - Unstructured Programming construct이기 떄문에 컴파일러등의 도구를 사용한 디버깅이 어렵다.


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

Process Synchronization(2)  (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