전통적인 동기화 문제
1. Producer-Consumer Problem
생산자-소비자 문제
데이터를 생산하는 쪽이 생산자, 소비하는 쪽이 소비자이다.
생산자-소비자 문제란 생산자가 데이터를 생성하여 버퍼에 저장하고, 소비자가 버퍼에서 데이터를 가져와 소비하는 과정에서 발생할 수 있는 문제이다.
대표적으로 공유 자원에 대한 임계구역 문제와, busy waiting문제가 있으며 프로세스 동기화로 이 문제를 해결한다.
2. Readers - Writers Problem
독자-저자 문제
독자(Reader)는 데이터를 읽기만하는 프로세스, 저자(Write)는 읽고 수정하는 프로세스이다. 따라서 이들의 차이점은 데이터를 수정할 수 있느냐, 없느냐이다.
독저-저자 문제란 다수의 독자와 다수의 저자가 하나의 공통 데이터베이스를 사용할 떄 발생할 수 있는 문제를 뜻하며, 이는 프로세스 동기화로 해결할 수 있다.
효율적인 프로세스를 위해서 Reader들만 서로 공통 베이스에 동시접근할 수 있도록 허용하고 Write는 그대로 상호배제를 적용한다.
3. Dining Philosopher Problem
철학자들의 저녁식사 문제
철학자 다섯이서 원형 식탁에 둘러앉아 생각에 빠지다가, 배고플 땐 밥을 먹는다. 그들의 양쪽엔 각각 젓가락 한 짝씩 놓여있고, 밥을 먹으려 할 땐 다음의 과정을 따른다.
철학자 : 프로세스
젓가락 : 자원
1. 왼쪽 젓가락부터 집어든다. 다른 철학자가 이미 왼쪽 젓가락을 쓰고 있다면 그가 내려놓을 때까지 생각하며 대기한다.
2. 왼쪽을 들었으면 오른쪽 젓가락을 든다. 들 수 없다면 1번과 마찬가지로 들 수 있을 때까지 생각하며 대기한다.
3. 두 젓가락을 모두 들었다면 일정 시간동안 식사를 한다.
4. 식사를 마쳤으면 오른쪽 젓가락을 내려놓고, 그 다음 왼쪽 젓가락을 내려놓는다.
5. 다시 생각하다가 배고프면 1번으로 돌아간다.
이 문제는 교착상태(Deadlock)
의 대표적인 예제이다.
프로그램이 잘 돌아가다가 어느순간 멈춰버리는데, 이 문제가 데드락 발생의 4가지 필요 조건을 모두 만족하기 때문인다.
교착상태의 4가지 필요조건
- 상호배타 (Mutual Exclusion)
- 젓가락은 한번에 한 철학자만 사용할 수 있다.
- 보유 및 대기 (Hold and Wait)
- 집어든 젓가락은 계속 들은채로 사용중인 반대쪽 젓가락을 기다린다.
- 비선점 (No Preemption)
- 이미 누군가 집어든 젓가락을 강제로 뺏을 수 (선점할 수) 없다.
- 환형대기 (Circular Wait)
- 모든 철학자들이 자신의 오른쪽에 앉은 철학자가 젓가락을 놓기를 기다린다.
이 네 가지 조건 중 하나만 어겨도 데드락이 발생하지 않는다.
예시로, 환형대기를 해결하여 교착상태를 해결해 보자면, id가 짝수인 철학자는 왼쪽부터, id가 홀수인 철학자는 오른쪽부터 젓가락을 들게하면 교착상태가 일어나지 않는다. (이는 왼쪽 젓가락부터 집어드는 프로시저에 변화를 준 것이다.)
이 예시는, starvation 등을 고려한 것이 아니라 deadlock
의 해결에 초점을 맞춘 예시임을 이해하자.
'Computer Science > [ OS ]' 카테고리의 다른 글
[ OS ] 12. 메모리 관리 전략 - Dynamic Loading(동적 로딩) (0) | 2021.06.01 |
---|---|
[ OS ] 11. 프로세스 동기화 - 데드락(Deadlock)과 해결방법 (0) | 2021.05.31 |
[ OS ] 09. 프로세스 동기화 - 우선순위 역전(Priority Inversion)과 상속(Inheritance) (0) | 2021.05.30 |
[ OS ] 08. 프로세스 동기화 - 모니터(Monitor) (0) | 2021.05.30 |
[ OS ] 07. 프로세스 동기화 - 임계영역문제의 해결책 ? Mutex, Semaphore ! (0) | 2021.05.30 |