두개 이상의 작업이 서로 상대방의 작업이 끝나기만을 기다리고 있기 때문에 결과적으로 아무것도 완료되지 못하는 상태.
"교착상태"라고도 한다. 시스템적으로 한정된 자원을 여러 곳에서 사용하고자 할 때 발생
이처럼 P1, P2가 모두 R1, R2를 사용하려고 하는데 서로의 것을 기다리는 상태.
즉, 멀티 프로세스 환경에서 한 프로세스가 자원을 요청했을 때, 동시에 그 자원을 사용할 수 없을 때 발생할 수 있다. 이때 프로세스는
대기상태
로 들어감. 이렇게 대기상태로 간 프로세스들이 실핼될 수 없을 때데드락
발생.
데드락은 다음 4가지 조건을 모두 성립해야 발생한다. 어느 하나라도 만족 못할 시 발생하지 않는다.
상호배제 (Mutual Exclusion)
점유대기 (Hold and Wait)
비선점 (No Preemption)
순환대기 (Circular Wait)
위 데드락 발생조건 4가지 중 하나라도 발생하지 않게 하면 된다.
상호배제 부정
점유대기 부정
비선점 부정
순환대기 부정
데드락을 예방하는 방법들은 시스템의 처리량이나 효율성을 떨어뜨릴 수 있다는 단점이 발생
회피법은 예방법보다는 덜 제한적인 방법으로 이러한 단점을 일부 해결
Safe State
시스템의 프로세스들이 요청하는 모든 자원을, 데드락을 발생시키지 않으면서도 차례로 모두에게 할당해 줄 수 있는 상태.
Safe Sequence
특정한 순서로 프로세스들에게 자원을 할당, 실행 및 종료 등의 작업을 할 때 데드락이 발생하지 않는 순서를 찾을 수 있다면 그것이 안전순서
이다.
회피알고리즘의 기본은 자원을 할당 후에도 시스템이 항상 Safe State
에 있을 수 있게 하는 것
은행원 알고리즘
대표적인 회피 알고리즘
어떤 자원의 할당여부를 결정하기 전에, 미리 결정된 모든 자원들의 최대 가능한 할당량을 가지고 simulation해서Safe State
에 들 수 있는지 검사한다.
-> 만약 Safe State이면 자원을 할당, 아니면 다른 프로세스가 자원 반환할 때까지 대기
자원할당 그래프
를 통해 데드락 탐지