[OS] Lecture 6. Process Synchronization and Mutual Exclusion 5_7 - kibitzing/EnGrow GitHub Wiki
유튜브링크
진구
세마포어는 여러곳에서 유용하게 사용되고 있음.
- producer - consumer
- reader - writer 등등 큐를 도입해서 스피닝을 멈췄음 (이게 얼마나 유용한 건지 알고 싶다.ㅋㅋ)
30분 넘어가면 듣기가 부담스럽다 ㅋ
세영
Semaphore
- Busy waiting 문제 해결
unsigned int S,P(),V()로만 접근 가능한 변수S를 사용- S는 현재 실행할 수 있는 프로세스의 수
S하나에 Ready Queue 하나가 할당
void P(unsigned int S) { // One Instruction Cycle
if (S > 0) {
S = S - 1;
} else {
queue[S].push(process)
}
}
void V(unsigned int S) { // One Instruction Cycle
if (!queue[S].isEmpty) {
process = queue[S].pop()
} else {
S = S + 1;
}
}
- 단점:
- Queue에서 누가 깨어날지 모르기 때문에 Starvation 문제 발생 가능
Binary Semaphore
S = 0 or 1- 상호배제, 프로세스 동기화의 목적
Counting Semaphore
S >= 0- Producer-Consumer 문제 등의 해결