OS에서 데드락이란 시스템 자원에 대한 요구가 뒤엉킨 상태를 의미한다.
즉 둘 이상의 쓰레드나 프로세스를 작업하는 과정에서 다른 쓰레드나 프로세스가 이미 점유하고 있는 자원을 서로 기다릴 때 무한 대기에 빠지는 상황을 의미한다.
데드락이 발생하기 위한 조건은 크게 4가지로 말할 수 있다.
데드락의 해결법을 크게 4가지로 분류할 수 있습니다.
- 데드락 발생을 막는 예방(prevention)
- 데드락의 발생을 회피(avoidance)
- 발생한 데드락을 탐지(detection)
- 데드락에서 회복(recovery)
데드락의 발생조건 4가지 중 하나라도 발생하지 않게 하는 것이 데드락을 예방하는 방법이다.
자원의 상호 배제 조건 방지
: 한 번에 여러 프로세스가 공유 자원을 사용할 수 있게 합니다.
그러나 동기화 문제가 발생할 수 있다.
점유 대기 조건 방지
: 프로세스 실행에 필요한 모든 자원을 한꺼번에 요구하고 허용할 때까지 작업을 보류해서, 나중에 또다른 자원을 점유하기 위한 대기 조건을 성립하지 않도록 한다.
비선점 조건 방지
: 이미 다른 프로세스에게 할당된 자원이 선점권이 없다고 가정할 때, 높은 우선순위의 프로세스가 해당 자원을 선점할 수 있도록 한다.
순환 대기 조건 방지
: 자원을 순환 형태로 대기하지 않도록 일정한 한 쪽 방향으로만 자원을 요구할 수 있도록 한다.
이러한 조건을 방지해서 데드락을 예방하는 방법은 시스템의 처리량이나 효율성을 떨어트리는 단점이 발생할 수 있다.
다음에 살펴볼 데드락 회피법은 예방법보다는 조금 덜 제한적인 방법으로 예방법의 단점을 일부 해결할 수 있다.
데드락 회피법에서는 Safe sequence, Safe state 등이 키워드이다.
시스템의 프로세스들이 요청하는 모든 자원을, 데드락을 발생시키지 않으면서도 차례로 모두에게 할당해 줄 수 있다면 안정 상태(safe state)에 있다고 말한다.
그리고 이처럼 특정한 순서로 프로세스들에게 자원을 할당, 실행 및 종료 등의 작업을 할 때 데드락이 발생하지 않는 순서를 찾을 수 있다면, 그것을 안전 순서(safe sequence)라고 부른다.
반면 불안정 상태는 안정 상태가 아닌 상황을 말합니다. 즉, 데드락 발생 가능성이 있는 상황이며, 교착 상태(데드락)는 불안정 상태일 때 발생할 수 있습니다. 불안정 상태가 교착 상태보다 좀 더 큰 집합이다.(즉, 교착 상태가 불안정 상태의 부분집합)
이처럼 회피 알고리즘은 자원을 할당한 후에도 시스템이 항상 Safe state에 있을 수 있도록 할당을 허용하자는 것이 기본 특징이다.
이러한 특징을 살린 알고리즘으로 은행원 알고리즘이 가장 대표적이다.