두 개 이상의 프로세스 혹은 스레드가 일부 리소스를 가지고 있으면서 서로가 가진 리소스를 기다리는 상태
※ 프로세스가 자원을 사용하는 절차
Request(요청)
Allocate(할당)
Use(사용)
Release(반납)
Mutual Exclusion
Hold and Wait
No Preemption
Circular Wait
자원 할당 그래프
를 보고 데드락의 발생 여부를 판별할 수 있다.Deadlock Prevention(데드락 방지)
1. mutual exclusion
- 리소스를 공유 가능하게 한다. (리소스를 공유할 수 없는 리소스가 있어서 현실적으로 불가능)
2. hold and wait
- 프로세스가 자원을 요청할 때 다른 자원을 가지고 있지 않아야 한다.
- 1. 프로세스를 시작하기 전에 사용할 리소스들을 모두 획득
- 2. 리소스가 필요할 경우, 보유한 리소스를 release하고 요청
- 사용중이지 않은 리소스도 보유하고 있기 때문에, 리소스 사용효율이 떨어진다.
- 요청이 많은 자원을 다른 프로세스에서 계속 사용하여 프로세스가 장시간 자원에 접근을 못할 수 있다. (starvation)
3. no preemption
- 추가적인 리소스가 필요하다면 다른 프로세스가 선점하게 하고, 모든 리소스에 접근할 수 있을 때 시작한다.
- cpu의 context switching과 유사
4. circular wait
- 모든 리소스에 순서를 할당하여 정해진 순서대로만 리소스를 할당
Deadlock Avoidance
Banker Algorithm
Deadlock Detection and recovery
Deadlock Ignorance