Classic Problems of Synchronization
Classic Problems of Synchronization에는 몇가지가 있는데.
1.The Bounded -Buffer Problem
2. The Readers - Writers Problem
이다.
1. Bounded - Buffer Problem
공유버퍼를 가지고 한쪽에서는 데이터를 입력하고 (Producer) 다른 한쪽에서는 데이터를 받아보기만 하는(Consumer) 두 프로세스의 동기화 방법이다.
Mutex로 크리티컬 섹션을 구별하기 위해 사용하고, Full,empty 변수로 입력이가능한지 혹은 데이터가 버퍼안에 들어있는지를 판단한다.
2.Reader and Writer Problem
공유데이터를 여러명이 보기만 하는 것은 상관이없으나, 쓰는도중에 보는 것은 문제가 된다. 이러한 동기화 문제를 해결하기 위해서 세마포어 변수로 wrt와 mutex를 사용하고, int readcount를 하나 더 설정한다.
readcount== 0 이라면 읽는 사람이 없는 것이므로 데이터를 수정하거나 새로 쓰는 것이 가능하지만, 누군가가 읽고 있다면, readcount!=0이라면 수정을 할 수가 없도록 wait(wrt)를 걸어 프로세스를 lock한다.
Monitor
프로그래밍 언어에서 지원. 즉, 프로그램 라이브러리 형태로 지원하는 것.
예) Concurrent Pascal, Pascal-plus, Modula-2, Modula-3 등
세마포어와 비슷한 기능을 하지만 제어하기가 용이함
모니터는 모니터 lock를 이용하여 Linked-list 전체를 lock하거나, 각 리스트 혹은 각 리스트의 원소 하나하나에 대해 lock을 걸 수 있음
condition variable을 이용하여 하나를 제외한 프로세스를 모니터 큐에 넣는다.
Monitor 특징
1. Local data 변수는 모니터 자체의 프로시저에 의해서만 접근이 가능하며, 외부 프로시저는 접근할 수 없다.
2. 임의의 프로세스는 모니터 프로시저 중 하나를 호출함으로써 모니터 내부로 진입할 수 있음
3. 어느 한 순간에 단 하나의 프로세스만이 모니터 내부에 진입할 수 있음. 즉, 모니터를 호출한 다른 프로세스들은 모니터를 접근할 수 있을 때까지 기다리면서 수행이 일지 정지됨
'O.S' 카테고리의 다른 글
Flag Register (0) | 2012.07.20 |
---|---|
Mutex (0) | 2012.05.16 |
Synchronization Hardware (0) | 2012.04.27 |
Semaphore (0) | 2012.04.27 |
파일 디스크립터(File descriptor) (0) | 2012.04.24 |