Deadlock(교착상태)

둘 이상의 프로세스 혹은 스레드(작업)들이 서로 상대방이 사용중인 자원을 쓰기 위해 대기하고 있는 상황.

Untitled

*병목현상과 혼동하지만 원인이 다르다. 병목 현상은 여러 구성 요소가 동시에 실행될 때, 가장 느린 쪽의 속도에 맞추기 위해 전체 시스템이 느려지는 상황.

*기아상태와도 혼동할 수있는데, 교착상태는 프로세스가 자원을 얻지 못해 다음 처리를 하지 못하는 상태를 말하고 기아 상태는 프로세스가 원하는 자원을 계속 할당 받지 못하는 상태이다. 즉 교착 상태는 여러 프로세스가 동일한 자원 점유를 원할 때 발생하고 기아 상태는 여러 프로세스가 자원을 점유하기 위해 경쟁 할 때 특정 프로세스는 영원히 자원 할당을 받지 못하는 것이다.

Deadlock 의 필요 조건

다음 4가지의 조건을 모두 만족해야 교착상태가 발생한다.

→ 즉, 한 가지 조건이라도 만족하지 못하게 한다면 교착상태를 해결할 수 있다.

1. 상호 배제(mutual exclusion)

매 순간 하나의 자원은 하나의 작업이 점유한다. 즉, 하나의 자원을 얻었다면 독점적으로 사용하며, 다른 작업이 해당 자원을 요청하면 자원이 방출될 때까지 지연(대기)한다.

2. 점유 대기(Hold-and-wait)

자원을 가진 작업이 하나의 자원을 가진 채 다른 자원을 기다릴 때, 현재 보유한 자원을 놓지 않고 계속 기다린다.

3. 비선점 (no preemption)