세마포어: Difference between revisions
From IT Wiki
No edit summary |
No edit summary |
||
(3 intermediate revisions by one other user not shown) | |||
Line 1: | Line 1: | ||
[[분류:운영체제]][[분류:기술사 기출]] | |||
;semaphore | ;semaphore | ||
;두개의 Atomic한 함수로 제어되는 정수 변수를 이용한 교착 상태 해법 | ;두개의 Atomic한 함수로 제어되는 정수 변수를 이용한 교착 상태 해법 | ||
== 개요 == | |||
* [[다익스트라|다익스트라(E.J. Dijkstra)]]가 제안 | * [[다익스트라|다익스트라(E.J. Dijkstra)]]가 제안 | ||
* 상호 배제의 원리를 보장하는 알고리즘 | |||
* 임계구역에 대하여 각각의 프로세스들의 접근을 제어하고 프로세스 사이의 동기를 유지 | |||
* 잠자기와 깨우기의 연산을 이용하며, 공유 자원의 수를 나타내는 변수를 세마포어 변수 S라고 함 | |||
* 세마포어 변수는 일반적으로 정수형 변수 사용 | |||
== 세마포어의 종류 == | |||
* 이진형 세마포어: 0과 1값, 한개의 공유자원을 상호배제 | |||
* 계수형 세마포어 : 0과 양의 정수, 여러개의 공유자원을 상호배제 | |||
== 구성 및 구현 == | == 구성 및 구현 == | ||
;P연산과 V연산으로 이루어진다. | ;P연산과 V연산으로 이루어진다. | ||
* 아래는 세마포어 카운트를 1로 가정 | * 아래는 세마포어 카운트를 1로 가정 | ||
* 세마포어의 카운트는 1 이상이며 카운트를 조절하여 진입 가능한 프로세스/스레드 수 조절 가능 | |||
=== P연산 === | === P연산 === | ||
Line 30: | Line 40: | ||
end V // 이제는 다른 프로세스가 들어 올수 있음 | end V // 이제는 다른 프로세스가 들어 올수 있음 | ||
</pre> | </pre> | ||
* 최초 S값을 1로 만든다. | |||
=== 구현 예 === | === 구현 예 === | ||
Line 46: | Line 56: | ||
=== 차이 === | === 차이 === | ||
* | * 세마포어는 뮤텍스가 될 수 있지만 뮤텍스는 세어포어가 될 수 없음 | ||
** ( | ** (뮤텍스는 상태가 0, 1 두 개 뿐인 이진형 세마포어) | ||
* | * 세마포어는 소유할 수 없는 반면, 뮤텍스는 소유가 가능하며 소유주가 이에 대한 책임 | ||
** | * 세마포어는 파일 형태로 존재하며 전 시스템 범위, 뮤텍스는 프로세스 범위이며 프로세스 종료 시 초기화 | ||
* | |||
* | == 기술사 기출 == | ||
* [http://q.fran.kr/문제/6105 정보관리기술사 66회 1교시] | |||
* [http://q.fran.kr/문제/5765 컴퓨터시스템응용기술사 108회 3교시] | |||
* [http://q.fran.kr/문제/10082 컴퓨터시스템응용기술사 121회 1교시] |
Latest revision as of 22:40, 11 May 2020
- semaphore
- 두개의 Atomic한 함수로 제어되는 정수 변수를 이용한 교착 상태 해법
개요[edit | edit source]
- 다익스트라(E.J. Dijkstra)가 제안
- 상호 배제의 원리를 보장하는 알고리즘
- 임계구역에 대하여 각각의 프로세스들의 접근을 제어하고 프로세스 사이의 동기를 유지
- 잠자기와 깨우기의 연산을 이용하며, 공유 자원의 수를 나타내는 변수를 세마포어 변수 S라고 함
- 세마포어 변수는 일반적으로 정수형 변수 사용
세마포어의 종류[edit | edit source]
- 이진형 세마포어: 0과 1값, 한개의 공유자원을 상호배제
- 계수형 세마포어 : 0과 양의 정수, 여러개의 공유자원을 상호배제
구성 및 구현[edit | edit source]
- P연산과 V연산으로 이루어진다.
- 아래는 세마포어 카운트를 1로 가정
- 세마포어의 카운트는 1 이상이며 카운트를 조절하여 진입 가능한 프로세스/스레드 수 조절 가능
P연산[edit | edit source]
- 같이 들어갈 수 없는 임계영역에 들어가고자 하는 프로세스는 P를 거쳐야 한다.
procedure P(S) while S=0 do wait S := S-1 end P
- 최초 S값은 1
- S가 1이면
- 0으로 만들고 진입한다.
- S가 0이면
- S가 1이 될때 까지 기다린다.
V연산[edit | edit source]
- P연산을 통과해 임계영역의 연산을 끝낸 프로세스가 V연산을 수행하게 된다.
procedure V(S) // 현재상태는 S가 0 S := S+1 // S를 1로 원위치시켜 해제하는 과정 end V // 이제는 다른 프로세스가 들어 올수 있음
- 최초 S값을 1로 만든다.
구현 예[edit | edit source]
P(S); ------------------------ 위 험 지 역(Critical Section) = 임계영역 ------------------------ V(S);
세마포어와 뮤텍스[edit | edit source]
- 세마포어(Semaphore) : 공유된 자원의 데이터를 여러 프로세스가 접근하는 것을 막는 것
- 뮤텍스(Mutex) : 공유된 자원의 데이터를 여러 쓰레드가 접근하는 것을 막는 것
차이[edit | edit source]
- 세마포어는 뮤텍스가 될 수 있지만 뮤텍스는 세어포어가 될 수 없음
- (뮤텍스는 상태가 0, 1 두 개 뿐인 이진형 세마포어)
- 세마포어는 소유할 수 없는 반면, 뮤텍스는 소유가 가능하며 소유주가 이에 대한 책임
- 세마포어는 파일 형태로 존재하며 전 시스템 범위, 뮤텍스는 프로세스 범위이며 프로세스 종료 시 초기화