시스템 자원에 대한 요구가 뒤엉킨 상태이다.
즉, 둘 이상의 프로세스가 다른 프로세스가 점유하고 있는 자원을 서로 기다릴 때 무한 대기에 빠지는 상황을 데드락이라 한다.
데드락의 해결방법은 크게 3가지로 분류할 수 있다.
1. 데드락이 발생하지 않도록 예방하기
2. 데드락 발생 가능성을 인정하면서도 적절하게 회피하기
3. 데드락 발생을 허용하지만 데드락을 탐지하여, 데드락에서 회복하기
상호 배제
한 번에 프로세스 하나만 해당 자원을 사용할 수 있다. 사용 중인 자원을 다른 프로세스가 사용하려면 요청한 자원이 해제될 때까지 기다려야 한다.
점유 대기
자원을 최소한 하나 보유하고, 다른 프로세스에 할당된 자원을 점유하기 위해 대기하는 프로세스가 존재해야 한다.
비선점
이미 할당된 자원을 강제로 빼앗을 수 없다는 의미
순환 대기
대기 프로세스의 집합이 순환 형태로 자원을 대기하고 있어야 한다.
상호 배제
방지 하는 방법: 한 번에 여러 프로세스가 공유 자원을 사용할 수 있게 한다.(이러면 추후 동기화 관련 문제가 발생할 수 있다.)
점유 대기
방지 하는 방법: 프로세스 실행에 필요한 모든 자원을 동시에 요구하고 허용할 때까지 작업을 보류해서, 나중에 또다른 자원을 점유하기 위한 대기 조건을 성립하지 않도록 한다.
비선점
방지 하는 방법: 이미 다른 프로세스에게 할당된 자원이 선점권이 없다고 가정할 때, 높은 우선순위의 프로세스가 해당 자원을 선점할 수 있도록 한다.
순환 대기
방지 하는 방법: 자원을 순환 형태로 대기하지 않도록 일정한 한쪽 방향으로만 자원을 요구할 수 있도록 한다.
데드락 예방은 시스템의 처리량이나 효율성을 떨어뜨리는 단점이 발생할 수 있다.
데드락 회피법은 앞서 예방법보다 조금 덜 제한적인 방법으로 예방법의 단점을 일부 해결할 수 있다.
안정 상태(Safe state)
시스템의 프로세스들이 요청하는 모든 자원을, 데드락을 발생시키지 않으면서도 차례로 모두에게 할당해 줄 수 있는 것
안전 순서(Safe sequence)
특정한 순서로 프로세스들에게 자원을 할당, 실행 및 종료 등의 작업을 할 때 데드락이 발생하지 않는 순서를 찾을 수 있는 것
먼저 시스템이 데드락 예방이나 회피법을 사용하지 않았을 때, 데드락이 발생할 수 있으니 여기에서 회복하기 위해 데드락을 탐지하고, 회복하는 알고리즘을 사용한다.
탐지 기법
Allocation, Request, Available 등으로 시스템에 데드락이 발생했는지 여부를 탐색한다. 현재 시스템의 자원 할당 상태를 가지고 파악한다. 이 외에도 자원 할당 그래프를 통해 탐지하는 방법도 있다.
회복 기법
데드락을 탐지 기법을 통해 발견했다면, 순환 대기에서 벗어나 데드락으로부터 회복하기 위한 방법을 사용한다.
단순히 프로세스를 1개 이상 중단시키기
1. 교착 상태에 빠진 모든 프로세스를 중단시키는 방법: 계속 연산중이던 프로세스들도 모두 일시에 중단되어 부분 결과가 폐기될 수 있는 부작용이 발생할 수 있다
2.프로세스를 하나씩 중단 시킬 때마다 탐지 알고리즘으로 데드락을 탐지하면서 회복시키는 방법: 매번 탐지 알고리즘을 호출 및 수행해야 하므로 부담이 되는 작업일 수 있다.
자원 선점하기
프로세스에 할당된 자원을 선점해서, 교착 상태를 해결할 때까지 그 자원을 다른 프로세스에 할당해 주는 방법