[운영체제] Mutex 와 Semaphore

woonchoi·2022년 2월 28일
0

42Cursus

목록 보기
6/9

Mutual exclusion (상호 배제)

  • Mutex (binary semaphore)
    • 임계 영역에 하나의 스레드만 들어갈 수 있다
  • Semaphore
    • 임계 영역에 여러 스레드가 들어갈 수 있다
    • Counter를 이용해 동시에 리소스에 접근할 수 있는 스레드 수를 제어한다

Semaphore

Semaphore는 세마포어 값 S를 이용하여 임계 영역에 접근할 수 있는 스레드의 수를 제어한다고 했다

이를 Pseudo Code로 표현하면 아래와 같다

  • P : 검사 (임계 영역 진입)
  • V : 증가 (임계 영역 탈출)
  • S : 세마포어 값
P(S) :	wait(S)
		{
        	while (S <= 0)
            ;
        	S--;
        }
V(S) :	signal(S)
		{
        	S++;
        }

이 때 while 문을 통해 wait을 구성하는 위와 같은 방법을 Busy waiting이라고 부른다

문제는, while문이 돌아가는 동안 CPU를 실행한다는 것이고, 이는 성능을 저하시키는 원인이 된다
따라서 이 부분을 Waiting Queue를 이용하여 처리한다.

이를 Pseudo Code로 표현하면 아래와 같다.

wait (S)
{
	S->count--;
    if (S->count < 0)
    {
    	add this process to S->queue;
        block() //sleep()
    }
}

signal (S)
{
	S->count++;
    if (s->count <= 1)
    {
    	remove a process P from S->queue;
        wakeup(P)
    }
}
profile
개발공부

0개의 댓글