* Sharing Resource 문제는 Semaphore로 해결할 수 있고 다음과 같은 과정을 따른다.
ⓐ 문제 인식
ⓑ 각 문제에 대해 해결할 semaphore와 공유되는 resource에 대한 semaphore 만들기.
ⓒ Semaphore의 초기 값을 설정 : 초기값은 접근 가능한 resource or process의 개수로
semaphore가 보호하는 값의 개수이다.
ⓓ 각 문제에 대한 해결을 Source에 적용한다.
* BBP ( Bounded Buffer Problem )
ⓐ 문제 인식
- Producer cannot write when full, but wait until not full.
- Consumer cannot read when empty, but wait until not empty.
- Producer and Consumer cannot write/read simultaneously.
ⓑ 각 문제에 대해 해결할 Semaphore와 공유되는 Resource에 대한 Semaphore를 만든다.
- S(empty) = 공유되는 저장소가 얼마나 비었는지 판단하는 Semaphore
- S(full) = 쓰여진 저장소의 양이 얼마나 있는지를 나타내는 Semaphore
- S(mutex) = 저장소를 읽고, 쓰는 것을 제어하는 Semaphore
(저장소에 대한 동시실행(resource 공유) 방지)
ⓒ Semaphore의 초기값을 선정
- S(empty) : 사용가능한 resource의 양 : N
- S(full) : 쓰여진 resource의 양 : 0
- S(mutex) : 저장소의 개수 : 1
ⓓ 각 문제에 대한 해결을 Source에 적용
* First Reader-Writer Problem
ⓐ
- 읽는 중에 쓰지 못한다.
- 쓰는 중에 읽지 못한다.
- 처음으로 들어온 reader는 lock을 잡는다.
- 마지막으로 나가는 reader는 lock을 해제한다.
ⓑ
S(wrt) : 읽고 있는지 없는 지를 나타내는 Semaphore(누군가 사용하고 있는지 안하는지를 판별)
S(mutex) : 자신이 처음에 들어온 reader인지 마지막 reader인지 나타내는 counter 존재
이 counter의 R/W를 제어하는 semaphore 존재.
ⓒ
S(wrt) : 1 (읽고 쓰는 매체는 하나이다.)
S(mutex) : 1 (공유하는 변수 counter는 한개이다.)
ⓓ