PE Notes · CA/OS
세마포어
정수 카운터로 임계구역을 여는 세마포어의 P·V를 뮤텍스·모니터와 가르고, 이진·카운팅과 생산자-소비자를 정리합니다.
공유 변수를 동시에 고치면 값이 섞입니다. 임계구역 문제는 , 진행, 유한 대기를 같이 만족해야 합니다. 는 그 문을 정수 카운터로 구현합니다. P(wait)는 들어가기 전에 값을 내리고, 0이면 잠듭니다. V(signal)은 값을 올리고 잠든 쪽을 깨웁니다. 문맥 교환 노트가 그 잠듦과 깨어남을 받칩니다.
P·V와 두 종류
P는 S가 양수면 하나 줄이고 임계구역에 들어가고, 0이면 블록합니다. V는 하나 올리고 대기자를 준비 큐로 올립니다. 두 연산은 원자여야 합니다. 이진 세마포어는 0과 1만 가져 한 자리 잠금에 가깝습니다. 카운팅 세마포어는 N개 자원을 동시에 내줍니다.
| 비교축 | 세마포어 | ||
|---|---|---|---|
| 값 | 0 이상 정수 | 0 또는 1 | 조건 변수 |
| 해제 | 누구든 V | 소유자만 | wait·signal |
| 쓰임 | 개수·순서 | 단순 배제 | 복잡한 동기 |
| 자리 | OS 원시 | OS·라이브러리 | 언어 내장 |
| 교착 | 있음 | 있음 | 상대적으로 낮음 |
뮤텍스는 이진 세마포어와 닮았으나 잠근 쪽만 풀 수 있습니다. 모니터는 공유 자료와 연산을 한 객체에 넣고, 조건이 맞을 때까지 wait 했다가 signal로 깨웁니다. 언어의 synchronized가 이 칸입니다.
버퍼를 세 개로 막기
생산자-소비자는 empty·full·mutex 세 세마포어가 전형입니다. 생산자는 빈칸을 얻고 버퍼를 잠근 뒤 넣고, 채운 칸을 알립니다. 소비자는 채운 칸을 얻고 잠근 뒤 꺼내, 빈칸을 되돌립니다. 잠금 순서를 엇갈리게 잡으면 이 납니다. IPC 노트는 이 버퍼가 프로세스 사이로 확장된 그림입니다.
안에서 오래 머물면 우선순위 역전도 같이 열립니다. 재진입이 필요한 경로는 잠금 규칙을 따로 적습니다. 답안은 P·V, 이진/카운팅, 세 기법 표, 생산자-소비자 순서를 한 장에 닫습니다.