OS(8) - Monitor
OS 관련 포스팅
- OS(1) - Introduction
- OS(2) - Interrupt-Based System
- OS(3) - Process Management
- OS(4) - CPU Scheduling
- OS(5) - Thread
- OS(6) - Classical Synchronization Problems
- OS(7) - Deadlock
- OS(8) - Monitor
- OS(9) - Midterm
- OS(10) - Main Memory Management
- OS(11) - Contiguous Memory Allocation
Monitor
- semaphore 이후 process synchronization tool
- semaphore(assembly 수준) 보다 고수준(high level language 수준) 개념
- 구조
→ 공유자원(common variable) + 공유자원 접근함수
→ 2개의 queues: 배타동기 + 조건동기
→ 공유자원 접근함수에는 최대 1개의 thread만 진입(배타동기)
: mutual exclusion
→ common variable에 접근한 method를 실행하고 있다면 다른 thread는 queue에 대기
→ 진입 thread가 조건동기(wait())로 block되면 새 thread 진입가능
: conditional synchronization
: wait()을 부르면 실행중인 thread가 queue에 갇힘(= 새 thread 진입가능)
→ 새 thread는 조건동기(notify())로 block된 thread를 깨울 수 있음
→ 깨운 thread는 현재의 thread가 나가면 진입할 수 있음
Java Monitor
- Java의 모든 객체는 monitor가 될 수 있음
→ 배타동기: synchronized 키워드 사용
→ 조건동기: wait(), notify(), notifyAll() method사용
일반적 사용(1): Mutual exclusion
synchronized { |
Critical-Section |
} |
→ synchronized 키워드만 사용하면 됨: 간단
→ monitor는 초깃값 설정 없음
→ semaphore는 semaphore import, 초깃값(= 1) 설정,
C.S. 앞뒤로 acquire(), release() 선언: 복잡
일반적 사용(2): Ordering
p1 | p2 |
wait(); | |
S1; | S2; |
notify(); |