Deadlock(교착 상태) - 3. 데드락 발생 조건 (Coffman의 네 가지 조건)

2025. 3. 25. 22:37프로그래밍/시스템

 

3. 데드락 발생 조건 (Coffman의 네 가지 조건)

✅ 개요

데드락(교착 상태)은 단순히 자원을 동시에 사용하는 상황에서 발생하지 않습니다.
Edward G. Coffman, Jr., M. J. Elphick, A. Shoshani1971년 발표한 논문 「System Deadlocks」에서 제안한 바와 같이, 데드락이 발생하려면 반드시 네 가지 조건이 동시에 만족되어야 합니다.
이 네 가지 조건은 Coffman 조건(Coffman Conditions)이라 불리며, 데드락 분석, 예방, 탐지 전략의 기반이 되는 핵심 개념입니다.


✅ Coffman의 네 가지 조건

1. 상호 배제 (Mutual Exclusion)

  • 하나의 자원은 동시에 둘 이상의 프로세스가 사용할 수 없습니다.
  • 자원은 오직 하나의 프로세스만 점유할 수 있어야 하며, 자원은 공유 불가능한 상태여야 합니다.
  • 대표 예: 프린터, DB 락, 파일 핸들 등

2. 점유 대기 (Hold and Wait)

  • 자원을 점유하고 있는 프로세스가, 추가 자원을 요청하면서 대기하는 상태입니다.
  • 점유 중인 자원을 반납하지 않고 다른 자원을 기다리기 때문에 데드락 가능성이 생깁니다.

3. 비선점 (No Preemption)

  • 이미 할당된 자원은, 외부에서 강제로 회수(선점)할 수 없습니다.
  • 자원을 점유한 프로세스가 자발적으로 반환할 때까지 기다려야 하므로, 대기가 지속됩니다.

4. 환형 대기 (Circular Wait)

  • 두 개 이상의 프로세스가 서로가 가진 자원을 요구하며 원형으로 대기하는 구조입니다.
  • 예: 프로세스 A → B → C → A 순서로 각자의 자원을 기다리는 상황

🔄 조건 간의 관계 및 작용 방식

Coffman 조건은 개별적으로도 의미가 있지만,
이 네 가지가 동시에 충족될 때 데드락이 실제로 발생합니다.

🧩 어떻게 함께 작용하는가?

  1. 상호 배제가 자원 독점을 허용하고,
  2. 점유 대기가 자원을 점유한 상태에서 다른 자원에 대한 요청을 발생시키며,
  3. 비선점은 점유 중인 자원을 강제로 빼앗지 못하게 하고,
  4. 이 모든 상황이 환형 대기 구조로 연결되면 데드락이 형성됩니다.

즉, 이 조건들은 단독으로는 위험 요소에 불과하지만,
서로를 보완하며 데드락이라는 실제 문제로 이어지게 됩니다.


📊 조건 제거 시 효과 요약

조건명 기능 요약 제거 또는 완화 방법 예시
상호 배제 자원을 동시에 사용 못하게 함 공유 가능한 자원으로 변경 (예: 읽기 전용 자원)
점유 대기 자원을 점유한 채 대기함 필요한 모든 자원을 한 번에 요청하도록 설계
비선점 자원을 강제로 회수 불가 자원을 선점 가능하게 만들고 대기 프로세스를 중단
환형 대기 자원 요청이 순환 구조임 자원 요청 순서를 미리 정해 고리 구조를 방지

💡 하나의 조건이라도 제거하면 데드락은 원천적으로 발생하지 않습니다.


🧠 리소스 할당 그래프 (Resource Allocation Graph)

  • 프로세스자원을 노드로 나타내고, 요청/점유 관계를 화살표로 표현하는 그래프입니다.
  • 사이클(Cycle)이 존재할 경우, 데드락이 발생할 가능성이 있음
    • 단일 자원 인스턴스일 경우: 사이클 존재 = 데드락 발생
    • 다중 자원 인스턴스일 경우: 별도의 알고리즘이 필요

📝 요약

데드락은 단일 요인으로 발생하는 문제가 아니라,
Coffman의 네 가지 조건이 모두 충족될 때에만 발생하는 구조적 문제입니다.
따라서 시스템 설계 시 이 조건 중 하나라도 제거하거나 제어할 수 있다면,
데드락은 사전에 예방될 수 있습니다.
이 조건들은 이후 학습하게 될 데드락 예방, 회피, 탐지, 복구 전략의 기반이 됩니다.