Language-level 솔루션 : Monitor
앞서 살펴봤던 Eventcount/Sequencer기법은 Busy waiting도 없고 Starvation도 일어나지 않는 좋은 상호 배제 솔루션이지만, low-level이다보니 구체적이고 복잡한 만큼 쓰기가 다소 불편할 수 있다.
그래서 프로그래밍 언어 레벨(high-level) 기법이 생겨났으며, 그 중 대표적인 기법이 Monitor이다.
실제로 C#, C++, Java 등에서 Monitor Class를 제공하고 있다.
1. Monitor란?
- Critical data와 Critical section을 모아둔 공간
- 하나의 프로세스만 진입 가능
- 사용이 쉬움
- 객체 지향 개념과 유사
2. Monitor의 구조
- Mutual exclusion
- Information hiding(정보 은폐) : 공유 데이터는 모니터 내의 프로세스만 접근 가능
- Entry queue : 모니터 내의 기능 수 만큼 존재함
- Condition queue : 모니터 내의 특정 이벤트를 기다리는 프로세스가 대기하는 큐
- Signaler queue : 모니터 내에 하나만 존재하며 signal() 명령을 실행한 프로세스가 임시 대기하는 큐. 모니터 내에는 최대 하나의 프로세스만 진입할 수 있으므로, 현재 프로세스는 다른 프로세스가 모니터 내로 들어올 수 있게 하기 위해 Signaler queue에 머물러서 모니터를 임시로 비워주는 것이다. Signaler queue에서 모니터로 다시 돌아오면 남은 작업을 처리하고 최종적으로 작업을 마치게 된다.
※ Signaler : 신호 제공자
3. Monitor의 동작
다음과 같이 기능마다 큐가 존재한다.
모니터 내부에 있는 프로세스는 특정 큐에 wait(), signal() 명령을 내려 프로세스를 대기시키거나 다른 프로세스를 깨울 수 있고, Critical section(requestR, releaseR), Critical data(R_Available)에 접근 할 수 있다.
4. Monitor로 해결 가능한 동기화 문제들
1) Producer-Consumer Problem
vaildBufs는 유효 버퍼 공간수로, 생산자가 데이터를 채워넣었을 때는 1증가하고 소비자가 데이터를 소비했을 때는 1감소한다.
2) Reader-Writer Problem
(1) beginReading
Writer가 현재 사용중이거나 큐에 대기중인 Writer가 존재한다면 Reader 대기
그렇지 않다면 numReaders 1증가 후 Reader 깨우기
(2) finishReading
읽기 완료 후 numReaders 1감소, numReaders=0이 되었다면 Writer 깨우기
(3) beginWriting
Reader 혹은 Writer가 현재 사용중이라면 Writer 대기
그렇지 않다면 writing=true
(4) finishWriting
쓰기 완료 후 writing=false
큐에 대기중인 Reader가 있다면 Reader 깨우기
그렇지 않다면 Writer 깨우기
3) Dining philosopher 문제
예) 5명의 철학자가 있다. 스파게티를 먹기 위해서는 좌우 포크 2개를 모두 들어야 한다.
※ ready는 queue배열
(1) pickup
자신의 포크가 2개가 아니라면 대기
그렇지 않다면 2개의 포크를 모두 들음 -> 양 옆 철학자들의 포크 수 1감소
(2) putdown
2개의 포크를 모두 내려놓음 -> 양 옆 철학자들의 포크 수 1증가
양 옆 철학자의 포크 수를 확인해서 포크 수가 2개인 철학자는 깨우기
5. Monitor의 장점
사용이 쉽고 에러 발생 가능성이 낮음
6. Monitor의 단점
지원하는 언어에서만 사용 가능하고 컴파일러가 OS를 이해하고 있어야 함
이미지 출처 : 한빛 미디어 운영체제
참고 자료 : 김덕수 교수님 - www.youtube.com/playlist?list=PLBrGAFAIyf5rby7QylRc6JxU5lzQ9c4tN
'OS 개념 정리' 카테고리의 다른 글
[OS] 메모리 관리 (0) | 2021.06.07 |
---|---|
[OS] Deadlock (0) | 2021.06.02 |
[OS] 동기화(2) - OS Solutions (0) | 2021.05.28 |
[OS] 동기화(1) - 동기화 기초, SW/HW Solutions (0) | 2021.05.24 |
[OS] Scheduling (0) | 2021.05.19 |
댓글