운영체제 - 7강

컴공거북이·2024년 5월 19일

운영체제

목록 보기
7/9

<7강>

<고전적인 동기화문제>

1)bounded - buffer 문제(producer와 consumer 문제)
2)readers and writers 문제
3)식사하는 철학자들 문제

<producer와 consumer 문제>

semaphore mutex(1로 초기화, 0과 1가능) - 이진 세마포어
semaphore full(0으로 초기화)(n개 버퍼인 경우 n까지 가능) - counting semaphore(무제한)
semaphore empty(1로 초기화)(n개 버퍼인 경우 n까지 가능) - counting semaphore

full- 몇 개의 공간이 차있냐
empty - 몇 개의 공간이 비어있냐

wait(mutex)와 wait(full,empty) 순서가 바뀌면 consumer도 멈추고 produmer도 멈추는 deadlock 발생함

<readers와 writers 문제>

reader:데이터 읽기만 가능(데이터 수정없음)
writer:데이터 읽기와 쓰기 가능
즉, writer는 한 명만 reader는 여러명 접근 가능

즉, reader들이 데이터를 읽는 동안에 writer가 접근하지 못 하도록, writer가 데이터를 수정하는 동안 reader이 접근하지 못 하도록 해주는 동기화 기법

공유되는 데이터
1)데이터
2)semaphore rw_mutex(1로 초기화)(writer가 데이터를 수정하는 것을 제한하는 세마포어)
3)semaphore mutex(1으로 초기화)(reader의 처음과 끝을 알려주는 세마포어)
4)정수 read_count(0으로 초기화) (reader의 수)

<readers 와 writers 문제 변형>

변형1)writer가 쓰기 권한을 얻기 전이라면 어떤 reader도 기다리지 않음
reader가 계속 생기면 writer는 계속 기다려야 하는 starvation 문제 발생
변형 2) writer가 준비가 되면 가능한 빨리 쓰기 작업 수행
writer가 계속 생기면 reader는 계속 기다려야 하는 starvation 문제 발생
두 가지 모두 starvation 일으킬 수 있음

<식사하는 철학자 문제>

다섯 명의 철학자가 원탁에 앉아 있고, 각자의 앞에는 스파게티가 있고 양옆에 포크가 하나씩 있다. 그리고 각각의 철학자는 다른 철학자에게 말을 할 수 없다. 이때 철학자가 스파게티를 먹기 위해서는 양 옆의 포크를 동시에 들어야 한다. 이때 각각의 철학자가 왼쪽의 포크를 들고 그 다음 오른쪽의 포크를 들어서 스파게티를 먹는 알고리즘을 가지고 있으면, 다섯 철학자는 동시에 왼쪽의 포크를 들 수 있으나 오른쪽의 포크는 이미 가져가진 상태이기 때문에 다섯 명 모두가 무한정 서로를 기다리는 교착 상태(deadlock)에 빠지게 될 수 있다.

해결방안:

1) 식사를 하는 철학자의 수를 제한하자(5명 이하)
2) 왼쪽과 오른쪽을 다 집어야지 식사를 할 수 있게 만들어줌
(누군가는 한 쪽 젓가락을 오래 기다리는 starvation 일어날 수 있음)

profile
잘못된 정보가 있을 경우 언제든 댓글로 남겨주세요 :) 감사합니다!!

0개의 댓글