[운영체제] 모니터 (Monitor)

moonee·2021년 8월 22일
0

운영체제

목록 보기
9/10

세마포어의 한계점

Timing Errors가 발생할 수 있고, 이는 추적하기에 몹시 까다롭다. 예를 들어 바이너리 세마포어를 사용 할 시, 각 프로세스들이 wait->signal 순서를 지켜야하는데 이를 지키지 않을 경우가 있을 수 있고, 그럴 경우 임계 영역에 두 개의 프로세스가 동시에 진입하게 되는 문제가 있다.

즉 세마포어는 프로그래머의 실수가 유발 될 수 있으므로, 이러한 가능성을 최대한 낮춰야한다.



모니터 (Monitor)


세마포어의 한계를 보완해주는 고차원적인 비동기 방법으로, 상호배재 속성을 제공해주는 하나의 데이터 타입이다.

아래 예제에서 monitor 블록 내부에 선언된 함수들은 모두 동기화가 된다.

monitor {
    function p1(..){}
    function p2(..){}
    function p3(..){}
}

조건 변수

모니터가 자체적으로 동기화 처리하기는 어려우므로, 조건 변수를 정의하여 동기화 메커니즘을 제공해주어야 한다.
이 때 조건 변수는 모니터 내부에서만 접근 가능하다.

condition x y;
x.wait();
y.signal();

따라서, 해당 조건변수별로 wait queue가 분리되어 동기화가 된다.

참고 / 사진 출처

profile
기록

0개의 댓글