계수형 세마포어 (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 States2N2
User from ISRsYesYesNo
OwnershipNoNoYes
Priority InheritanceNoNoYes
Initialization없을 수도 있음Counter >= 0항상 가지지 않음
Queue
구성
FIFO or 우선순위FIFO or 우선순위우선순위

 

콘텐츠 사용 시 출처 표기 부탁 드리고, 댓글은 큰 힘이 됩니다^^