뮤텍스는 한 번에 하나의 스레드만 임계 영역(공유 자원 독점 보장)을 실행할 수 있도록 하는 이진 세마 포어(1또는 0만 존재)에 가까운 동기화 방법입니다.
Mutex는 mutual exclusion(상호배제)의 약자입니다.

holder)lock_acquire()lock_release()lock_held_by_current_thread()lock()과 unlock()으로 사용합니다.뮤텍스 사용시, 낮은 우선순위 스레드가 락을 가지고 높은 우선 스레드를 막는 문제가 생길 수 있습니다. Priority inversion(우선순위 역전) 이라고 합니다.
해결법 (Priority Donation)
Pintos에서는 이를 해결하기 위해 lock_acquire()에서 우선순위 기부(priority donation)를 구현해야 합니다.
→ 해당 로직은 PintOS Project 1의 주요 구현 과제 입니다.
Pintos에서는 synch.c의 struct lock이 뮤텍스 역할을 합니다. 내부적으로 세마포어를 사용하여 구현되어 있습니다.
lock_acquire(&lock); // 락 획득
// critical section
lock_release(&lock); // 락 해제
lock_acquire() 와 lock_release() 는 내부적으로 sema_down() 과 sema_up() 을 이용하며, 우선순위 기부(priority donation)를 처리합니다.
따라서 Project 1에서 구현 핵심 포인트 중 하나가 바로 이 뮤텍스와 우선순위 상속입니다.
세마포어를 락처럼 사용해도 되지 않을까요?
세마포어는 어떤 스레드든 up() 이 가능하지만, Mutex는 락을 획득한 소유자만 해제 가능합니다.
| 구분 | 세마포어 | 뮤텍스 |
|---|---|---|
| 소유자 개념 | 없음 | 있음 (owner) |
| 락 해제 가능 | 아무 스레드나 가능 | 락을 획득한 스레드만 가능 |
세마포어는 일반적인 동기화 도구(자원 개수 관리)이고, Mutex는 임계 구역 보호 전용 도구(임계 구역 보호)입니다. → Mutex는 항상 한 번에 하나인 상호 배제 목적 전용 입니다.
Mutex는 세마포어보다 더 높은 수준의 추상화이고 임계 구역 보호에 특화된 안전하고 명확한 동기화입니다.
구조적 안전성, 코드의 명확성, 실수 방지, 우선순위 처리 측면에서 우수합니다.