Post

운영체제 정리 - Synchronization Examples

운영체제 정리 - Synchronization Examples

Classic Problems of Synchronization

Bounded-Buffer Problem

- 3장의 Process 부분에서 잠깐 나왔던 생산자-소비자 문제와 같은 것이다.

Process 정리 보기

세마포어 변수

Bounded-Buffer Problem에 필요한 변수

  • 공통적인 Critical Section에 진입을 담당하는 세마포어 mutex
  • 생산자가 남은 공간일 때만 진입할 수 있게 하는 세마포어 full
  • 소비자가 소비할 것이 있을때만 진입할 수 있게 하는 세마포어 empty

생산자 코드

생산자 코드

소비자 코드

소비자 코드



Readers and Writers Problem

- 글을 읽고 쓰는 과정에서 reader와 writer의 Critical Section 문제

필요한 세마포어

  • writer가 진입할 수 있게 하는 세마포어인 rw_mutex
  • 글을 읽을 reader의 수를 세는 counting semaphore인 read_count
  • read_count의 증감을 관리하는 세마포어인 mutex

writer 코드

writer 코드

reader 코드

reader 코드

  • writer는 writer와reader 둘 다 상호배제 되어야 하고** reader**는 같은 reader끼리는 같이 진입을 해도 된다.
  • writer가 글 작성을 완료해야만 reader가 진입이 가능하다.
  • 모든 reader가 글을 읽어야 writer가 글을 쓸 수 있다.
  • 이 때 글 작성은 첫번째 reader만 확인하면되고, 모든 글을 읽었는지는 남은 reader를 확인하면 되니, 이를 나타내기위해 read_count를 사용한 것

    Dining-Philosophers Problem

    철학자 문제 - 철학자 5명이 원탁에 둘러 앉아 저녁을 먹는상황, 두 젓가락이 모두 있어야 밥을 먹을 수 있고 젓가락은 각자 1개씩 양 옆에 있음

semaphore를 이용한 방법

semaphore를 이용한 방법

- 해결이 된 것처럼 보이지만 만약 모든 철학자들이 동시에 오른쪽/왼쪽 젓가락을 집는다면 deadLock(무한대기)에 빠지게 됨

해결방법

  1. 동시에 젓가락 한짝을 잡을 수 있을 때만 잡을 수 있도록 한다.
  2. 최대 4명만 같은방향의 젓가락을 집을 수 있도록 한다.

이외에도 홀수/짝수 번째 사람만 먼저 잡도록 하기 등등..

- 아래에서는 THIKING, EATING 이외에 HUNGRY 상태를 추가하여 두 젓가락 모두 잡을 수 있을 때만 잡도록 하였다. => 두 젓가락을 집는 것을 하나의 원자적인 행동으로 보장

Monitor 활용 코드

1번 방법을 Monitor를 활용하여 구현한 코드

- 데드락은 발생하지 않지만, 좌우 철학자가 번갈아가며 먹으면 starvation은 발생할 수 있다


This post is licensed under CC BY 4.0 by the author.