교착 상태란?

2개 이상의 프로세스가 다른 프로세스의 작업이 끝나기만 기다리며 작업을 더 이상 진행하지 못하는 상태를 말한다. 컴퓨터 시스템에서 교착 상태는 시스템 자원, 공유 변수(또는 파일), 응용 프로그램 등을 사용할 때 발생할 수 있다.

 

자원 할당 그래프

프로세스가 어떤 자원을 사용중이고 어떤 자원을 기다리고 있는지를 방향성이 있는 그래프로 표현한 것이다. 자원 할당 그래프를 사용하면 자원의 할당과 대기 상태를 한눈에 파악할 수 있다.

 

 

교착 상태 필요조건
  • 상호 배제
    한 프로세스가 사용하는 자원은 다른 프로세스와 공유할 수 없는 배타적인 자원이어야 한다.
  • 비선점
    한 프로세스가 사용 중인 자원은 다른 프로세스가 빼앗을 수 없는 비선점 자원이어야 한다.
  • 점유와 대기
    프로세스가 어떤 자원을 할당받은 상태에서 다른 자원을 기다리는 상태여야 한다.
  • 원형 대기
    점유와 대기를 하는 프로세스 간에 관계가 원을 이루어야 한다.

 

식사하는 철학자 문제

철학자 4명이 둥그런 식탁에 둘러앉아 식사를 하는데, 왼쪽에 있는 포크를 잡은 뒤 오른쪽에 있는 포크를 잡아야만 식사가 가능하다는 조건이 있는 문제이다. 식사하는 철학자 문제는 교착 상태를 설명하기 위한 예로 오랫동안 사용되었다.

 

교착 상태 해결 방법
  • 교착 상태 예방 (prevention)
    교착 상태를 유발하는 네 가지 조건이 발생하지 않도록 무력화하는 방식
  • 교착 상태 회피 (avoidance)
    자원 할당량을 조절하여 교착 상태를 해결하는 방식이다. 즉, 자원을 할당하다가 교착 상태를 유발할 가능성이 있다고 판단되면 자원 할당을 중단하고 지켜본다.
  • 교착 상태 검출 (detection)
    자원 할당 그래프를 모니터링 하면서 교착 상태가 발생하는지 살펴보는 방식이다. 만약 교착 상태가 발생하면 교착 상태 회복 단계(Recovery)가 진행된다.

 

은행원 알고리즘 (banker's algorithm)

교착 상태 회피를 구현하는 방법으로, 자원의 총수와 현재 할당된 자원의 수를 기준으로 시스템을 안정 상태와 불안정 상태로 나누고 시스템이 안정 상태를 유지하도록 자원을 할당한다.