🌞 모니터
프로세스 동기화를 제공하는 Abstract Data Type(ADT)
공유 데이터
그 데이터에 접근하는 함수 (임계영역 포함)
한 순간에 하나의 프로세스만이 모니터에서 (함수를) 수행
공유자원을 모니터의 내부에 지역 변수로 정의
모니터 내의 변수는 모니터의 함수로만 접근 가능
클래스와의 차이점 : 클래스의 경우 여러 프로세스가 함수를 사용 할 수 있지만, 모니터는 오직 하나의 프로세스만 함수를 사용 할 수 있다.
장점
단점
조건 변수
프로세스 동기화
꽉찬 경우에 대해서 full condition_variable을 통하여 대기를 할 것이다. 그리고 remove를 하는 메소드가 실행이 되면 signal(full)을 통해서 부른다.
큐가 비어 있어서 remove를 할 수 없는 상황일 때 empty condition_Variable을 통해서 대기를 하고, 이후에 add를 해주게 되면 empty변수로 signal을 보낸다.
전자의 경우는 엔트리큐, 웨잇큐, 시그널큐로 나눠져 있다.
후자의 경우는 엔트리큐와 웨잇큐로 나눠져 있다.
1 0 0 0
mutex = 1과 0
변수 mutex = 세마포로 자원에 들어갈 수 있는 자원
변수 next_count = 시그널을 보낸 프로세스 수
conditin_variable x = wait에 의해서
실행 순서 x > next > mutex
x가 실행이 되면 next를 확인하고 그리고 mutex를 확인한다.
시그널 발생시 : next_count를 늘려주어 signal에서 기다리고 있는 프로세스 수를 하나 눌려준다. 그리고 조건변수에 의해서 기다리고 있는 프로세스를 signal 하고, wait(next)를 통해서 signal 프로스를 기다려준다.
🌞 조건 대기 구조
wait의 우선권은 time 값이 작은 프로세스에게 부여한다.
조건 대기 구조 : x.wait(c);
c는 우선순위이다. x.signal 시 c 값이 (가장 작은) 높은 우선순위를 가진 프로세스를 먼저 재실행 한다.