[OS] Process 동기화(2)
전통적 동기화 예제
Producer-Consumer Problem
- 생산자가 데이터를 생산 -> 소비자가 그 데이터를 소비하는 형태
- 예시: 컴파일러->어셈블러, 웹 서버->웹 클라이언트
- 생산한 데이터는 중간의 buffer라는 저장공간에 저장해두고 소비자는 여기서 필요한 만큼 가져감
- 동기화 문제: 생산자와 소비자가 동시에 접근하는 변수를 동시에 업데이트, 즉 임계구역에 동시에 접근
Readers-Writers Problem
- 임계구역에 접근하는 프로세스의 종류를 reader와 writer로 나눈다.
- reader는 임계구역에서 데이터를 바꾸지 않고 읽기만 하는 프로세스, writer는 임계구역에서 데이터를 바꾸는 프로세스를 말한다.
- 여기서 writer는 mutal exclusion을 보장하고, reader는 여러개가 동시에 데이터에 접근하는 것을 허용한다.
- The first Reader Writer problem (readers-preference): reader 프로세스에 우선권을 줌. reader 프로세스가 데이터를 읽는 동안 writer 프로세스가 오면 기다리게 되고, reader 프로세스가 오면 writer 프로세스가 기다리는 것을 무시하고 데이터에 접근하여 읽음
- The second Reader Writer problem (writers-preference): writer 프로세스에 우선권을 줌. 위와 같은 상황이라고 가정하자. writer 프로세스가 기다리는데 다른 reader 프로세스가 오면 writer 프로세스 다음 순서로 기다려야함.
- The third Reader Writer problem: 아무에게도 우선순위를 주지 않는다.
Dining Philosopher Problem
- 식사하는 철학자 문제
- 원형 테이블에 5명의 철학자와 5개의 젓가락이 한짝식 있는 상황에서 일어나는 문제다.
- 각 철학자는 "생각하기"와 "식사하기"를 반복한다. 단, 식사를 하기 위해서는 1쌍, 즉 2개의 젓가락이 필요하다.
- 만약 0번 철학자가 4번 젓가락을 사용하게 되면 4번 철학자는 식사를 할 수 없어 0번 철학자가 식사를 마칠때까지 기다려야한다.
- 여기서 철학자를 스레드 혹은 프로세스, 젓가락을 세마포어로 생각할 수 있다.
- 그런데 여기서 문제가 생길 수 있다. 모든 철학자가 동시에 식사를 하려고 왼쪽 젓가락을 집으면 5명의 철학자가 5개의 젓가락을 모두 집어든 상황이 된다. 그 결과, 남아있는 젓가락은 없고 모든 철학자가 반대편 젓가락을 들기 위해 기다리게 된다. 하지만 식사할 수 있는 철학자는 없으므로 아무도 젓가락을 내려놓지 않고 하염없이 기다린다.
- 이런 상황을 교착상태(Deadlock)라고 한다. 교착상태에 대해서는 다음 게시글에서 알아보도록 한다.
Reference
728x90
반응형
'CS > Operating System' 카테고리의 다른 글
[OS] Computer System Overview (0) | 2021.09.07 |
---|---|
[OS] Process 동기화 (3) Deadlock (0) | 2021.02.11 |
[OS] Process 동기화(1) (0) | 2021.01.28 |
[OS] 동기와 비동기 (0) | 2021.01.24 |
[OS] 멀티스레딩 & 메모리 공간 (0) | 2021.01.20 |