1. 모니터(Monitor)
모니터란 세마포 이후의 프로세스 동기화 도구이다. 세마포보다 한단계 높은 고수준 개념이다.
1) 모니터의 구조
모니터는 공유자원 + 공유자원 접근함수로 이루어져 있다.
모니터에는 2개의 큐가 존재한다. 하나는 배타동기를, 또하나는 조건동기를 처리한다.
공유자원 접근함수에는 최대 1개의 쓰레드만 진입 가능하다.
진입한 쓰레드가 조건동기로 블록되면 새 쓰레드가 진입할 수 있다.새 쓰레드는 조건동기로 블록된 쓰레드를 깨울 수 있다.(notify())깨워진 쓰레드는 현재 쓰레드가 나가면 재진입할 수 있다.
2. 자바 모니터
자바의 모든 객체는 모니터가 될 수 있다.
- 배타동기 : synchronized 사용하여 지정
- 조건동기 : wait(), notify(), notifyAll() 메소드 사용
하나의 쓰레드만 공유자원 접근함수에 접근할 수 있다. 즉, 한 쓰레드가 f() 메소드를 쓰고있다면, 다른 쓰레드는 f() 또는 g()에 접근할 수 없다.
1) 일반적 사용(1) : Mutual exclusion
모니터를 이용해 한번에 하나의 쓰레드만 공유자원을 이용하게 만들 수 있다. 단지 synchronized를 메소드 앞에 붙이면 된다.
2) 일반적 사용(2) : Ordering
모니터를 이용해 어느 메소드를 먼저 실행할지 설정할 수 있다.
BankAccountProblem을 예로 들면 다음 세가지 경우가 있다.
- 항상 입금 먼저(=Parent 먼저)
- 항상 출금 먼저(=Child 먼저)
- 입출금 교대로(P-C-P-C ...)
항상 입금 또는 출금을 먼저 실행하려면 다음과 같이 notify(), wait() 메소드를 이용하면 된다.
입출금을 교대로 나오도록 설정하려면 다음처럼 설정하면 된다.
'Programming > 운영체제' 카테고리의 다른 글
주기억장치관리 - MMU (0) | 2021.09.15 |
---|---|
주기억장치관리 개요 (Main Memory Management) (0) | 2021.09.04 |
교착상태 처리 (0) | 2021.08.27 |
전통적 동기화 예제 (3) 식사하는 철학자 문제 (0) | 2021.08.27 |
전통적 동기화 예제 (2) 공유 데이터베이스 접근 (0) | 2021.08.27 |