In a multiprogramming environment, several processes may compete for a finite number of resources. A process requests resources; if the resources are not available at that time, the process enters a waiting state. Sometimes, a waiting process is never again able to change state, because the resources it has requested are held by other waiting processes. This situation is called a deadlock.
멀티 프로그래밍 환경에서, 프로세스들은 유한한 자원을 두고 경쟁한다. 이 때 프로세스 A가 자원 R을 요청했는데, 자원 R이 현재 이용 불가능하면 프로세스 A는 WAIT상태가 된다. 하지만 종종 자원 R이 다른 WAIT 상태에 있는 프로세스 B가 가지고 있는 상태라면 프로세스 A는 계속해서 WAIT 상태에 있게 되는데 이를 데드락이라고 한다.
데드락은 asleep(blocked) 상태에서 어떤 자원/Event를 기다리는데 일어날 가능성이 zero인 경우이다. 기아는 CPU를 할당 받기를 기다리는데 운이 없어서/우선순위가 밀려서 계속해서 기다리는 상황이다. 하지만 기아는 언젠가 해소될 가능성이 있다.
데드락은 위에서 보다시피 자원과 굉장히 밀접한 관련이 있다. 한번 자원에 대해 알아보도록 하자.
non-preemptible resources , exclusive allocation resources, serially reusable resources
(할당 단위는 영향을 미치지 않음)
CR을 대상으로 하는 데드락 모델-> 너무 복잡
밑에 4가지 조건은 데드락의 필요조건이기 때문에 모두 만족했다고 데드락이 발생하는 건 아닙니다. 4가지 조건을 만족하면 데드락이 발생할 수 있는 것입니다.
At least one resource must be held in a nonsharable mode; that is, only one process at a time can use the resource. If another process requests that resource, the requesting process must be delayed until the resource has been released.
Resources cannot be preempted; that is, a resource can be released only voluntarily by the process holding it, after that process has completed its task.
자원이 선점 불가능할 때입니다. 즉 해당 프로세스가 자발적으로 자원을 놓아줘야만 다른 프로세스가 그 자원을 이용할 수 있습니다.
A process must be holding at least one resource and waiting to acquire additional resources that are currently being held by other processes
말 그대로 욕심 쟁이.
프로세스와 자원의 요청을 그래프로 나타냈을 때 원형을 이루는 것.
다음 그림이 데드락인 이유
1. exclusive use of resources : 하나의 차가 소유한 공간(도로)는 공유 불가능
2. non - preemptible resource : 차가 공간을 내어주지 않는 이상 공간(도로)을 가질 수 없음
3. hold and wait : 각각의 차량은 자신의 공간을 가진 채 다른 차가 나오기를 기다리고 있음
4. circular wait : 원형!
4가지 발생 조건 중 하나를 없애면 된다. -> 그렇다면 데드락 발생할 일 없다
-> exclusive use of reosurce 조건 제거. 현실적으로 불가능
In general, however, we cannot prevent deadlocks by denying the mutual-exclusion condition, because some resources are intrinsically nonsharable.For example, a mutex lock cannot be simultaneously shared by several processes.
-> non preemptible resources 조건 제거. 현실적으로 불가능.
-> 유사한 방법으로, 프로세스가 할당 받을 수 없는 자원을 요청한 경우 기존에 가지고 있던 자원을 모두 반납하고 작업 취소.
이후 처음부터 다시 시작해야함 => 심각한 자원 낭비 발생(비현실적)
->hold and wait 조건 제거.
-> 자원 낭비 발생(필요하지 않은 순간에도 가지고 있음).
-> 다른 프로세스들은 무한 대기 현상 발생 가능
-> totally allocation을 일반화 한 방법
-> 자원들에게 순서 부여. 프로세스는 순서의 증가 방향으로만 자원을 요청 할 수 있도록 함. 마찬가지로 자원 낭비 발생.
프로세스들이 요청하는 모든 자원을, 데드락을 발생시키지 않으면서도 차례대로 모두에게 할당해줄 수 있는 상태라면 이것을 안정 상태에 있다고 말한다.
safe state
그리고 이처럼, 특정한 순서로 프로세스들에게 자원을 할당하고 실행, 종료 등의 작업을 할 때 데드락이 발생하지 않는 순서를 찾을 수 있다면, 그것을 안전 순서 라고 부른다.
unsafe state
가정)
1. 프로세스의 수가 고정됨
2. 자원의 종료와 수가 고정됨
3. 프로세스가 요구하는 자원 및 최대 수량을 알고 있음
4. 프로세스는 자원을 사용한 후 반드시 반납한다.
-> 1,2,3이 비현실적
-> 한 종류의 자원이 여러 개.
EX) 리소스 R이 10개 존재하고 ,3개의 프로세스 P1,P2,P3가 있을 때 MAX. Claim은 요구한 최대 자원의 수, Cur.Alloc은 현재 할당 받은 자원의 수, Additional Need는 추가로 필요한 자원의 수(Max. Claim - Cur.Alloc)
이 상황에서 현재 사용가능한 자원의 수는 2개이다. 따라서 P1에 먼저 자원을 할당하면 P1은 자원을 사용하고 Release 한다. 그렇게 되면 총 3개의 자원을 사용할 수 있고 P3에 자원 할당하면 그 다음에는 P4에 자원을 할당하면 된다.
-> 다익스트라 확장
-> 다양한 종류의 자원에 적용
장점: 데드락의 발생을 막을 수 있음.
단점:
-> 오버헤드가 너무 큼(계속 해서 감시해야함)
-> safe state 유지를 위해, 사용 되지 않는 자원이 존재
-> not practical..
• An algorithm that examines the state of the system to determine whether a deadlock has occurred.
• An algorithm to recover from the deadlock
데드락 탐지와 리커버리 방식의 시스템은 데드락 탐지 알고리즘과 리커버리 알고리즘을 제공한다.
- 주어진 RAG에서 edge를 하나씩 지워가는 방법
- Completely reduced
• 모든 edge가 제거 됨
• Deadlock에 빠진 프로세스가 없음
- Irreducible
• 지울 수 없는 edge가 존재
• 하나 이상의 프로세스가 deadlock 상태
Deadlock이 아닌 상태 -> 모든 edge가 제거 됨
Deadlock인 상태 -> 일부 edge가 남음
데드락 탐지 알고리즘은 그럼 언제 사용해야 하나? 이 답은 두 질문에 답에 따라 달라진다.
1. How often is a deadlock likely to occur?
2. How many processes will be affected by deadlock when it happens?
데드락 탐지 알고리즘은 비용 측면에서 비싸기 때문에 언제 데드락 탐지를 할지 또한 중요하다.
ex) 한 시간에 한 번, CPU 사용률이 40프로 미만일 때 등
-> cost model 사용(누굴 terminate할까?)
-> 우선순위 ,종류, 총 수행 시간, 남은 수행 시간, 종료 비용 등을 고려
ex) lowest-termination cost process first
-> simple, low overhead O(p), 불필요한 프로세스들이 종료될 가능성 있음
ex) minimum cost recovery
-> 최소 비용으로 deadlock 상태를 해소 할 수 있는 process 선택=>모든 경우의 수 고려
-> 복잡함. high overhead - O(2^p)
-> 종료된 애들은 처음부터 수행해야함-> 자원 낭비임.
종료된 애들을 어떻게 효율적으로 다시 실행시킬 것인가? checkpoint 사용
출처
OS System CPA310 강의
공룡 책