[운영체제] Mutex 와 Semaphore
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)
}
}
Author And Source
이 문제에 관하여([운영체제] Mutex 와 Semaphore), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@woonchoi/운영체제-Mutex-와-Semaphore저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)