2019년 3월 8일
계수형 세마포어 (Counting Semaphore)
I. 멀티 프로세스 환경의 리소스풀, 계수형 세마포어의 개념
- 0과 1의 값을 가지는 이진형 세마포어와 달리, 풀에 있는 자원의 수와 같은 값으로 초기화 되는 세마포어 동기화 기법
II. 계수형 세마포어의 동작 매커니즘 및 사례
가. 계수형 세마포어 동작 매커니즘
구분 | 세부 내용 |
---|---|
동작 개념도 | |
매커 니즘 | ① 세마포어는 Pool 자원 수와 같은 값으로 초기화 ② P 호출이 발생할 때 마다 세마포어 1씩 감소, Pool 자원이 추가 할당되어 스레드에서 사용 표시 ③ V 호출은 세마포어 1씩 증가시켜 스레드가 자원을 Pool로 반납, 자원을 다른 스레드에 할당 가능 표시 ④ 세마포어가 0까지 줄어들었을 때 스레드가 P 호출 시 스레드는 V 통해 자원을 Pool로 반납 시까지 대기 |
- 세마포어는 초기 busy-waiting 방식으로 구현되었으나 최근 sleep queue 방식 사용
나. 계수형 세마포어 구성요소
구분 | 구성요소 | 세부 내용 |
---|---|---|
계수 범위 | 음수 | 세마포어에 정확한 -N개의 스레드 큐가 존재 |
0 | 대기중인 스레드가 없으며, wait 연산은 호출 스레드를 큐에 추가 | |
양수 | 대기중인 스레드가 없으며, wait 연산은 호출 스레드를 큐에 추가 안함 | |
연산자 | ||
Wait | 세마포어 카운터 감소, 결과로 음수가 되고 호출 스레드는 큐에 삽입 | |
Signal | 세마포어 카운터 증가, 결과로 양수가 되고 대기 중 스레드는 큐에서 제거 |
III. 병행 프로세스 동기화 기법 간 비교
구분 | 이진형세마포어 | 계수형세마포어 | 뮤텍스 |
---|---|---|---|
Internal States | 2 | N | 2 |
User from ISRs | Yes | Yes | No |
Ownership | No | No | Yes |
Priority Inheritance | No | No | Yes |
Initialization | 없을 수도 있음 | Counter >= 0 | 항상 가지지 않음 |
Queue 구성 | FIFO or 우선순위 | FIFO or 우선순위 | 우선순위 |