세마포어1 Articles

  1. 2006/11/27 세마포어란.. (2)
운영체제 2006/11/27 14:54

세마포어란..

세마포어 공부 중 찾은 잘 설명된 첫 번째 글

o 세마포어 (semaphore)란 (1) ?

세마포어 1.


o 세마포어 (semaphore)란 (2) ?

세마포어 2



컴퓨터가 여러 프로그램을 동시에 수행하는 다중 프로그래밍 시스템에서는 프로세스들간의 상호 배제와 동기화를 위한 기본적인 연산이 필요하다. 세마포어는 다익스트라가 제안한 프로세스 동기화를 위한 구조로, 이는 여러 프로세스들에 의해 공유되는 변수로 정의된다. 그런데 이 변수는 보통의 방법으로는 액세스할 수 없고 오직 P와 V라는 연산으로만 다룰 수 있다. P와 V연산의 정의는 다음과 같다.

procedure P(S)   --> 최초 S값은 1임

while S=0 do wait  --> S가 0면 1이 될때까지 기다려야 함

S := S-1   --> S를 0로 만들어 다른 프로세스가 들어 오지 못하도록 함

end P


procedure V(S) --> 현재상태는 S가 0임

S := S+1   --> S를 1로 원위치시켜 해제하는 과정. 이제는 다른 프로세스가

end V              들어 올 수 있음


P와 V는 쪼갤수 없는 단일 연산이다.
즉 한 프로세스가 P나 V를 수행하고 있는 동안에는 프로세스가 인터럽트를 당하지 않는다.

이제 P와 V를 사용하면 다음과 같이 위험지역(cirtical section)에 대한 상호배제를 구현할수 있다.


P(S);

---------------
| 위 험 지 역   |
---------------

V(S);
최초에 S의 값은 1이다. 위와 같은 위험지역을 포함하는 두개의 프로세스 A와 B가 있다고 하자.

A와 B는 서로 독립적으로 수행되지만, 두 프로세스가 동시에 위험 지역으로 들어가서는 안된다.

위와 같이 세마포어를 사용하면 P(S)를 먼저 수행하는 프로세스가 S를 0으로 해놓고 위험지역에 들어가므로 나중에 도착하는 프로세스는 P에서 더이상 진행되지 못하고 기다리게 된다.

먼저 들어갔던 프로세스가 V(S)를 해주어야 비로서 P(S)에서 기다리던 프로세스가 위험지역에 들어갈 수 있고 따라서 상호배제가  실현된다.

위의 예는 이진 세마포어 (binary semaphore)로, 단지 하나의 프로세스만이 위험지역에 들어갈 수 있도록 한다. 한편 S의 초기값을 N으로 하면 최대 N개의 프로세스가 P(S)를 통과할 수 있게 되는데 이러한 경우에는 계수 세마포어 (counting semaphore)라 하며 자원 할당에 사용한다.

o Critical secion 란 ?

Critical Section



o Mutual exclusion (상호 배제)란(1) ?

Mutual exclusion 1



o Mutual exclusion (상호 배제)란(2) ?

Mutual exclusion 2



    
Revision History


div>