deadlock prevention: OS에서 deadlock이 발생하지 않도록 4가지 조건 중 최소 1가지를 절대 만족시키지 않도록 한다. → 요청 방법에 제한을 둔다.
mutal exclusion: 공유 가능한 자원들은 deadlock에 걸리지 않지만 근본적으로 공유가 불가능한 자원들 때문에 이 조건을 어겨 예방하는 것은 불가능하다.
hold and wait: 자원을 요청할 때 다른 자원들을 점유하지 않을 것을 보장하면 된다.
→ 할당된 모든 자원이 바로 사용되지 않기에 자원의 이용도가 낮을 수 있다.
→ 기아 상태 유발 가능 최소한 하나가 항상 다른 프로세스에게 할당되어 있기 때문에
no preemeption: 1번 resource를 잡고있는 process가 2번 resource를 요청했을 때 바로 받을 수 없다면 1번과 (다른 프로세스에게 할당된) 2번 모두 release 하도록 한다. release함으로써 preemption이 되어버린다.
또한, 프로세스는 요청 중인 새로운 자원을(2번) 할당받고 또한 대기 중에 선점되었던(끊겼던) 모든 자원(1번)을 회복할 때에만 다시 시작할 수 있다.
circular wait: resource에 ordering(순서)을 부여하여 순서에 맞게 resource를 요청할 수 있고 할당받을 수 있게 한다. 동시에 요청 불가능하기에 원형을 이룰 수 없다.
→ 장치의 이용률 저하, 시스템 처리율(throughput) 감소의 문제점
deadlock avoidance: deadlock 상황을 회피 → 자원이 어떻게 요청될 지에 대한 추가 정보를 제공하도록 요구한다.
특정 process에 대한 사전 정보가 있다고 가정
(어떤 프로세스에 대한 자원 요청 순서 정보)
시스템이 항상 safe satae에 있도록 보장하는 것을 말한다. 단, unsafe state라고 해도 deadlock이 꼭 발생하는 것은 아니다.
safe state: deadlock에 걸릴 수 없는 상태
어떤 순서로 프로세스들이 (최대 요구)자원을 요청하더라도 deadlock을 야기시키지 않고 차례로 모두 할당해 줄 수 있는 상태
unsafe state: deadlock에 걸릴 가능성이 있는 상태 (무조건은 아님 !)
How ?
claim edge(예약 간선) , 단 점선으로 표시
request edge(요청 간선)
assignment edge(할당 간선)
사이클을 형성하지 않을 때에만 요청을 허용한다.
deadlock detection - wait-for 그래프 (Pi->Pj): Pi가 Pj를 기다릴 때 1) single instance
주기성을 가짐(deadlock인지 계속 확인)