교착 상태
2개 이상의 프로세스가 다른 프로세스의 작업이 끝나기만 기다리며 작업을 더 이상 진행하지 못하는 상태
교착 상태의 발생
- 시스템 자원 동시에 같이 사용할 수 없는 시스템 자원을 할당받은 후 양보 안 할 시 발생ex) 스캐너, 프린터
- 공유 변수 한 변수를 할당받은 상태에서 다른 변수 대기 시 발생
- 응용 프로그램 데이터베이스 같은 응용 프로그램에서도 발생
자원 할당 그래프
프로세스가 어떤 자원을 사용 중이고 어떤 자원을 기다리고 있는지를 방향성이 있는 그래프로 표현

- 사용하는 이유 : 어떤 프로세스에 어떤 자원이 할당되어 있는지 혹은 어떤 프로세스가 자원을 기다리고 있는지 한눈에 파악 가능하다.
- 다중 자원 : 여러 프로세스가 하나의 자원을 동시에 사용
식사하는 철학자 문제

- 철학자들은 서로 포크를 공유할 수 없다.> 자원을 공유하지 못하는 교착 상태 발생
- 각 철학자는 다른 철학자의 포크를 빼앗을 수 없다.> 자원을 빼앗을 수 없으면 자원을 놓을 때까지 기다려야 하므로 교착 상태 발생
- 각 철학자는 왼쪽 포크를 잡은 채 오른쪽 포크를 기다린다.> 자원 하나를 잡은 상태에서 다른 자원을 기다리면 교착 상태 발생
- 자원 할당 그래프가 원형이다.> 자원을 요구하는 방향이 원을 이루면 양보를 하지 않기 때문에 교착 상태 발생
교착 상태 필요조건
교착 상태는 상호 배제, 비선점, 점유와 대기, 원형 대기를 모두 충족해야 발생한다.
- 상호 배제 한 프로세스가 사용하는 자원은 공유할 수 없는 배타적인 자원이어야 한다.
- 비선점 한 프로세스가 사용 중인 자원은 중간에 다른 프로세스가 빼앗을 수 없는 비선점 자원이어야 한다.
- 점유와 대기 프로세스가 어떤 자원을 할당받은 상태에서 다른 자원을 기다리는 상태여야 한다.
- 원형 대기 점유와 대기를 하는 프로세스 간의 관계가 원을 이루어야 한다.
교착 상태 해결 방법
교착 상태를 해결하는 방법은 예방, 회피, 검출, 회복 방법이 있다.
해결 방법 | 특징 |
교착 상태 예방 | 교착 상태를 유발하는 네 가지 조건을 무력화 한다. |
교착 상태 회피 | 교착 상태가 발생하지 않는 수준으로 자원을 할당한다. |
교착 상태 검출 | 자원 할당 그래프를 사용하여 교착 상태를 발견한다. |
교착 상태 회복 | 교착 상태를 검출한 후 해결한다. |
교착 상태 예방
- 상호 배제 예방
- 비선점 예방
- 점유와 대기 예방
- 원형 대기 예방
📗 상호 배제 예방
시스템 내에 있는 상호 배타적인 모든 자원, 즉 독립적으로 사용할 수 있는 자원을 없애버리는 방법이다. 시스템 내의 모든 자원을 공유할 수 있다면 교착 상태가 발생하지 않는다.
📗 비선점 예방
모든 자원을 빼앗을 수 있도록 만드는 방법이다. 하지만 어떤 기준으로 빼앗을지, 빼앗은 시간 중 얼마나 사용할지 등 결정하기 어렵고 아사 현상을 일으킬 수도 있다.
📗 점유와 대기 예방
프로세스가 자원을 점유한 상태에서 다른 자원을 기다리지 못하게 하는 방법이다. 다시 말해 '전부 할당하거나 아니면 아예 할당하지 않는'방식을 적용하는 것이다.
📗 원형 대기 예방
점유와 대기를 하는 프로세스들이 원형을 이루지 못하도록 막는 방법이다. 그러나 프로세스 작업 진행에 유연성이 떨어지고 자원의 번호를 어떻게 부여할 것인지에 대한 문제가 존재한다.
교착 상태 회피
프로세스에 자원을 할당할 때 어느 수준 이상의 자원을 나누어주면 교착상태가 발생하는지 파악하여 그 수준 이하로 자원을 나누어주는 방법이다.
문제점
- 프로세스가 자신이 사용할 모든 자원을 미리 선언해야 한다.
- 시스템의 전체 자원 수가 고정적이어야 한다.
- 자원이 낭비된다.
- 은행원 알고리즘
은행이 대출해주는 방식
☞ 대출 금액이 대출 가능한 범위(안정 상태) 내이면 허용되지만 그렇지 않으면 거부
- 안정 상태
☞ 각 프로세스의 기대 자원과 비교하여 가용 자원이 크거나 같은 경우가 한 번 이상인 경우
교착 상태 검출
운영체제가 프로세스의 작업을 관찰하면서 교착 상태 발생 여부를 계속 주시하는 방식이다.
📗 타임아웃
일정 시간 동안 작업이 진행되지 않은 프로세스를 교착상태가 발생한 것으로 간주하는 방법이다.
문제점
- 엉뚱한 프로세스가 강제 종료될 수 있다.
- 모든 시스템에 적용할 수 없다.
📗 자원 할당 그래프를 이용한 교착 상태 검출

교착 상태가 없는 자원 할당 그래프
실선 : 점유
점선 : 대기

교착 상태가 있는 자원 할당 그래프
이 방법은 프로세스의 작업 방식을 제한하지 않으면서 교착 상태를 정확하게 파악할 수 있다는 것이 장점이다.
그러나 오버헤드가 발생하는 단점이 있다.
교착 상태 회복
교착 상태를 유발한 프로세스를 강제로 종료하여 교착 상태를 회복한다.
- 교착 상태를 일으킨 모든 프로세스를 동시에 종료
- 교착 상태를 일으킨 프로세스 중 하나를 골라 순서대로 종료