운영체제(10) - 전통적 동기화 예제(생산자-소비자 문제)

less than 1 minute read

전통적 동기화

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)가 일어날 수 있다.

Tags:

Categories:

Updated:

Leave a comment