모니터

GwanMtCat·2023년 9월 18일
0
post-thumbnail

공유 자원을 사용할 때, 모든 프로세스/스레드가 가 세마포어 알고리즘을 따른다면 굳이 P()와 V()를 사용할 필요 없이, 자동으로 처리하면 된다.

이를 실제로 구현한 것이 모니터(monitor) 이다.

모니터는 공유 자원을 내부적으로 숨기고, 공유 자원에 접근하기 위한 인터페이스만 제공함으로써 자원을 보호하고, 프로세스 간에 동기화를 시킨다.

즉, 객체마다 모니터를 결합할 수 있다면 그 객체는 두 개 이상의 스레드가 접근할 수 없게 된다.

자바에서는 synchronized 블록, 메소드를 통해 선언 되면 모든 객체가 고유한 모니터와 결합이 되어서 동기화 작업이 수행된다.

시스템 호출과 같은 방법으로 모니터도 보호할 자원을 임계구역으로 숨기고, 임계구역에서 작업할 수 있는 인터페이스만 제공하여 자원을 보호한다.

모니터의 작동 원리는 다음과 같다.

  1. 임계구역으로 지정된 변수나, 자원에 접근하고자 하는 프로세스는 직접 P()나 V()를 사용하지 않고, 모니터에 작업 요청을 한다.

  2. 모니터는 요청받은 작업을 모니터 큐에 저장한 후, 순서대로 처리하고 그 결과만 해당 프로세스에 알려준다.

monitor shared_balance {
	private:
    	int balance = 10
        boolean busy = false;
		condition mon;
        
	public:
    	increase(int amount) {
        	if(busy == true) mon.wait(); // 모니터 큐에서 자신의 차례가 올 때까지 대기
            busy = true;
            balance = balance + amount;
          	mon.signal(); // 모니터 큐에서 기다리는 다음 프로세스에 순서를 념겨준다.
        }
}


참조한 책 및 사이트

쉽게 배우는 운영체제
https://dev-splin.github.io/cs(computer%20science)/operating%20system/OS-Mutex,Semaphore,Monitor/

0개의 댓글