Computer Science/[ OS ]

[ OS ] 10. 프로세스 동기화 - 전통적인 동기화 문제

kim.svadoz 2021. 5. 31. 19:50
반응형

전통적인 동기화 문제

1. Producer-Consumer Problem

생산자-소비자 문제

image-20210513134200791

데이터를 생산하는 쪽이 생산자, 소비하는 쪽이 소비자이다.

생산자-소비자 문제란 생산자가 데이터를 생성하여 버퍼에 저장하고, 소비자가 버퍼에서 데이터를 가져와 소비하는 과정에서 발생할 수 있는 문제이다.

대표적으로 공유 자원에 대한 임계구역 문제와, busy waiting문제가 있으며 프로세스 동기화로 이 문제를 해결한다.

2. Readers - Writers Problem

독자-저자 문제

image-20210513134232478

독자(Reader)는 데이터를 읽기만하는 프로세스, 저자(Write)는 읽고 수정하는 프로세스이다. 따라서 이들의 차이점은 데이터를 수정할 수 있느냐, 없느냐이다.

독저-저자 문제란 다수의 독자와 다수의 저자가 하나의 공통 데이터베이스를 사용할 떄 발생할 수 있는 문제를 뜻하며, 이는 프로세스 동기화로 해결할 수 있다.

효율적인 프로세스를 위해서 Reader들만 서로 공통 베이스에 동시접근할 수 있도록 허용하고 Write는 그대로 상호배제를 적용한다.

3. Dining Philosopher Problem

철학자들의 저녁식사 문제

철학자 다섯이서 원형 식탁에 둘러앉아 생각에 빠지다가, 배고플 땐 밥을 먹는다. 그들의 양쪽엔 각각 젓가락 한 짝씩 놓여있고, 밥을 먹으려 할 땐 다음의 과정을 따른다.
철학자 : 프로세스
젓가락 : 자원

1. 왼쪽 젓가락부터 집어든다. 다른 철학자가 이미 왼쪽 젓가락을 쓰고 있다면 그가 내려놓을 때까지 생각하며 대기한다.

2. 왼쪽을 들었으면 오른쪽 젓가락을 든다. 들 수 없다면 1번과 마찬가지로 들 수 있을 때까지 생각하며 대기한다.

3. 두 젓가락을 모두 들었다면 일정 시간동안 식사를 한다.

4. 식사를 마쳤으면 오른쪽 젓가락을 내려놓고, 그 다음 왼쪽 젓가락을 내려놓는다.

5. 다시 생각하다가 배고프면 1번으로 돌아간다.

이 문제는 교착상태(Deadlock)의 대표적인 예제이다.

프로그램이 잘 돌아가다가 어느순간 멈춰버리는데, 이 문제가 데드락 발생의 4가지 필요 조건을 모두 만족하기 때문인다.

교착상태의 4가지 필요조건

  1. 상호배타 (Mutual Exclusion)
    • 젓가락은 한번에 한 철학자만 사용할 수 있다.
  2. 보유 및 대기 (Hold and Wait)
    • 집어든 젓가락은 계속 들은채로 사용중인 반대쪽 젓가락을 기다린다.
  3. 비선점 (No Preemption)
    • 이미 누군가 집어든 젓가락을 강제로 뺏을 수 (선점할 수) 없다.
  4. 환형대기 (Circular Wait)
    • 모든 철학자들이 자신의 오른쪽에 앉은 철학자가 젓가락을 놓기를 기다린다.

이 네 가지 조건 중 하나만 어겨도 데드락이 발생하지 않는다.

예시로, 환형대기를 해결하여 교착상태를 해결해 보자면, id가 짝수인 철학자는 왼쪽부터, id가 홀수인 철학자는 오른쪽부터 젓가락을 들게하면 교착상태가 일어나지 않는다. (이는 왼쪽 젓가락부터 집어드는 프로시저에 변화를 준 것이다.)

이 예시는, starvation 등을 고려한 것이 아니라 deadlock의 해결에 초점을 맞춘 예시임을 이해하자.

반응형