프로그래밍[Univ]/운영체제

[OS] Solve Problem Using Semaphore

Cloud Travel 2012. 5. 18. 00:56

* 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는 한개이다.)

 ⓓ