교착 상태

기술노트

💀 교착 상태 (Deadlock)

교착 상태(Deadlock)는 다중 프로그래밍 환경에서 두 개 이상의 프로세스(또는 스레드)가 서로 상대방이 점유하고 있는 자원을 기다리면서, 영원히 다음 작업을 진행하지 못하는 상태를 말합니다. 마치 두 사람이 외나무다리에서 서로 비켜주지 않아 아무도 건너지 못하는 상황과 같습니다.


⚙️ 교착 상태의 4가지 발생 조건

교착 상태는 다음 4가지 조건이 모두 충족될 때 발생할 수 있습니다.

1. 상호 배제 (Mutual Exclusion) : 자원은 한 번에 하나의 프로세스만 사용할 수 있습니다. (공유 불가능한 자원) 2. 점유와 대기 (Hold and Wait) : 자원을 점유한 상태에서 다른 자원을 얻기 위해 대기하는 프로세스가 존재합니다. 3. 비선점 (No Preemption) : 프로세스가 점유하고 있는 자원을 강제로 빼앗을 수 없습니다. 자원은 해당 프로세스가 자발적으로 반납해야만 합니다. 4. 환형 대기 (Circular Wait) : 자원을 기다리는 프로세스들이 원형으로 꼬리를 물고 서로를 기다리는 상태입니다. (P1은 R1을 점유하고 R2를 기다리고, P2는 R2를 점유하고 R1을 기다리는 식)


🛡️ 교착 상태 해결 방법

교착 상태를 해결하는 방법은 크게 4가지가 있습니다.

  • 예방 (Prevention) : 교착 상태 발생 조건 4가지 중 하나 이상을 제거하여, 교착 상태가 아예 발생하지 않도록 합니다. (예: 모든 자원을 한 번에 할당받도록 강제)
  • 회피 (Avoidance) : 자원 할당 시 교착 상태가 발생할 가능성이 있는지 미리 검사하여, 안전한 상태(Safe State)에서만 자원을 할당합니다. (예: 은행원 알고리즘)
  • 탐지 (Detection) : 교착 상태가 발생했는지 주기적으로 확인합니다. (자원 할당 그래프 사용)
  • 회복 (Recovery) : 교착 상태가 탐지되면, 교착 상태에 있는 프로세스를 강제로 종료하거나(프로세스 종료), 자원을 선점하여(자원 선점) 교착 상태를 해제합니다.

💡 정보처리기사 핵심 Point

  • 정보처리기사 시험에서는 교착 상태의 4가지 발생 조건각 해결 방법의 개념 및 특징을 묻는 문제가 매우 자주 출제됩니다.
  • 특히 4가지 발생 조건은 반드시 암기하고 이해해야 합니다.
  • 교착 상태는 다중 프로그래밍 환경에서 자원 관리에 있어 매우 중요한 개념입니다.