하드웨어, 소프트웨어 등을 포함하는 개념 (ex. I/O device, CPU cycle, memory space, semaphore)
프로세스가 자원을 사용하는 절차 (Request, Allocate, Use, Release)
시스템에 2개에 tape drive가 있다.
프로세스 P1과 P2 각각이 하나의 tape drive를 보유한 채 다른 하나를 기다리고 있다.



그래프에 cycle이 없으면 deadlock이 아님
그래프에 cycle이 있으면
- 자원당 인스턴스가 1개이면, 사이클은 deadlock이다.
- 자원당 인스턴스가 여러개이면 데드락일 가능성이 있다.
자원 할당 시 Deadlock의 4가지 필요 조건 중 어느 하나가 만족되지 않도록 하는 것
조건
- 프로세스가 시작 시 모든 필요한 자원을 미리 할당받게 하는 방법
- 자원이 필요한 경우 자원을 모두 놓고 다시 요청
=> Utilization저하, throughput감소, starvation문제
자원 요청에 대한 부가적인 정보를 이용해서 deadlock의 가능성이 없는 경우에만 자원을 할당
시스템 state가 원래 state로 돌아올 수 있는 경우에만 자원 할당
Single instance per resource types (Resource Allocation Graph algorithm 사용)
request의 assignment변경 시 cycle이 생기지 않는 경우에만 요청 자원을 할당
Cycle 생성 여부 조사시 프로세스의 수가 n일 때 O(n제곱)의 시간이 걸린다
Multiple instances per resource types (Banker's Algorithm 사용)
Deadlock 발생은 허용하되, 그에 대한 detection루틴을 두어 deadlock 발견시 recover


Resource type 당 single instance인 경우
wait-for graph
자원할당 그래프의 변형
프로세스만으로 node구성
Pj가 가지고 있는 자원을 Pk가 기다리는 경우 Pk->Pj
Algorithm
Wait-for-graph에 사이클이 존재하는지를 주기적으로 조사
O(n제곱)시간 소요
Recovery
○Process termination
deadlock 프로세스 전부 제거
deadlock사이클이 제거될 때까지 한번에 한 프로세스씩 제거
○Resource Preemption
비용을 최소화할 희생양 선정
safe state로 rollback하여 프로세스 시작
Starvation문제
동일한 프로세스 연속 희생양 선정
비용 요소에 rollback횟수 고려
Deadlock을 시스템이 책임지지 않음
대부분의 OS가 채택
매우 드물게 발생하므로 조치 자체가 더 큰 overhead라고 생각
만약 시스템에 deadlock이 발생한 경우 시스템이 비정상적으로 작동하는 것을 사람이 느낀 후 직접 process를 죽이는 방법 등으로 대체