반응형
세마포어(Semaphore)는 수기 깃발이라는 뜻으로 프로세스에서 공유 자원에 접근하는데 사용하는 변수를 의미한다. 세마포어는 상호 배제를 위해 사용되는 방법 중 하나 이다.
다수의 공유 자원에 사용되는 counting semaphore와 1개의 공유 자원에 사용되는 binary semaphore가 있다.
세마포어는 V operation과 P operation을 실행하여 동작한다. 공유 자원에 접근하기 전에 먼저 P를 실행하고 공유 자원을 반납할 때 V를 실행한다.
P와 V operation은 다음과 같다.
# P operation
P(S, I)
{
while(1)
{
if(S>=I)
{
S = S - I;
break;
}
}
}
# V operation
V(S, I)
{
S = S + I;
}
공유 자원을 얻기 위한 P에서 Semaphore S가 I 보다 작으면 대기하고 I 보다 커지며 함수를 반환한다. V는 다시 Semaphore S를 I 만큼 증가 시켜 공유 자원을 반환한다.
위의 P,V operation의 빨강색 부분은 atomic operation이여야 한다. 그래서, 위의 코드를 그대로 사용할 수는 없다. Atomic operation을 하드웨어로 구현하던지, critical section을 설정하여 mutual exclusion을 소프트웨어로 구현할 수 있다. Atomic operation이란 CPU에서 1개의 명령어로 실행되는 것을 의미한다. Atomic operation 실행 중에는 인터럽트가 실행되어서는 안된다.
Mutex는 Binary Semaphore와 기본적으로 동일하게 동작한다.
반응형
'컴퓨터공학' 카테고리의 다른 글
Stack과 Queue의 차이 (0) | 2017.10.04 |
---|---|
PHP (Hypertext Preprocessor) (0) | 2017.09.20 |
상호 배제 알고리즘 - Peterson 알고리즘 (0) | 2017.09.20 |
상호 배제 알고리즘 - Dekker 알고리즘 (0) | 2017.09.19 |
상호 배제 (Mutual Exclusion) (0) | 2017.09.19 |
댓글