[시스템 소프트웨어]04-4 Semaphores

yesman·2021년 12월 22일
0

시스템 소프트웨어

목록 보기
13/23

Blocked-Queue Semaphores

대기중인 프로세스를 FIFO큐에 넣고 기다린 순서대로 깨우는 것이다.

  1. P(S)
if(S > 0)
	S--;
else 이 프로세스의 실행을 대기시킨다. FIFO 큐의 tail에 넣는다.
  1. V(S)
if(이 세마포를 대기중인 프로세스가 있다)
	큐의 head에 있는 프로세스를 깨운다.
else S++;

Busy-Wait Semaphores

이전 포스트에서 언급한 세마포이다.

  1. P(S) 또는 Wait(S)
while(S <= 0);
S--;
  1. V(S) 또는 Signal(S)
S++

spinlock이라고도 하는데 lock을 기다리는 동안 context swtich가 없으며 짧은 시간동안 수행할 때는 spinlock이 유용하다. 하지만 spinlock은 CPU를 낭비해서 멀티프로세스 시스템에서는 유용하다. (lock은 공유자원으로 볼 수 있다.)

이 세마포를 해결하는 것으로 Blocked set과 위에서 언급한 Blocked-queue가 있다.

.
.
.
.
세마포를 공평성 측면에서 분류를 하면 Strongly-fair semaphore와 Weakly-fair semaphore가 있다.

  1. Strongly-fair semaphore
    blocked-queue semaphore가 Strongly-fair semaphore 중 하나이다. 공평성이 세다는 것은 만약 세마포가 무한정으로 Signal, V한다면 결국 모든 대기 프로세스가 끝날 것이라는 말이다. 또, 만약 프로세스가 무한정으로 요청을 한다면 결국 임계영역에 들어갈 것이라는 말이다.

  2. Weakly-fair semaphore
    busy-wait semaphore가 Weakly-fair semaphore 중 하나이다. 만약 세마포가 0보다 큰 값이라면 결국 모든 대기중인 프로세스가 완료될 것이다. 또, 만약 프로세스가 임계영역에 진입하려는 것을 계속 시도한다면 결국 들어가게 될 것이다.

profile
유니티

0개의 댓글