본문 바로가기
CS(Computer Science)/운영체제

[운영체제] 프로세스 동기화의 고전적인 문제

by whdgus928 2023. 2. 8.

1. Bounded-buffer Problem

shared data: buffer 자체 및 buffer 조작 변수

semaphore full=0, empty=m, mutex=1

#producer
do{
produce an item in x

p(empty)
p(mutex)
add x to buffer
v(mutex)
v(full)

}while(1)

2. Readers Writers Problem

한 process가 DB에 write 중일 때 다른 process가 접근하면 안됨

read는 동시에 여럿이 해도 됨

 

해결방법

writer는 대기 중인 Reader가 하나도 없을 때 DB접근이 허용된다

일단 Writer가 DB에 접근 중이면 Reader들은 접근이 금지된다

Writer가 DB에서 빠져나가야만 Reader의 접근이 허용된다

readcount 현재 db에 접근중인 reader의 수

 

3. 식사하는 철학자 문제

왼쪽과 오른쪽에 있는 젓가락을 잡아야 밥을 먹을 수 있다. 다 먹으면 젓가락을 내려놓는다 여기서 모든 철학자들이 배고파서 왼쪽 젓가락을 잡으면 아무도 밥을 먹을 수 없는 문제가 발생한다

Deadlock 가능성이 있다

 

해결방안

1. 4명의 철학자만이 테이블에 동시에 앉을 수 있게한다

2. 젓가락을 두 개 모두 집을 수 있을 때에만 젓가락을 집을 수 있게한다

3. 비대칭: 짝수는 왼쪽, 홀수는 오른쪽 젓가락부터 집게 한다

 

Semaphore의 문제점

-  코딩하기 힘들다

-  정확성의 입증이 어렵다

- 자발접 협력이 필요하다

 

반응형

댓글