Computing/Operating System

11 > 동기화(3)

i독 2021. 11. 15. 02:18

* 해당 게시물은 경북대학교 컴퓨터학부 강의초빙교수, 배준현 교수님의 강의를 보고 작성되었음을 미리 알려드립니다. ( 개인적인 공부를 정리한 글입니다. )

 

> 주니온 TV Youtube Channel.  https://www.youtube.com/channel/UCOcPzXDWSrnaKXse9XOPiog

 

주니온TV 아무거나연구소

TMI Lab. 아무거나 연구소의 유튜브 TMI 지식나눔 채널 컴퓨팅 사고력을 키워 주고 코딩 지능을 길러 주는 자세히 보면 유익한 코딩 채널 주니온TV@Youtube 주니온 박사: 현) 경북대학교 컴퓨터학부 초

www.youtube.com

 

> 주니온 TV Inflearn page.  https://www.inflearn.com/users/@joonion

 

주니온님의 소개 - 인프런 | 온라인 강의 플랫폼

인프런 지식공유자 주니온님의 소개 페이지 입니다. - 지식공유자 소개 | 인프런...

www.inflearn.com


 

>> Classic Problems of Synchronization

[  ] The Bounded-Buffer Problem.

n 개의 buffers 있고, 각각 item 보유할 있다.

Producer 소비자를 위한 buffer 가득 채우는 것이 목적이고, >> create fully buffer.

Consumer  공급자가 제공하는 Buffer 빨리 소비하는 것이 목적이다. >> create empty buffer.

 

- Shared data structures

  A binary semaphore mutex. > mutual exclusion 제공.

  Two counting semaphores empty and full. > 서로 상반되는 값으로 n으로 감소하거나, 0에서 n까지 증가한다.

 

empty, mutex variable wait(), signal() 하기에 Code 실수가 발생할 있다.

 

[  ] The Readers-Writers Problem.

Process 별로 역할에 따라 only read or only write or RW 한다.

Process only read Reader, only write Writer 정의한다.

동시에 이상의 Reader Shared memory 접근하더라도 Data integrity 훼손되지 않는다.

 

[  ] Some Variations of the Readers-Writers Problem

우선 순위에 관련된 변형.

- The first reader-writers problem. > Writer Reader 둘에게 평등한 기회를 제공한다.

기본 : 단순히 Writer wait 상태라 해서 Reader들이 기다려서는 안된다.

문제 : 만약 Wait 상태의 Reader 대다수고, 하나의 Writer 대기하고 있다면 해당 Writer Starvation 발생한다.

 

- The second reader-writers problem. = 입출금 시스템 처럼 중요한 Write 먼저 처리하고 Reader 열어준다.

기본 : Writer wait 상태라면 새로운 Reader 접근할 없다.

문제 : 만약 Wait 상태의 Writer 대다수라면, Reader Starvation 발생한다.

 

[  ] The Reader-Writer Locks.

reader-writer lock 획득할 때는 read or write mode 지정해준다.

여러 개의 프로세스가 read mode reader-writer lock 획득하면 여러 개가 진입할 있고,

write mode 획득하면 오직 하나의 process 진입 가능하다.

 

[] The Dining-Philosophers Problem.

Consider five philosophers who spend their lives thinking and eating.

Sharing five single chopsticks.

Sometimes, a philosopher gets hungry and tries to pick up two chopsticks that are closest to her.

When a hungry philosopher has both her chopsticks at the same time, she eats without releasing the chopsticks.

 Figure 7.5 The situation of the dining philosophers.

 

- Semaphore Solution.

젓가락에 Semaphore 부여해서 상호배제 문제는 해결할 있다. 그러나 Deadlock 쉽게 발생한다.

 

- Possible remedies to the deadlock problem.

[Youtube 추가 영상]

식사하는 철학자 문제 | 교착상태 | 운영체제

가장 쉬운 방법은 철학자들의 수를 빼는 것이다. 젓가락은 항상 하나가 남는 상황이 발생하기에 교착 상태가 일어나지 않는다.

 

두번째 방법은 양쪽에 젓가락이 놓여졌을 때만 젓가락을 획득할 있게 한다. 이상을 집을 있을 때만 집고, 그렇지 못한다면 아예 하나도 집지 않게 설계한다. (임계 영역 내에서 수행한다.)

 

비대칭적인 해결법이 있는데, 이는 홀수 번호를 부여받은 철학자들은 왼쪽을 집고, 오른쪽을 집는다. 짝수 번호를 부여 받은 철학자들은 오른쪽을 집고, 왼쪽을 집는다. 같은 방향의 젓가락들을 동시에 요구하는 상황을 배제한다.

 

그러나 방법은 Starvation 까지는 해결하지 못한다.

 

기아 상태 > 교착 상태를 예방하기 위해 무한히 기다린다. 자원을 사용할 있음에도 불구하고 자원을 계속 양보하다 자원이 할당되는 일을 무한히 연기하게 된다.

 

[  ] Monitor Solution.

2번째 방법으로, 양쪽에 젓가락만이 available 때만 젓가락을 집을 있게끔 Monitor 설정한다.

방법은 상태를 하나 추가하는데, 기존 Thinking, Eating에서 Hungry 상태를 추가한다.

철학 , 사람이 먹고 있는 상태가 아닐 때만 먹을 있는 조건을 추가한다.

Condition variable 구성하는데, 만약 철학자가 Hungry 상태 , 자기 자신을 delay(wait)한다.

Monitor operation pickup() - 젓가락을 집는 행위, putdown() - 젓가락을 놓는 행위 제공한다.

pickup 성공 eating 상태가 되고, 성공하지 못한다면 기다린다. 먹고 뒤에는 반드시 putdown() 호출한다.

이러한 구성도 결국엔 Starvation 야기시킨다.

 

말이 어려운데, 결국에는 공유 자원에 대한 문제에 대한 발생 문제 어떻게 해결할 것인가에 대한 논리만을 이해하고 넘어가도 좋다. 공유 데이터를 동시에 제어하면 데이터 불위치가 생기는데, 이를 막기 위해 프로세스간의 순서적인 실행방법이 필요하다.

생산자 소비자 문제는 buffer 관리에 중점을 둔다.

'Computing > Operating System' 카테고리의 다른 글

13 > Main Memory  (0) 2021.11.15
12 > 동기화(4)  (0) 2021.11.15
10 > 동기화(2)  (0) 2021.11.15
09 > 동기화(1)  (0) 2021.11.15
08 > CPU scheduling  (0) 2021.11.15