#keywords Hang,Deadlock
가끔 단순히 행이 걸린 상태를 [데드락]이라며 혼용하여 사용하는 사람이 있는데 엄밀한 의미에서 틀린 사용법이다. 그 차이를 알아보자.
[[html(행(hang))]]은 프로그램 수행 중 멈춰서 더이상 진행이 되지 않는 상황을 의미한다. 데드락처럼 '''분명한''' 정의가 있는 게 아니라 우리 말로 '먹통되었다'와 같은 정도의 느낌의 '''말'''이다. 대신 먹통 수준의 속어적인 표현은 아니고 책이나 논문에서도 무난히 쓸 수 있는 정도의 표현이다.
[[html(데드락(deadlock))]]은 전산 분야에서 많이 연구된 '''전문용어'''이다. 간단한 예를 들면, 내가 어떤 자원을 가지고 있으면서 다른 자원을 기다리고 있는데 다른 쪽에서도 내가 필요로 하는 자원을 가지고 있으면서 나의 자원을 기다리고 있어서 진행할 수 없는 상황을 의미한다.
따라서 데드락 상태에 의해 행이 걸렸다고 표현할 수는 있어도, 행이 걸린 상태를 데드락이라고 단정할 수는 없다.
데드락이 발생하기 위해서는 아래 조건을 충족해야 한다(E.G. 코프만, 1971).
1. Mutual exclusion - 특정 자원은 한 프로세스 밖에 못 가진다(배타적인 통제권).
2. Hold and wait - 프로세스가 자원을 가지고 있으면서 다른 자원을 기다린다.
3. No preemption - 다른 프로세스가 강제로 그 자원을 뺏을 수 없다.
4. Circular wait - 필요한 자원을 가지고 있는 프로세스들끼리 원을 형성. ex) a -> b -> c -> d -> a
이 조건 중에서 한 가지라도 만족하지 않으면 데드락은 발생하지 않는다
컴퓨터 과학에서는 데드락을 주제로 여러 연구가 있는데 아래 같은 주제를 이야기 할 수 있겠다.
* 어떻게 하면 데드락을 방지할 수 있는지 (Deadlock prevention)
* 어떻게 하면 데드락을 피할 수 있는지 (Deadlock avoidance)
* 데드락이 발생할지 어떻게 알아낼 수 있을지 (Deadlock detection)
* 데드락이 발생하면 어떻게 해결할지 (Deadlock recovery)
마지막으로 데드락을 탐지하는 것은 '''정말로''' 간단한 일이 아니다.
참고
----
http://ko.wikipedia.org/wiki/%EA%B5%90%EC%B0%A9_%EC%83%81%ED%83%9C
----
CategoryDocument