세마포어, 뮤텍스
태그 :
- 개념
- 세마포어의 개념 운영체계의 자원을 경쟁적으로 사용하는 다중 프로세스에서, 행동을 조정하거나 또는 동기화 시키는 기술 다익스트라가 제안 예) 철도에서 열차의 진행가능 여부를 나타내는 신호기 (신호기가 올라가면 장애물이 있다는 표시로 열차는 대기함)
I. 병행처리를 위한 프로세스 동기화 기법 세마포어의 개념
- 운영체계의 자원을 경쟁적으로 사용하는 다중 프로세스에서, 행동을 조정하거나 또는 동기화 시키는 기술
- 다익스트라가 제안
- 예) 철도에서 열차의 진행가능 여부를 나타내는 신호기 (신호기가 올라가면 장애물이 있다는 표시로 열차는 대기함)
II. 세마포어 기법, 작동원리 및 유형
가. 세마포어를 이용한 상호배제 기법
- Active가 1이면 critical section을 수행하는 프로세스가 없음 의미
- Active가 0이면 critical section을 수행하는 프로세스가 있음 의미
나. 세마포어의 작동원리
- 세마포어 s는 정수값을 가지며 p와 v에 의해서만 접근되는 정수형 공용변수
- Semaphore s에 하나의 대기큐 Qs를 할당하고 초기화
- P(S) 연산(wait()) : while s=0 do wait // 대기
s = s - 1; // 독점
- V(S) 연산( Signal()) : s = s + 1; // 해제
다. 세마포어의 유형
유형 |
목적 |
내용 |
Binary Semaphore |
- 상호배제, 프로세스동기화 |
세마포어변수 : 0 or 1 |
Count Semaphore |
- 초기에 동시에 진행가능한 프로세스개수 정의가능 |
0,1,2, … |
III. 상호배제 매커니즘 간 비교
구분 |
Critcal Section |
Mutex |
Semaphore |
동기화 객체 |
유저모드 |
커널모드 |
|
특징 |
쓰레드 동기화, 고속 |
프로세스/쓰레드 모두사용가능, 저속 |
|
Wait |
EnterCritcalSection |
Wait |
P 연산 |
Signal |
LeaveCriticalSection |
Mutex |
V 연산 |
IV. 세마포어와 뮤텍스 비교
구분 |
세마포어(Semphore) |
뮤텍스(Mutex) |
---|---|---|
원리 |
화장실이 n칸(접근할 수 있는 최대 허용치 만큼 동시에 사용자 접근을 할 수 있게 함), 세마포어 카운트가 0이면 대기
|
화장실에 들어가기 위한 열쇠를 한 사람이 가지고 있다면, 그 사람만이 들어갈 수 있다. 대기열(큐)에 기다리게 됨. → 세마포어의 일종이다.
|
목적 |
Dead Lock을 피하기 위한 기술 중 하나 |
Critical Section을 가진 Thread 들이 running time이 서로 겹치지 않게, 각각 단독으로 실행하게 하는 기술 |
특징 |
공유 리소스에 접근할 수 있는 최대 허용치 만큼 동시에 사용자 접근을 할 수 있게 하는 기술 동기화 대상이 여러 개일 경우에 사용 |
뮤텍스는 한 번에 하나의 Thread만이 실행되도록 하는 재 입장할 수 있는 코드 섹션 직렬화된 접근이 가능하게 할 때 사용 뮤텍스 객체는 제어되는 섹션에 하나의 Thread만을 허용하기 때문에 해당 섹션에 접근하려는 다른 Thread들을 강제적으로 막음으로써 첫 번째 Thread가 해당 세션을 빠져 나올 때까지 기다린다. |