Deadlocks 2: Detection and Recovery, Ignorance
Deadlock Detection and Recovery
- deadlock이 발생했는지 확인하고 복구
- 자원 할당 그래프를 이용하여 찾기, 자원을 없애고 프로세스로만 간단히 표현 가능
- 자원 당 instance가 1개 일때 활용
- 자원 당 instance가 여러개 일때 사용하는 것을 사용하여 찾아도 됨, subset에 불과함
- 싸이클 확인은 O(N^2)로 확인가능(BFS)
- 자원이 여러개 일때
- Avoidance와 달리 최대한 낙관적으로 생각하여 deadlock이 발생하는지 판단
- 현재 요청된 것이 없는 프로세스로부터 자원이 반납될 거라고 가정
- 반납됐을 때 다른 프로세스들의 요청을 수락할 수 있는가
- 가능하면 SAFE하기 때문에 deadlock X
- 좌측은 deadlock X, 우측은 deadlock O
- 가용자원으로 처리 가능한 게 있는지 확인 -> 요청이 없는 프로세스들이 반납한다고 가정했을 때 추가 자원 확인 -> 요청 처리 가능한 sequence가 있는지 확인
Recovery
- Process termination
- Abort all deadlocked processes
- Avort one process at a time until the deadlock cycle is eliminated
- Resource Preemption
- 비용을 최소화할 victim의 선정
- safe state로 rollback 하여 process를 restart
- Starvation 문제
- 동일한 프로세스가 계속해서 victim으로 선정되는 경우
- cost factor에 rollback 횟수도 같이 고려
Deadlock Ignorance
- Deadlock 일어나지 않는다고 생각하고 아무런 조치도 취하지 않음
- deadlock이 매우 드물게 발생하므로 deadlock에 대한 조치 자체가 더 큰 overhead일 수 있음
- 만약 시스템에 deadlock이 발생한 경우 시스템이 비정상적으로 작동하는 것을 사람이 느낀 후 직접 process를 죽이는 등의 방법으로 대처
- UNIX, Windows 등 대부분의 범용 OS가 채택