콘텐츠로 이동

안전 상태 (Safe State)

Jan 23, 2026 · Updated Jan 27, 2026

안전 상태란 시스템이 모든 스레드에 자원을 (최대 요구까지) 할당할 수 있는 순서가 존재하여 교착 상태를 피할 수 있는 상태입니다. 교착 상태 회피(Avoidance) 전략은 시스템을 항상 안전 상태로 유지합니다.

각 스레드가 필요한 자원의 **최대량(Maximum)**을 사전에 선언합니다.

안전 순서열 (Safe Sequence): <T1, T2, …, Tn>이 존재하여 각 Ti가 요청할 수 있는 자원 ≤ (현재 가용 자원 + 앞선 Tj들이 보유한 자원)을 만족하면 안전 상태입니다. 안전 순서열이 하나라도 존재하면 안전 상태입니다.

┌─────────────────────────────┐
│ safe │
│ ┌───────────────────────┐ │
│ │ unsafe │ │
│ │ ┌─────────────────┐ │ │
│ │ │ deadlock │ │ │
│ │ └─────────────────┘ │ │
│ └───────────────────────┘ │
└─────────────────────────────┘
  • 교착 상태 ⊂ 불안전 상태 ⊂ 전체 상태
  • 안전 상태 → 교착 없음 (보장)
  • 불안전 상태 → 교착 가능 (반드시는 아님)

총 자원 12개, 스레드 3개:

  • T0(최대 10, 현재 5), T1(최대 4, 현재 2), T2(최대 9, 현재 2)
  • 가용 자원 3개 → <T1, T0, T2> 순서로 모두 완료 가능 → 안전 상태
  • 만약 T2에 1개 더 할당하면 가용 2개 → 어떤 순서로도 불가 → 불안전 상태
  • [[교착 상태 (Deadlock)]]
  • [[교착 상태 필요조건 (Necessary Conditions)]]
  • [[은행원 알고리즘 (Banker’s Algorithm)]]