[OS] Process Synchronization and Mutual Exclusion
Contents
Process Synchronization and Mutual Exclusion 에 대한 개념 정리 (semaphore)
Process Synchronization and Mutual Exclusion
- 여러 개의 프로세스들이 존재할 때, 공유자원 또는 데이터가 있을 때 문제가 발생할 수 있다.
- 이런 경우를 대비하기 위해 동기화를 한다.
- 동기화: 프로세스들이 서로 동작을 맞추는 것, 정보를 공유해서 문제가 발행하지 않도록 하는 것
- Mutual exclusion
- 둘 이상의 프로세스가 동시에 critical section에 진입하는 것을 막는 것
- critical section: 공유 데이터를 접근하는 코드 영역
- 둘 이상의 프로세스가 동시에 critical section에 진입하는 것을 막는 것
Requirements for ME
- Mutual exlcusion
- critical section에 프로세스가 있으면, 다른 프로세스의 진입을 금지
- Progress
- critical section 안에 있는 프로세스 외에는 다른 프로세스가 critical section에 진입하는 것을 방해하면 안됨
- Bounded waiting
- 프로세스의 critical section 진입은 유한시간 내에 허용되어야 함
Mutual Exclusino Solutions에 대한 solution들이 많다. 그중에서 os supported SW solution중 하나인 semaphore에 대해 알아보자.
Semaphore
- $S$: 음이 아닌 정수형 변수
- 초기화 연산 $P(),V()$로만 접근 가능
- 종류
- binary semaphore: 상호배제나 프로세스 동기화의 목적
- counting semaphore: producer-consumer 문제 등을 해결하기 위해 사용
여기서는 상호배제의 경우만 알아보자.
- $P(S)$ 연산
- if $S( > 0)$
- then $S \leftarrow S - 1$
- else wait on the queue $Q_s$
- $V(S)$ 연산
- if any waiting processes on $Q_s$
- then wakeup one of them
- else $S \leftarrow S + 1$

- $P_i$가 먼저 들어와서 $P(\text{active})$ 후 critical section에 들어간다.
- 다음에 $P_j$가 들어왔는데 active가 0이라서 ready queue로 들어가서 대기한다.
- $P_i$가 끝나면 $V(\text{active})$ 연산을 진행해서 queue에 있는 $P_j$를 wake up 하고 active=1이 된다.
- $P_j$는 $P(\text{active})$연산을 진행하고 critival section에 들어간다.
위와 같은 과정을 통해 프로세스가 충돌하지 않도록, mutual exclusion 하도록 만드는 것이다.