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