[Computer Science]/[운영체제(OS)]

[운영체제(OS)] 6-2) Mutex Lock, Semaphores

극꼼 2023. 2. 8. 20:28
반응형


이전 포스팅에 나왔던 임계구역 요구사항을 충족시키기 위해 하드웨어 명령어로 락을 걸고 푸는 등의 하드웨어 기반의 해결책도 있지만 구현 난이도가 어려워 보편적인 응용 프로그래머가 쓸 수 없는 문제가 있습니다.

따라서 임계구역 문제를 해결하기 위한 소프트웨어 도구가 개발되었고, 이번 포스팅에서는 어떤 것들이 있는지를 알아볼겁니다. 


<Mutex Lock>

: 임계구역을 보호하고, 여러 프로세스가 한꺼번에 경쟁하는 것을 방지합니다.

프로세스는 임계구역에 진입하기 전에 반드시 락을 획득해야 하고, 임계영역 사용 종료 시 락을 해제합니다. 락 사용 가능 여부는 Boolean 변수를 사용합니다. 하지만 spinlock(아래 예시 코드의 while문)이라는 busy waiting이 여전히 존재합니다.

Mutex Lock


<세마포어(Semaphores)>

: Mutex lock보다 더 정교하게 동기화할 수 있는 방법. 

정수 변수 S를 가지고, wait() (- P로 표현), signal() (- V로 표현) 연산으로만 임계구역에 접근이 가능합니다.

세마포어(Semaphores)

* wait 연산 : 각 자원을 사용하려는 프로세스가 수행(S 감소)

* signal 연산 : 프로세스가 자원을 방출할 때 수행(S 증가)

 

역시나 세마포어도 busy waiting이라는 단점이 있지만, 이 단점을 상쇄하기 위해 자신을 봉쇄합니다.

* Sleep(일시 중단) : 프로세스를 해당 세마포어와 연결된 대기큐에 위치시킴.

* Wakeup : 프로세스를 대기 상태에서 준비 상태로 변경.

 

- 세마포어 구분

1. Counting 세마포어 : 영역(domain)에 제한이 없습니다. 한정된 개수를 가진 자원에 대한 접근을 제어하는데 사용합니다.

2. 이진 세마포어 : 0, 1 사이의 값만 가능하여 뮤텍스 락과 유사하게 동작합니다. 

 

 

 

반응형