교착 상태(Deadlock)란?

박재성·2025년 5월 13일
0

면접 대비 지식

목록 보기
7/11

교착 상태(Deadlock)란 둘 이상의 프로세스(또는 스레드)가 서로가 가진 자원을 기다리며 무한히 대기하는 상태를 의미한다.
이 상태에 빠지면 아무 작업도 진행되지 않으며, 외부 개입 없이는 복구가 어렵다.


🔹 교착 상태가 발생하는 조건 (Coffman의 4가지 조건)

교착 상태는 다음 네 가지 조건이 동시에 만족될 때 발생한다.

  1. 상호 배제 (Mutual Exclusion)

    • 자원은 한 번에 한 프로세스만 사용할 수 있어야 한다.
  2. 점유 대기 (Hold and Wait)

    • 자원을 가진 상태에서 다른 자원을 기다리는 프로세스가 존재해야 한다.
  3. 비선점 (No Preemption)

    • 다른 프로세스가 점유한 자원을 강제로 뺏을 수 없어야 한다.
  4. 순환 대기 (Circular Wait)

    • 프로세스들이 자원을 서로 물고 물며 원형으로 기다리는 상태여야 한다.
      예: P1 → P2 → P3 → P1

💡 예시

두 개의 프로세스와 두 개의 자원이 있을 때:

  • P1은 자원 A를 점유한 상태에서 자원 B를 요청하고,
  • P2는 자원 B를 점유한 상태에서 자원 A를 요청하면,
  • 서로 상대방이 자원을 놓을 때까지 무한 대기하게 된다.

P1: 자원 A [획득] → 자원 B [대기]
P2: 자원 B [획득] → 자원 A [대기]

→ 교착 상태 발생


🔧 교착 상태 해결 및 예방 방법

1. 교착 상태 예방 (Deadlock Prevention)

  • 위 네 조건 중 하나 이상이 성립하지 않도록 설계
  • 예: 모든 자원을 한 번에 할당하도록 강제 → 점유 대기 조건 제거

2. 교착 상태 회피 (Deadlock Avoidance)

  • 자원 할당 전, 안전 상태인지 시뮬레이션 후 허용
  • 대표 알고리즘: 은행원 알고리즘(Banker's Algorithm)

3. 교착 상태 탐지 및 회복 (Detection & Recovery)

  • 주기적으로 교착 상태를 탐지하고,
  • 발생 시 강제로 자원 회수 또는 프로세스 종료

4. 타임아웃 설정

  • 일정 시간 동안 자원을 획득하지 못하면 대기 중단
  • 간단하고 실용적인 해결책

✅ 정리

  • 교착 상태는 프로세스들이 서로 자원을 점유한 채 기다리는 막힘 상태를 뜻한다.
  • 발생 조건은 상호 배제, 점유 대기, 비선점, 순환 대기의 네 가지가 동시에 충족될 때이다.
  • 예방, 회피, 탐지 및 복구 전략을 통해 적절히 대응해야 한다.

0개의 댓글