일반적으로 시스템은 아래와 같은 dead lock을 예방하거나 피하는 알고리즘을 제공한다.
- 데드락 발생 여부를 판단하기 위해 시스템의 상태를 조사하는 알고리즘
- 데드락에서 회복하기 위한 알고리즘
해당 섹션에서는 1번에 대해서 알아본다.
알고리즘이 동작하는 방식은 2가지 요소에 의해 나누어진다.
- Single Instance of Each Resource Type (하나의 인스턴스)
- Several Instances of a Resource Type (여러 개의 인스턴스)
resource는 추상적 개체를 의미하고, instance는 실질적 요소를 의미한다.
알고리즘의 고려 사항
- 런타임 비용
: 시스템이 필요한 정보를 계속해서 업데이트하고 유지하는데 필요한 비용과, 데드락을 확인하기 위해 감지 알고리즘을 실행하는 비용.
- 잠재적 손실
: 데드락에서 회복하는 과정에서 발생할 수 있는 손실을 의미. 예를 들어, 데드락을 해결하기 위해 일부 작업을 중단시키거나, 데이터를 롤백(원래 상태로 되돌림)하는 등의 조치가 필요할 수 있으며, 이로 인해 시간이 소요되거나 데이터 손실이 발생할 수 있다.
요약하면 탐지 비용과 문제가 있을 경우 해결에 필요한 비용을 고려해야한다.
8.7.1 Single Instance of Each Resource Type

- 그래프의 종류와 방식
- 대기-그래프(wait-for graph)
: 모든 자원이 하나의 인스턴스만 가질 경우, 자원 노드를 제거하고 만든 그래프
- 자원-할당 그래프(Resource-allocation graph) : 모든 자원을 표시한 그래프
single “리소스 to 인스턴스”이기 때문에 표기만 다를 뿐 결과는 같다.
- 대기-그래프(wait-for graph)
: 모든 자원이 하나의 인스턴스만 가질 경우, 자원 노드를 제거하고 만든 그래프
- 데드락 판단
: 대기-그래프에 사이클이 포함되어 있을 때, 데드락이 존재한다고 할 수 있다. 따라서 데드락 감지를 위해서는 사이클을 탐색하는 알고리즘을 사용하고 해당 알고리즘은 O()의 연산을 요구한다. (정점의 수가 n)
물론 문제가 생긴다면 보다 적은 비용이 발생한다.