교착 상태 해결 방법

기술노트

🛡️ 교착 상태 해결 방법

교착 상태(Deadlock)는 두 개 이상의 프로세스가 서로 상대방이 점유하고 있는 자원을 기다리면서 영원히 다음 작업을 진행하지 못하는 상태를 말합니다. 이러한 교착 상태를 해결하기 위한 방법은 크게 예방, 회피, 탐지, 회복의 네 가지가 있습니다.


1. 예방 (Prevention)

교착 상태가 발생하기 위한 4가지 조건(상호 배제, 점유와 대기, 비선점, 환형 대기) 중 하나 이상을 제거하여, 교착 상태가 아예 발생하지 않도록 하는 방법입니다.

  • 상호 배제 조건 제거 : 모든 자원을 공유 가능하게 만듭니다. (현실적으로 어려움)
  • 점유와 대기 조건 제거 : 프로세스가 자원을 요청할 때, 필요한 모든 자원을 한 번에 할당받거나, 아니면 아무 자원도 할당받지 않도록 합니다.
  • 비선점 조건 제거 : 프로세스가 자원을 점유하고 있는 상태에서 다른 자원을 요청하고 할당받지 못하면, 점유하고 있던 자원을 강제로 빼앗아(선점) 다른 프로세스에게 할당합니다.
  • 환형 대기 조건 제거 : 모든 자원에 고유한 번호를 부여하고, 프로세스가 자원을 요청할 때 번호 순서대로만 요청하도록 강제합니다.

2. 회피 (Avoidance)

교착 상태가 발생할 가능성이 있는 자원 할당 요청을 미리 검사하여, 교착 상태가 발생하지 않는 안전한 상태(Safe State)에서만 자원을 할당하는 방법입니다. 가장 대표적인 알고리즘은 '은행원 알고리즘(Banker's Algorithm)'입니다.

  • 은행원 알고리즘 : 은행이 고객에게 돈을 빌려줄 때, 모든 고객의 요구를 들어줄 수 있는지 미리 계산하여 안전한 경우에만 대출해주는 것과 유사합니다. 시스템의 총 자원량과 각 프로세스의 최대 요구량을 알아야 합니다.

3. 탐지 (Detection)

교착 상태가 발생했는지 여부를 주기적으로 확인하는 방법입니다. 시스템의 자원 할당 그래프를 분석하여 환형 대기가 발생하는지 등을 검사합니다.

  • 장점 : 자원 활용률이 높습니다.
  • 단점: 교착 상태를 탐지하는 데 오버헤드가 발생하며, 탐지 후에는 '회복' 과정이 필요합니다.

4. 회복 (Recovery)

교착 상태가 탐지되면, 교착 상태를 해제하고 시스템을 정상 상태로 되돌리는 방법입니다.

  • 프로세스 종료 : 교착 상태에 있는 프로세스 중 하나 이상을 강제로 종료하여 교착 상태를 해제합니다. (가장 간단하지만, 작업 손실 발생)
  • 자원 선점 : 교착 상태에 있는 프로세스로부터 자원을 강제로 빼앗아 다른 프로세스에게 할당합니다.
  • 롤백 : 교착 상태에 있는 프로세스를 트랜잭션의 시작 지점이나 안전한 체크포인트로 되돌립니다.

💡 정보처리기사 핵심 Point

  • 정보처리기사 시험에서는 교착 상태 해결 방법의 각 개념과 특징을 정확히 이해하는 것이 중요합니다.
  • 특히 예방회피는 교착 상태가 발생하기 전에 막는 방법이고, 탐지회복은 발생한 후에 처리하는 방법이라는 점을 구분해야 합니다.
  • 은행원 알고리즘은 '회피' 기법의 대표적인 예시입니다.