모니터는 데이터와 그 데이터를 다루는 함수들이 하나의 객체처럼 캡슐화된 동기화 구조입니다.
보통 언어나 시스템 레벨에서 제공되며, 락 + 조건변수(Condition variable)로 구성되어 있습니다.

wait() ( cond_wait() )signal() ( cond_signal() )breadcast() ( cond_breadcast() )wait(), signal() 등의 조건 변수를 통해 스레드 간 대기와 알림 수행합니다.PintOS에서는 명시적으로 monitor 구조를 지원하지 않지만, Lock + Condition variable 를 조합하여 모니터 스타일로 구현할 수 있습니다.
lock_acquire(&lock);
while (!condition_met)
cond_wait(&cond, &lock);
do_something();
lock_release(&lock);
cond_wait()는 내부적으로 락을 해제하고, 조건 변수 큐에 들어가고, 다시 락을 잡습니다.
해당 형태는 Project 2 이상에서 유저 프로그램 실행, 파일 시스템 등 다양한 상황에서 사용됩니다.
| 항목 | 세마포어 | 뮤텍스 | 모니터 |
|---|---|---|---|
| 추상화 수준 | 낮음 (기초 동기화 도구) | 중간 (락 전용) | 높음 (락 + 조건 변수 캡슐화) |
| 락 소유 개념 | 없음 | 있음 | 있음 |
| 조건 대기 지원 | busy-wait 또는 직접 처리 | 직접 처리 필요 | 조건 변수로 구조화됨 |
| 코드 구조 | 느슨함 | 단일 락 보호 | 모듈화 / 안전성 뛰어남 |