티스토리 뷰

동기화에서의 전통적 문제.
(1) Bounded Buffer Problem
(2) Readers and Writers Problem
(3) Dining Philosophers Problem


(1) Bounded Buffer Problem
Producer-Consumer Process로 Producer는 버퍼에 데이터를 넣고 Consumer는 읽어온다. 동기화를 사용하지 않을 경우 한번씩 실행되는 것을 보장할 수 없으므로 버퍼가 넘칠 수 있다. 동기화 메커니즘을 이용해 해결 가능하다.

semaphore mutex : 값 1
semaphore full : 값 0
semaphore empty : 값 N

-Producer Process
do{
// produce
wait(empty);
wait(mutex);
 
// item 버퍼에 넣음

signal(mutex);
signal(full); 
}while(TRUE);

-Consumer Process
do{
wait(full);
wait(mutex);

// 버퍼에서 item 가져옴

signal(mutex);
signal(empty);

// item 사용 
}while(TRUE); 

(2) Readers-Writers Problem
Readers : data set을 읽기만 하고 업데이트 하지 않음
Writers : 읽고 쓰고 다함
문제점-->여러 Reader들이 동시에 읽고 1 Writer만 공유 데이터 접근하도록!

Semaphore mutex-1
Semaphore wrt-1

-Writer Process
do{
wait(wrt);

// 읽고 쓴다

siganl(wrt); 
}while(TRUE); 

-Readers Process
do{
wait(mutex);
readcount++;
if(readcount==1)
wait(wrt);
signal(mutex);

// 읽는다

wait(mutex);
readcount--;
if(readcount==0)
signal(wrt);
signal(mutex); 
}while(TRUE);

(3) Dining Philosophers 문제 


<Priority Inversion>
우선순위는 해당 프로세스의 importance나 urgency를 나타내는데 Priority Inversion은 그러한 principle of priority based scheduling을 위반하는 것으로 낮은 우선순위의 태스크가 높은 우선순위의 태스크 실행을 block하는 것을 말한다. 일반적으로 그리 중요하지 않을 수 있지만 어떠한 경우에 있어서 큰 문제를 가져올 수 있다.

해결책  -> Priority Inheritance : 공유 자원을 가지고 있는 낮은 우선순위의 태스크의 우선순위를 공유 자원을 요청하는 높은 순위의 태스크만큼 높인다. 

'Computer Science' 카테고리의 다른 글

PL Ch 3. 정리  (0) 2011.05.16
[Algorithms] KMP 알고리즘  (0) 2011.04.30
운영체제 동기화 부분(1)  (2) 2011.03.31
[자료구조] AVL 트리  (0) 2011.03.30
운영체제 10장 File System Mounting  (2) 2011.03.25
댓글