[OS] 7장 - Deadlock
반효경 교수님의 운영체제 강의를 참고하였습니다.
(https://core.ewha.ac.kr/publicview/C0101020140318134023355997?vmode=f)
일련의 프로세스들이 서로가 가진 자원을 기다리며 block된 상태
- Resource
- 하드웨어, 소프트웨어 등을 포함하는 개념
- ex) I/O devices, CPU cycle, memory space, semaphore
- 프로세스가 자원을 사용하는 절차
- Request, Allocate, Use, Release
데드락이 발생하는 4가지 조건
- Mutual exclusion(상호 배제)
- 매 순간 하나의 프로세스만이 자원을 사용할 수 있음
- No preemption(비선점)
- 프로세스는 자원을 잠깐 내어놓을 뿐 강제로 빼앗기지 않음
- Hold and wait(보유대기)
- 자원을 가진 프로세스가 다른 자원을 기다릴 때 보유 자원을 놓지 않고 계속 가지고 있음
- Circular wait(순환대기)
- 자원을 기다리는 process간에 사이클 형성
Resource-Allocation Graph(자원할당 그래프)
- Vertex
- Process Pi
- Resource Rj
- Edge
- Request edge Pi → Rj
- assignment edge Rj → Pi
deadlock 발생O
deadlock 발생
- 그래프에 cycle이 없으면 deadlock이 아니다.
- 그래프에 cycle이 있으면
- 자원당 인스턴스가 하나밖에 없으면 데드락임
- 자원당 여러인스턴스일때, 데드락이 발생할 수 있음
Deadlock의 처리 방법
- Deadlock Prevention
- 자원 할당 시 Deadlock의 4가지 필요조건 중 어느 하나가 만족되지 않도록 하는 것
- Mutual Exclusion
- 무조건 성립해야 함
- Hold and Wait
- 프로세스가 자원을 요청할 때 다른 어떤 자원도 가지고 있지 않아야 함
- 방법1 : 프로세스 시작시 모든 필요한 자원을 할당
- 방법2 : 자원이 필요한 경우 보유 자원을 모두 놓고 다시 요청
- No Preemption
- 자원을 preemption할 수 있도록 처리
- Circular Wait
- 자원 유형에 할당 순서를 정하여 정해진 순서대로만 자원 할당
- Mutual Exclusion
- 이 모든 것은 Utilization 저하, Throughput 감소, Starvation 문제 발생
- 자원 할당 시 Deadlock의 4가지 필요조건 중 어느 하나가 만족되지 않도록 하는 것
- Deadlock Avoidance
-
자원 요청에 대한 부가적인 정보를 이용해서 deadlock의 가능성이 없는 경우에만 자원 할당
-
시스템 state가 원래 state로 돌아올 수 있는 경우에만 자원 할당
-
2가지 경우의 알고리즘
- Single instance per resource types
- Resource Allocation Graph algorithm 사용
- 점선 : process가 resource를 사용할 가능성
- Multi instances per resource types
- Banker’s Algorithm 사용
- 요청할 수 있는 양이 Available 보다 적어야 하고 동시에 Available은 Need보다 커야함
- 즉 P0가 request(0, 2, 0)을 했을 때 Available에서는 줄 수 있지만 Available이 Need보다 적기 때문에 할당하지 않는다(언제 Need만큼 요청할지 모르니까)
- Single instance per resource types
-
가용 자원을 준다고 deadlock이 되진 않지만 최악의 상황을 피하기 위해 safe한 상태를 유지하는 것
-
- Deadlock Detection and recovery
- Deadlock 발생을 허용하되 그에 대한 detection루틴을 두어 deadlock 발생시 recovery
- 얼마 일어나지도 않는 deadlock을 위해 자원을 투자하지 않고 발생하면 처리하겠다는 방법
-
Resource Allocation Graph
-
Resource type당 single instance인 경우
- 자원할당 그래프에서의 cycle이 곧 deadlock을 의미
-
-
Corresponding wait-for graph
- Resource type 당 single instance인 경우
- Wait-for graph
- 자원할당 그래프의 변형
- 프로세스만으로 node 구성
- Pj가 가지고 있는 자원을 Pk가 기다리는 경우 Pk → Pj
- Algorithm : O(N^2) → Cycle을 찾는 시간
-
Resource type 당 multiple instance인 경우
- P1이 R(2,0,2)를 요청하는데 반납할 자원이 P0 뿐인데 B(1)만 반납을 한다. 그러면 이 때 처리 가능한게 없으므로 deadlock이 발생한다고 본다.
-
Recovery 방법
- Process termination
- Process를 전부 죽임
- Process를 하나씩 죽임(데드락이 풀릴 때 까지)
- Resource Preemption
- 비용을 최소화할 victim 선점
- safe state로 rollback하여 process를 restart
- Starvation 문제
- 동일한 프로세스가 계속해서 victim으로 선정
- cost factor에 rollback 횟수도 같이 고려
- Process termination
-
- Deadlock Ignorance
- 시스템이 deadlock을 책임지지 않음
- UNIX를 포함한 대부분의 OS가 채택
- 사용자가 직접 process를 죽이는 등으로 대처