인프런 운영체제 후기.

이호용·2021년 7월 18일
0

Philosophers

목록 보기
5/5

동시성 제어문제,

인프런강의를 들엇다.

교착 상태(膠着狀態, 영어: deadlock)란 두 개 이상의 작업이 서로 상대방의 작업이 끝나기 만을 기다리고 있기 때문에 결과적으로 아무것도 완료되지 못하는 상태를 가리킨다.

데드락 : 프로세스가 자원을 얻지 못해 다음 처리를 하지 못하는 상태로, ‘교착 상태’라고도 하며 시스템적으로 한정된 자원을 여러 곳에서 사용하려고 할 때 발생합니다.

교착상태 4가지 필요 조건

1971년에 E. G. 코프만 교수는 교착상태가 일어나려면 다음과 같은 네 가지 필요 조건을 충족시켜야 함을 보였다.

  1. 상호배타(Mutual Exclusion)
    예) 젓가락은 한번에 한 철학자만 사용할 수 있다.

  2. 점유대기(Hold and Wait)
    예) 집어든 젓가락은 계속 들은 채로 사용중인 반대쪽 젓가락을 기다린다.

  3. 비선점(No Preemption)
    예) 이미 누군가 집어든 젓가락을 강제로 뺏을 수 없다.

  4. 순환대기(Circular Wait)
    예) 모든 철학자들이 자신의 오른쪽에 앉은 철학자가 젓가락을 놓기를 기다린다.

출처: https://simsimjae.tistory.com/72 [104%]

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

  1. mutex를통해 상호베제 해결 - 데드락 문제, 기아상태 여전히 발생함. (한 젓가락씩 들고 있으면 터짐)

아무래도 상호베제만 해결한다고 데드락이 완전 해결되는게 아니라, 상호베제를 활용해서 다른 솔루션도 처리해줘야 할거 같다.

교착상태를 없애는 쉬운방법 3가지(교착상태도 없애고 기아상태도 줄이는방법.)

    1. 젓가락이 철학자보다 많으면 해결됨.
    1. 두개의 젓가락을 들수 있을떄만 들게 한다.
    1. 철학자 넘버가 홀수 일때는 왼쪽을 들고 오른쪽을 들어 먹게하고 짝수일때는 오른쪽을 먼저 들고 왼쪽을 들게 하면 해결된다.

위의 해결법으로 젓가락을 하나씩 드는 상태는 해결되지만, 철학자가 시간안에 밥을 못먹어 죽는 경우는 해결되지 못한다.

데드락 문제의 해결책이 아니라
우리가 해야할일은 동기화 도구를 통해서 데드락을 해결하는 방법을 공부해야한다.
뮤텍스의 개념만 가지고 위의 철학자 문제를 해결하기는 쉽지 않다.

이번 시간에는 monitor의 개념을 통해 문제를 해결해보자.

  • 젓가락이 두개일 떄만 젓가락을 들수있도록 제어한다.

아래는 해당 문제의 풀이법.
양쪽 젓가락이 비어있는지 확인을 할려면 오른쪽 왼쪽의 철학자들이 어떤 상태인지 확인하고 들게 만들면 된다. (오른쪽 왼쪽 not eating일떄)

모니터를 구현하려면 condition variable을 사용해야한다. (정확히 모르겠다.)
( 철학자가 배고플떄 딜레이 하는 도구로 사용하고, 밥을 먹고나면 시그널은 주는 용도)

0개의 댓글