[운영 체제] Process Synchronization - Monitor

Junseo Kim·2020년 10월 22일
0

운영체제 공부

목록 보기
9/10

Monitor

동시 수행중인 프로세스 사이에서 추상자료형의 안전한 공유를 보장하기 위함
프로그래밍 언어 차원에서 Synchronization 문제를 자동으로 해결하는 high-level synchronization construct로 프로그래머의 부담을 줄여준다.

Semaphore의 문제점

P연산, V연산을 통해 코딩이 쉬워졌음에도 불구하고 코딩하기 힘들다(문제가 생겼을 때 버그를 찾기 쉽지 않음) -> 한번의 실수가 모든 시스템에 치명적 영향을 끼침 -> 모니터 사용

공유데이터를 접근하기 위해서는 monitor 내부의 procedure를 통해서만 공유 데이터를 접근할 수 있게 만들어 놓은 것

즉 모니터 안에다 공유 데이터와 공유 데이터에 접근하기 위한 procedure를 정의해놓고 공유 데이터에 접근할 때 procedure를 통해서만 할 수 있게 함

모니터 내부의 procedure는 동시에 여러개가 실행되지 못하도록 통제 -> lock을 걸 필요가 없다.(세마포와의 차이점. 모니터가 알아서 해준다)

monitor monitor-name
{
    shared variable declarations
    
    procedure body P1(...) {
        ...
    }
    procedure body P2(...) {
        ...
    }
    procedure body P3(...) {
        ...
    }
    {
        initialization code
    }
}

프로세스가 모니터 안에서 기다릴 수 있도록 하기 위한 condition variable 필요

Condition variable

모니터 안에서 코드를 실행하다가 충족되지 않은 부분 때문에 오래 걸리는 경우 해당 프로세스를 잠들게 한다. 어떤 조건이 충족되지 않아서 잠들게 했는지에 따라서 조건에 해당하는 것을 변수로 둘 수 있다. 이 변수가 condition variable이다.

세마포 변수와 달리 어떤 값을 가지는 변수는 아니고 어떤 프로세스를 잠들게하고 줄 세우기 위한 변수이다.

wait()

어떤 프로세스를 잠들게 하기 위한 연산.

signal()

누군가가 x라는 condition variable을 다쓰고 빠져나가면 x 라는 조건 때문에 잠들어 있던 프로세스가 있는 경우 그 프로세스 중 하나를 깨워주는 연산.

0개의 댓글