#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