운영체제 - 15

KOCW 운영체제 15강

양희재 교수님 강의를 듣고 쓴 글입니다.


Deadlock

교착 상태. 두 개 이상의 작업이 서로 상대방의 작업이 끝나기 만을 기다리고 있기 때문에 결과적으로 아무것도 완료되지 못하는 상태.

저번 시간에는 이러한 deadlock의 발생에 필요한 조건들을 알아봤다. 물론 필요조건 4개가 전부 발생하더라도 deadlock은 발생하지 않을 수 있음을 알아야 한다.

이번에는 이러한 deadlock을 예방하거나 피할 수 있는 대처방법에 대해 알아보도록 하겠다.


Prevention

필요조건 4개가 발생하지 않도록 사전에 예방하는 방법이다.

Hold and Wait, Circular Wait정도를 해결하는 방안이 현실적이라고 강의에서는 말하고 있다.


Avoidence

회피하는 방법도 있다. 강의에서는 이 때의 deadlock에 대해

자원을 잘못 나눠줘서 발생한 현상.

이라고 한다. 아래의 예시 상황을 보면서 설명하겠다.

os15_1

이제 시뮬레이션을 시작해보겠다. 시간 순서에 따라 진행할 것이다.

  1. 현재 Process1,2,3은 각각 5,2,3개의 자원을 요구하는 중이다. 현재 남은 자원은 12개. 따라서 모두에게 자원을 분배할 수 있다.

    1. Process 1 : 5개의 자원 취득. 앞으로 Max Need까지 5개 남음.
    2. Process 2 : 2개의 자원 취득. 앞으로 Max Need까지 2개 남음.
    3. Process 3 : 3개의 자원 취득. 앞으로 Max Need까지 6개 남음.

    분배하고 남은 자원 총 2개.

  2. 현재 분배할 수 있는 남은 자원은 2개. Current Need에 따라 Process 2에게 분배가 가능.

    1. Process 1 : 5개의 자원 취득. 앞으로 Max Need까지 5개 남음.(아까와 변함없음)
    2. Process 2 : 2개의 자원 취득. 앞으로 Max Need까지 0개 남음. 프로세스 완료. 받았던 4개의 자원을 반납.
    3. Process 3 : 3개의 자원 취득. 앞으로 Max Need까지 6개 남음.(아까와 변함없음)

    분배하고 남은 자원 총 4개.(Process 2의 작업이 끝났기에 받았던 자원 4개를 반납받았기 때문이다.)

  3. 현재 분배할 수 있는 남은 자원은 4개. Current Need에 따라 Process 3에게 분배가 가능.

    1. Process 1 : 5개의 자원 취득. 앞으로 Max Need까지 5개 남음.(아까와 변함없음)
    2. Process 2 : 종료된 상태. 자원을 필요로 하지 않는다.
    3. Process 3 : 3개의 자원을 추가적으로 취득. 앞으로 Max Need까지 3개 남음.

    분배하고 남은 자원 총 1개.

  4. 현재 분배할 수 있는 남은 자원 1개.

    1. Process 1 : 5개의 자원 취득. 앞으로 Max Need까지 5개 남음.(아까와 변함없음)
    2. Process 2 : 종료된 상태. 자원을 필요로 하지 않는다.
    3. Process 3 : 3개의 자원을 추가적으로 취득. 앞으로 Max Need까지 3개 남음.(아까와 변함없음)

    분배하고 남은 자원 총 1개.

  5. 현재 분배할 수 있는 남은 자원 1개.

    1. Process 1 : 5개의 자원 취득. 앞으로 Max Need까지 5개 남음.(아까와 변함없음)
    2. Process 2 : 종료된 상태. 자원을 필요로 하지 않는다.
    3. Process 3 : 3개의 자원을 추가적으로 취득. 앞으로 Max Need까지 3개 남음.(아까와 변함없음)

    분배하고 남은 자원 총 1개.

  6. …? 4번 5번이 계속 반복된다. → Deadlock발생!!

결론적으로 아무리 기다려도 Process 1,3은 완료될 수가 없다. 필요한 만큼의 자원을 할당해줄 수 없기 때문이다. 그리고 어떠한 업무도 완료될 수 없기에 자원은 반납되지 못하여 분배할 수 있는 자원은 모일 수가 없게 된다.

OS는 자원을 할당할 때 이러한 불안정 할당이 안되도록 해야한다. 이 때 Banker's Algorithm or Resource Allocation Graph Algorithm을 쓴다고 한다.


Detection & Recovery

앞서 얘기했던 Prevention과는 달리 Deadlock 문제 해결을 발생한 이후에 해결한다는 것.

따라서 detection 과 발생한 후 recovery를 통해서 문제를 해결한다는 것이다.


Ignore

실제로 Deadlock이 일어날 필요조건을 다 갖춰도 안일어날 수 있고, 실제로도 잘 안일어난다고 한다. 따라서 detection, recovery를 하여 시스템에 overhead를 주지 않고 그냥 무시하는 것도 방법이라고 한다.