프로세스 동기화(3) monitor
2024. 1. 30. 21:33ㆍCS/운영체제
monitor
- 실행 순서를 위한 동기화 및 상호 배제를 위한 동기화에 대해 모두 제공한다.
- mutual exclusion을 보장한다.
- 조건에 따라 스레드가 대기(waiting)상태로 전환 가능하다.
- monitor에는 두개의 큐가 존재한다.
- entry queue : critical section에서 진입을 기다리는 큐로서, mutex에 의해 관리된다.
- waiting queue : 조건이 충족되길 기다리는 큐로서, condition variable에 의해 관리된다.
- 프로그래밍 언어 레벨에서 지원하는 것임!
- 구성요소
- mutex
- critical section에서 mutual exclusion을 보장하는 장치로
- critical section에 진입하려면 mutex lock을 취득해야한다.
- mutex lock을 취득하지 못한 스레드는 큐에 들어간 대기(waiting)상태로 전환한다.
- mutex lock을 쥔 스레드가 lock을 반환하면, lock을 기다리며 큐에 대기 상태로 있던 스레드 중 하나가 실행된다.
- condition variable(s)
- waiting queue를 가진다.
- 이때, waiting queue는 조건이 충족되길 기다리는 스레드들이 대기상태로 머무는 곳을 의미한다.
- wait동작
- thread가 자기 자신을 condition variable의 waiting queue에 넣고 대기 상태로 전환하는 동작을 의미한다.
- signal동작
- waiting queue에서 대기중인 스레드 중 하나를 깨운다.
- broadcast동작
- waiting queue에서 대기중인 스레드 전부를 꺠우는 것을 의미한다.
- mutex
- monitor는 아래와 같은 문제를 해결해준다.
- producer는 buffer가 다 찼는지를 계속해서 확인해야하는 문제, consumer는 buffer가 비었는지를 계속해서 확인해야하는 문제가 있다. 이를 monitor가 해결해준다.
자바에서의 monitor
- 자바에서 모든 객체는 내부적으로 모니터를 하나씩 가진다.
- 모니터의 mutual exclusion기능은 synchronized키워드로 사용한다.
- 자바에서의 모니터는 condition variable를 하나만 가진다! 즉 waiting queue가 하나라는 것을 의미함!
- 자바 모니터의 세가지 동작
- wait
- notify (=위에서 살펴본 signal과 같다.)
- notifyAll (=위에서 살펴본 broadcast와 같다.)
'CS > 운영체제' 카테고리의 다른 글
페이징을 통한 가상 메모리 관리 (0) | 2024.02.09 |
---|---|
연속메모리 할당의 개념과 방식 이에 따른 문제점 (1) | 2024.02.09 |
프로세스 동기화(2) - deadlock? (0) | 2024.01.30 |
프로세스 동기화(1) (1) | 2024.01.29 |
preemptive / non-preemptive (0) | 2024.01.23 |