[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 문제 등의 해결