운영체제(10) - 전통적 동기화 예제(생산자-소비자 문제)
전통적 동기화
Producer-Consumer Problem
생산자가 데이터를 생산하면 소비자는 그것을 소비 ex.웹 서버 -> 웹 클라이언트, 컴파일러 -> 어셈블러
-
Bounded Buffer
– 생산된 데이터는 버퍼에 일단 저장 (속도 차이 등)
– 현실 시스템에서 버퍼 크기는 유한
– 생산자는 버퍼가 가득 차면 더 넣을 수 없다.
– 소비자는 버퍼가 비면 뺄 수 없다. -
잘못된 결과
– 실행불가
– 최종 count ≠ 0 => 공통변수에 동시 접근했기 때문에 -
Busy-wait
– 생산자: 버퍼가 가득 차면 기다려야 = 빈(empty) 공간이 있어야
– 소비자: 버퍼가 비면 기다려야 = 찬(full) 공간이 있어야 계속해서 무한루프를 돌게됨.
이러한 문제를 해결하기 위해서
Readers-Writers Problem
한 번에 한 개의 프로세스만 접근은 비효율적
효율성 제고를 위해 R->W나 W->R에 대해서는 상호배타가 일어나게 하지만 R->R는 임계구역에 동시에 접근할 수 있도록 허용한다.
Dining Philosopher Problem
5명의 철학자, 5개의 젓가락, 생각 → 식사 → 생각 → 식사 …
- 잘못된 결과
starvation 즉, 교착상태(deadlock)가 일어날 수 있다.
Leave a comment