본문 바로가기
  • 실행력이 모든걸 결정한다
OS 개념 정리

[OS] 동기화(3) - Language-level Solution : Monitor

by 김코더 김주역 2021. 5. 28.
반응형

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

댓글