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용 MechanismMulti 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밖에서 대기하기 위한 QueueBrinch-Hansen Style Monitor
- Wait Queue에 Signal을 보낸 Process가 수행을 계속하는 방식의 MonitorMonitor 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 |