- 둘 이상의 프로세스가 다른 프로세스가 점유하고 있는 자원을 서로 기다릴 때, 무한 대기에 빠지는 상황.
- 교착 상태.
데드락은 프로세스가 자원을 사용하는 절차인 Request, Allocate, Use, Release 중 모든 프로세스가 Request 상태가 되어있는 상황이다.
데드락이 발생하기 위해 다음 4가지 조건이 모두 만족해야 된다.
데드락을 예방하는 방법들은 시스템의 처리량이나 효율성을 떨어뜨리는 단점 혹은 기아 문제가 발생할 수 있다. 데드락 회피법으로 데드락 예방법의 단점 일부를 해결할 수 있다.
특정한 순서로 프로세스들에게 자원을 할당할 때 데드락이 발생하지 않는 순서.
- 시스템의 프로세스들이 요청하는 모든 자원을 데드락을 발생시키지 않으면서도 차례로 모두에게 할당해 줄 수 있는 상태.
- 시스템의 프로세스들에 대한 안전 순서가 존재하는 상태.
안정 상태와 반대로 불안정 상태(Unsafe State) 는 데드락 발생 가능성이 있는 상황을 말한다. 데드락은 불안정 상태에서 발생할 수 있다. 따라서, 불안정 상태가 되지 않도록 자원을 할당하여 데드락을 회피한다.
자원을 할당한 후에도 시스템에 항상 안정 상태에 있을 수 있도록 하여 데드락을 회피할 수 있다. 이를 위한 알고리즘 중 유명한 것이 자원 할당 그래프 알고리즘 과 은행원 알고리즘 이다.
자원을 요청하는 선이 자원을 할당받는 선으로 변경될 때, 점선(미래에 자원을 요청할 수 있음)을 포함하여 사이클이 생기지 않는 경우에만 요청된 자원을 할당한다.
각 자원 타입마다 하나의 인스턴스가 존재하는 경우 사용한다.
- 어떤 자원의 할당을 허용하는지에 관한 여부를 결정하기 전에, 미리 결정된 모든 자원들의 최대 가능한 할당량을 가지고 시뮬레이션해서 안정 상태에 들 수 있는지 여부를 검사한다.
- 총 요청 자원의 수가 남은 자원의 수보다 적은 프로세스만 선택하여 수행한다.
은행원 알고리즘의 경우, 여러 인스턴스가 존재하는 경우에 사용한다. 또, 미리 최대 자원 요구량을 알아야 하고, 할당할 수 있는 자원 수가 일정해야 하는 등의 제약조건이 있다.
데드락이 발생했을 때, 데드락을 탐지하고 회복하는 알고리즘을 사용한다.
데드락이 일어나지 않는다고 생각하고 아무런 조치도 취하지 않는 방식.
데드락에 대한 조치 자체가 더 큰 오버헤드일 수 있기 때문에, 시스템이 비정상적으로 작동하는 것을 사람이 느낀 후 직접 프로세스를 죽이는 등의 방법으로 대처한다. 대부분의 범용 운영체제가 채택하는 방식이다.
참조