세마포어: Difference between revisions
From CS Wiki
(새 문서: ;semaphore ;두개의 Atomic한 함수로 제어되는 정수 변수를 이용한 교착 상태 해법 * 에츠허르 다익스트라가 개발 == 구성 및 구현 == ;P연산...) |
No edit summary |
||
Line 10: | Line 10: | ||
=== P연산 === | === P연산 === | ||
;같이 들어갈 수 없는 임계영역에 들어가고자 하는 프로세스는 P를 거쳐야 한다. | |||
<pre> | <pre> | ||
procedure P(S) | procedure P(S) | ||
Line 23: | Line 24: | ||
=== V연산 === | === V연산 === | ||
;P연산을 통과해 임계영역의 연산을 끝낸 프로세스가 V연산을 수행하게 된다. | |||
<pre> | <pre> | ||
procedure V(S) // 현재상태는 S가 0 | procedure V(S) // 현재상태는 S가 0 |
Revision as of 22:21, 10 August 2019
- semaphore
- 두개의 Atomic한 함수로 제어되는 정수 변수를 이용한 교착 상태 해법
- 에츠허르 다익스트라가 개발
구성 및 구현
- P연산과 V연산으로 이루어진다.
- 아래는 세마포어 카운트를 1로 가정
- 세마포어의 카운트는 1 이상이며 카운트를 조절하여 진입 가능한 프로세스/스레드 수 조절 가능
P연산
- 같이 들어갈 수 없는 임계영역에 들어가고자 하는 프로세스는 P를 거쳐야 한다.
procedure P(S) while S=0 do wait S := S-1 end P
- 최초 S값은 1
- S가 1이면
- 0으로 만들고 진입한다.
- S가 0이면
- S가 1이 될때 까지 기다린다.
V연산
- P연산을 통과해 임계영역의 연산을 끝낸 프로세스가 V연산을 수행하게 된다.
procedure V(S) // 현재상태는 S가 0 S := S+1 // S를 1로 원위치시켜 해제하는 과정 end V // 이제는 다른 프로세스가 들어 올수 있음
- 최초 S값을 1로 만든다.
구현 예
P(S); ------------------------ 위 험 지 역(Critical Section) = 임계영역 ------------------------ V(S);
세마포어와 뮤텍스
- 세마포어(Semaphore) : 공유된 자원의 데이터를 여러 프로세스가 접근하는 것을 막는 것
- 뮤텍스(Mutex) : 공유된 자원의 데이터를 여러 쓰레드가 접근하는 것을 막는 것
차이
- Semaphore는 Mutex가 될 수 있지만 Mutex는 Semaphore가 될 수 없습니다.
- (Mutex 는 상태가 0, 1 두 개 뿐인 binary Semaphore)
- Semaphore는 소유할 수 없는 반면, Mutex는 소유가 가능하며 소유주가 이에 대한 책임
- Semaphore의 경우 이러한 Semaphore를 소유하지 않는 쓰레드가 Semaphore를 해제 가능
- Semaphore는 시스템 범위에 걸쳐있고 시스템 파일 형태로 존재
- Mutex는 프로세스 범위를 가지며 프로세스가 종료될 때 자동으로 Clean up