SEMAPHORE STATE

세마포어 value 의미

큐 기반 세마포어에서는 카운터가 0 아래로 내려가는 순간부터 대기 큐의 길이까지 함께 표현한다.

value > 0

즉시 통과

남은 슬롯이 있으므로 wait은 값을 1 줄이고 바로 진행한다.

value = 0

경계 상태

마지막 슬롯이 사용 중이며 다음 wait부터 잠들 준비를 한다.

value < 0

대기 큐 존재

절대값이 잠든 스레드 수를 나타내며 signal이 하나씩 깨운다.

wait(S)

먼저 value를 감소시킨다. 결과가 음수이면 현재 스레드를 wait queue에 넣고 블로킹한다.

signal(S)

value를 증가시킨다. 증가 후에도 0 이하라면 큐에서 하나를 꺼내 Ready 상태로 보낸다.

원자성 보호

value 변경과 큐 조작은 세마포어 내부의 아주 짧은 임계 영역이므로 커널은 인터럽트 비활성화나 스핀락으로 이 구간만 보호한다.