본문 바로가기
컴퓨터공학

세마포어 (Semaphore) 란?

by 무에서 2017. 9. 20.
반응형

세마포어(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 SI 보다 작으면 대기하고 I 보다 커지며 함수를 반환한다. V는 다시 Semaphore SI 만큼 증가 시켜 공유 자원을 반환한다.

위의 P,V operation의 빨강색 부분은 atomic operation이여야 한다. 그래서, 위의 코드를 그대로 사용할 수는 없다. Atomic operation을 하드웨어로 구현하던지, critical section을 설정하여 mutual exclusion을 소프트웨어로 구현할 수 있다. Atomic operation이란 CPU에서 1개의 명령어로 실행되는 것을 의미한다. Atomic operation 실행 중에는 인터럽트가 실행되어서는 안된다.

Mutex는 Binary Semaphore와 기본적으로 동일하게 동작한다.



반응형

댓글