1) 임계구역 문제(Critical Section Problem)
* 독립 프로세스(independent process) & 협력 프로세스(cooperating process)
: 다른 프로세스와 아무런 연관을 갖지 않는다면 독립 프로세스.
: 다른 프로세스에 영향을 미치거나 영향을 받게 되면 협력 프로세스.
(이메일 주고 받기, 데이타 베이스, 온라인 게임, 주식거래 등)
* 프로세스 동기화(Process Synchronization)
: 상호 협력하는 다수의 프로세스들이 공유 자원(혹은 데아타)을 사용할 경우, 경쟁 조건(Race Condition)으로 인해 그 공유 자원을 신뢰할 수 없게 된다. 따라서 이를 방지하기 위해 프로세스들이 공유 자원을 사용할 때 일련의 규칙을 지키도록 하는 것을 프로레스 동기화라고 한다.
* 경쟁 조건(Race Condition)
: 여러 프로세스가 공유 데이터를 동시에(병행적으로) 접근(읽기나 쓰기)할 때 공유 데이터에 대한 접근 순서에 따라 실행 결과가 달라지는 상황.
* 임계 구역(Critical Section)
: 둘 이상의 프로세스(혹은 쓰레드)가 공유하는 자원(데이타 구조, 장치)이지만 동시에 둘 이상의 프로세스가 접근할 수는 없고 특정 시간에 오직 하나의 프로세스만 접근 가능한 코드 영역.
* 은행 계좌 문제
: 부모(parent)는 은행 계좌(bank account)에 입금을한다.
: 자녀(child)는 은행 계좌(bank account)에서 출금은 한다.
: 은행 계좌(bank account)는 입금과 출금 동기화가 올바로 이루어 져야 은행 시스템이 신뢰로울 수 있다.
: 입금 프로세스가 처리되고 있는 중간에 문맥 교환(Context Switching)이 발생하여 출금 프로세스가 처리되면 안된다.
: 임계 구역 = 은행 계좌 => 변수 balance
* 생산자-소비자 문제(Producer-Consumer Problem)
= 유한 버퍼 문제(Bounded-Buffer Problem)
: 생산자(Producer)는 아이템을 생산하여 버퍼(Buffer)에 넣는다.
: 소비자(Consumer)는 버퍼(Buffer)에 있는 아이템을 꺼내서 소비한다.
: 버퍼가 가득차면 생산자는 아이템을 넣을 수 없고, 버퍼가 비어 있으면 생산자는 아이템을 소비할 수 없는 문제가 발생한다.
: 임계 구역 = 버퍼(Buffer)
* 독자-저자 문제
: 저자(Writer)는 공유 데이타 베이스(Shared Database)에 글을 추가한다.
: 독자(Reader)는 공유 데이타 베이스에서 글을 읽는다.
: 공유데이타 베이스에 다수의 독자가 글을 읽고 있다면 또 다른 독자는 글을 읽기 위해 진입할 수 있지만 저자는 글을 추가(업데이트)하기 위해 진입할 수 없다.
: 공유데이타 베이스에 어떤 저자가 글을 작성하여 추가(업데이트)하고 있다면 독자들은 글을 읽기 위해 진입할 수 없으며 또 다른 저자 역시 글을 추가(업데이트)하기 위해 진입할 수 없다.
: 임계 구역 = 데이타 베이스(DB) => 공유 데이타(Shared Data)
* 식사하는 철학자 문제
: 철학자들은 식사를 하기 위해서는 양쪽 손에 포크를 모두 집어야 한다.
: 어떤 철학자가 포크를 잡고 식사 중이라면 어떤 철학자들은 식사를 할 수 없다.
: 임계 구역 = 포크(Forks)
* 임계 구역 문제의 해결방안
: 상호배제(Mutual exclusion)
- 공통 변수에 대해 상호 배타적이어야 한다.
- 오직 한 프로세스(혹은 쓰레드)만 임계 구역에 진입한다.
- 임계 구역이 비어있을 때만 진입할 수 있다.
: 진행(Progress) - 다음에 진입할 프로세스는 유한 시간 내에 결정한다.
: 유한대기(Bounded Waiting) - 어떤 프로세스라도 유한시간내에 진입할 수 있다.
즉, 기다리면 언젠가 진입하게 된다.
댓글 없음:
댓글 쓰기