Deadlock이란?
-
둘 이상의 프로세스들이 자원을 점유한 상태에서 서로 다른 프로세스가 점유하고 있는 자원을 요구하며 서로 무한정 기다리는 현상

-
상호 배제(Mutual Exclusion)에 의해 나타나는 문제점
-
위 그림과 같이 자동차(프로세스)들이 현재 위치한 길(자원)을 점유함과 동시에 다른 차가 사용하는 길(자원)을 사용하려고 대기하고 있지만, 다른 길(자원)을 사용할 수 없으며 현재 길(자원)에서도 벗어나지 못하는 상태
Deadloack 발생 필요 충분 조건
교착 상태가 되기 위해서는 다음 네 조건이 모두 충족되어야 한다.
- 상호 배제 (Mutual Exclusion)
- 한 번에 한 개의 프로세스만이 공유 자원을 사용할 수 있어야 한다.
- 점유와 대기 (Hold & Wait)
- 최소 하나의 자원을 점유하고 있으면서 다른 프로세스에 할당되어 사용되고 있는 자원을 추가로 요구한다.
- 비선점 (Non-Preemptive)
- 다른 프로세스에 할당된 자원은 사용이 끝날 때까지 강제로 빼앗을 수 없어야 한다.
- 환형(순환) 대기 (Circular Wait)
- 두 개 이상의 프로세스가 자원 접근을 기다리는데, 그 사이에 순환이 생성됨
Deadlock 해결 방법
- 예방 (Prevention)
- 교착 상태가 발생하지 않도록 사전에 시스템을 제어하는 방법
- 교착 상태 발생의 네 가지 조건 중 하나를 제거함으로써 수행
- 시스템의 처리량이나, 효율성을 떨어뜨리는 자원 낭비가 심한 기법
- 회피 (Avoidance)
- 교착 상태가 발생할 가능성을 배제하지 않고 교착 상태가 발생하면 적절히 피해가는 방법
- 안정 상태(safe state)면 자원 할당하고 아니면 다른 프로세스들이 자원을 해지하기까지 대기
- 은행원 알고리즘(Banker's Algorithm) 사용
- 탐지 (Detection)
- 시스템에 교착 상태가 발생했는지 점검하여 교착 상태에 있는 프로세스와 자원을 발견한 것
- Allocation, Request, Available 등으로 시스템에 교착 상태가 발생했는지 여부 탐색
- 회복 (Recovery)
- 탐지 기법으로 교착 상태를 발견했다면, 순환 대기에서 벗어나 교착 상태로부터 회복하기 위한 방법을 사용
- 교착 상태를 일으킨 프로세스를 종료하거나, 교착 상태의 프로세스에 할당된 자원을 선점하여 프로세스나 자원을 회복하는 것