CS

교착상태(DeadLock)

쿠쿠s 2022. 4. 22. 12:00

 

교착상태(DeadLock)


두 개 이상의 작업이 서로 상대방의 작업이 끝나기만을 기다리고 있는 상태, 결국 아무것도 완료되지 못하는 상태를 말합니다. 같은 말로 둘 이상의 스레드가 각기 다른 스레드가 점유하고 있는 자원을 서로 기다릴 때, 무한 대기에 빠지는 상태라고도 합니다.

 

 

 

교착상태가 발생하는 조건은 상호 배제, 점유 대기, 비선점, 순환 대기 4가지 조건이 동시에 성립할 때 발생할 수 있습니다.

이런 교착상태 문제를 해결하는 방법으로는 무시, 예방, 회피, 탐지 회복 4가지 방법이 있습니다.

 

 

 

 

발생조건

상호 배제 한 자원은 동시에 쓸 수 없는 상황, 하나의 스레드만이 자원을 점유 할 수 있다.
점유 대기 한 스레드가 자원을 붙잡은 상태에서 다른 스레드가 보유한 자원을 기다리고 있는 상태
비선점 다른 스레드가 사용중인 자원을 강제로 선점할 수 없는 상황
순환 대기 순환 형태로 자원을 대기하는 상황, 꼬리에 꼬리를 무는 형태

 

 

해결방법

무시 아무런 조치도 취하지않고 deadlock을 무시한다. - 시스템 성능 저하가 없다는 장점
예방 교착 상태의 4가지 발생 조건중 하나가 성립하지 않게 하는 방법 - 순환 대기 조건이 성립하지 않도록 하는것이 현실적 가능한 예방
- 자원 사용의 효율성이 떨어지고 비용이 크다.
회피 교착상태가 발생하지 않도록 자원을 할당하는 방법 - 자원 할당 그래프 알고리즘, 은행원 알고리즘 등 이 있다.
탐지-회복 시스템 검사를 통해 교착상태 발생을 탐지하고 회복하는 방법 - 자원 사용의 효율성이 떨어지고 비용이 크다.