# Outline
- Background
- The Critical-Section Problem
- Peterson’s Solution
- Hardware support for synchronization
- Semaphores
- Monitors
- Liveness
- Synchronization examples
Background:
- 프로세스 간에 process synchronization이 꼭 필요하다.
[예시:Too much milk problem]
- 위와 같이 share resource에 대한 process synchronization가 없으면, race condition이 발생할수있다.
- 이를 대처하기 위해, locking mechanism을 사용
[race condition의 예시]
[locking mechanism]
- race condition이 주로발생할때(shared resource에 두개이상의 프로세스가 동시접근할때 발생):
- 멀티쓰레딩
- preemptive kernel
- 시스템콜 호출시 발생
The Critical-Section Problem:
- critical section을 사용하기 위해 여러 조건이 필요하다
- Mutual Exclusion: 어떠한 시점에서라도 critical section을 사용하는 프로세스는 1개여야한다.
- Progress: critical section이 비어있고, critical section에 들어가고자 하는 프로세스가 1개 이상 존재할때, critical section에 반드시 진입해야한다.
- Bounded Waiting: critical section에 기다린 순서대로 critical section에 들어가야한다.
Peterson’s Solution
- Peterson’s Solution은 위 세가지 critical section 특성을 지킨다.
- Mutual Exclusion:
while 문에서 i프로세스는 탈출하지만, j프로세스는 탈출하지 못한다.
따라서 critical section에는 i프로세스만 접근하고 있으므로 Mutual Exclusion을 보장해준다.
- Progress:
CS가 비어있는상태일때, j프로세스가 1번 혹은 2번 명령어를 실행하더라도 i프로세스는 CS에 접근가능하다. 즉, 비어있는 상태에는 1개의 프로세스가 접근이 가능하다.
- Bounded Waiting:
실행순서를 결정된다.
- Critical section은 흡사 Bathroom과 같다.
Hardware support for synchronization
- 컴퓨터는 atomic hardware instructions(ex: test memory word and set value , swap)을 제공하여 synchronization을 보장할 수 있게 해준다.
- 하지만 mutual exclusion과 progress만 고려한다.
1. TestAndSet:
-> TestAndSet함수는 atomic operation이다.
만약 TestAndSet함수는 atomic operation이 아니라면, mutual exclusion이 보장되지 않는다.
2. Swap:
- 위 두가지 방법은 bounded waiting을 보장하지 않는다.
Semaphores
Semaphore:
- Semaphore은 정수이다.
- wait() / p() 와 signal() / V() 함수를 사용한다.
예시:
Semephore s;
wait(s);
c.s
signal(s);
busy waiting없이 semaphore 실행하기.
- waitinglist를 활용하여 busy waiting 문제를 해결한다.
- Semaphore 값을 1로 설정해야 mutaul exclusion을 해결할수있다.
Monitors
Liveness
Synchronization examples