프로세스 동기화(2)- 세마포어
27 Feb 2020 | OS세마포어
세마포어란?
-
정수 값을 가지는 변수로서, 멀티프로그래밍 환경에서 공유 자원에 대한 접근을 제한하는 방법으로 사용된다
-
P와 V 명령에 의해서만 접근가능하다
-
추상자료형으로서, P와 V 명령을 수행할 때 원자적으로 수행된다고 가정하고 사용한다
구현 방법
- busy waitng
- 비효율적, 어느 프로세스가 먼저 임계 영역에 들어갈지 결정할 수 없다
P(S) {
while S <=0; // 아무것도 하지 않음 (반복문)
S--;
}
V(S) {
S++;
}
- block/wake-up
- busy waiting을 개선한 방법
P(S) {
S--;
if S < 0
// 이 프로세스를 재움 큐에 추가 (잠 듦)
}
V(S) {
S++;
if S <= 0
// 재움 큐로부터 프로세스를 제거 (깨어남)
}
세마포어의 종류
- Counting Semaphore
- 초기값은 가능한 자원 수로 정해진다
- 주로 resource counting에 사용한다
- binary Semaphore
- 세마포어 값으로 0 또는 1을 가진다
- 주로 mutual exclusion (lock/unlock)에 사용한다
주의점
- dead-lock 또는 starvation 발생 할 가능성이 존재하므로 사용시 유의해야한다
ref. KOCW
ref. wiki