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의 문제점
- 코딩하기 힘들다
- 정확성의 입증이 어렵다
- 자발접 협력이 필요하다
반응형
'CS(Computer Science) > 운영체제' 카테고리의 다른 글
[운영체제] 교착상태(deadlock) (0) | 2023.02.18 |
---|---|
[운영체제] Concurrency Control 병행 제어 (0) | 2023.02.15 |
[운영체제] Semaphores (0) | 2023.02.08 |
[운영체제] 프로세스 동기화 문제 & 해결방법 (0) | 2023.02.07 |
[운영체제] 프로세스 동기화 & Race Condition (0) | 2023.01.31 |
댓글