[OS][Deadlock] Characterization, Prevention, Avoidance, Detection, Recovery
[목차]
Deadlock
Deadlock Characterization
Methods for Handling Deadlocks
Prevention
Avoidance
single - ResouceAllocation Algorithm
multi - Banker's Algorithm
Detection
single - Wait for graph
multi
Recovery
Kill
Rollback
Deadlock(교착 상태)
- process가 resource를 얻지 못해 진행이 안되는 상태
- 두 개 이상의 작업이 중지되고 각각 사용할 수 있는 자원을 기다리는 경우
- 서로 원하는 resource가 상대방에게 할당되어 있기 때문에 두 process는 무한정 기다림
- ex) 외나무 다리 양쪽에서 자동차(Process)가 만난 상황, 서로 양보할 수 없음
- Recovery 방법 1) Kill the process
- Recovery 방법 2) Roll back => 자동차를 뒤로 후진시킴
- Prevention ) 원천적인 원인 제거(애초에 이런 상황을 만들지 X)
Deadlock Characterization
: Deadlock이 발생하려면 이 4가지 특성이 동시에 만족해야 함(필요조건)
1) Mutual Exclusion (상호 배제)
- resource은 한 번에 한 process만 사용할 수 있어야 함.
- 다른 process가 그 자원을 요청하면 해당 process는 그 resource가 해제될 때까지 기다려야 함.
(이렇게 무한정 기다리다가 데드락...)
2) Hold and Wait (점유 대기)
- 최소한 하나의 resource를 점유하고 있으면서, 현재 다른 process에 할당된 resource을 추가로 점유하기 위해 대기하는 process가 있어야 한다.
3) No preemtion (비선점)
- 자원을 선점할 수 없으며, 해당 자원을 Hold(점유)하고 있는 프로세스가 종료되어야 그 자원이 해제될 수 있다.
- 즉, 다른 프로세스에 할당된 자원은 사용이 끝날 때까지 기다려야 함.(강제로 뺏을 수 없음!!)
4) Circular wait (순환 대기)
- 핵심 조건
- 자원할당 그래프에서 cycle이 존재해야 함.
- 프로세스의 집합 {P0, P1, ,…Pn}에서 P0은 P1 holding resource를 대기하고 P1은 P2 holding resource를 대기하고 … Pn-1은 Pn holding resource를 대기하며 Pn은 P0의 holding resource를 요구해야 한다.
=> P1은 R1을 hold하고 있으면서 R2를 대기하고, P2는 R2를 hold하고 있으면서 R1을 대기함
만약 자원 할당 그래프에 cycle이 없다? => No Deadlock
만약 자원 할당 그래프에 cycle이 있다?
=> 만약 resource type의 instace가 1개 존재하면 Deadlock
=> 만약 resource type의 instace가 여러 개 존재하면 Deadlock 가능성이 있다
QUIZ) CPU 자원은 Deadlock이 발생할까?
정답) No!! CPU 자원은 preemtion 할 수 있다
Methods for Handling Deadlocks (데드락 처리 방법)
- Deadlock이 일어나지 않도록 Prevention or Avoidance (Overhead 크다)
- Deadlock이 발생하는 것을 막진 않지만 Detection and Recovery ( Deadlock 허용 > 복구 )
- Deadlock이 발생한든 말든 신경 쓰지 X
Deadlock Prevention
: 위에서 말한 Deadlock 4가지 특성을 동시에 만족하지 않도록! 즉, 하나라도 성립하지 않도록
1) Mutual Exclusion (상호 배제) 부정
- 원래는, 자원으로 서로 동시에 사용하지 못하도록 하는 것
- 그러므로 상호 배제를 허용하지 않으면 자원을 공유할 수 있다.
- (( 만약 공유 불가능한 자원 자체가 존재하는 경우 공유 가능하도록 만들어 주는 것이 불가능 즉, 실행불가 ))
- 여러 개의 프로세스가 공유 자원을 사용할 수 있도록 한다.
2) Hold and Wait (점유 대기) 부정
- 프로세스가 실행되기 전 필요한 모든 자원을 할당한다.
3) No preemtion (비선점) 부정
- 원래는, 점유하고 있는 자원을 프로세스가 스스로 반납하기 전까지 회수 X
- 프로세스가 필요한 자원을 가진 프로세스로부터 그 자원을 선점할 수 있도록 한다.
- But, 뺏긴 프로세스의 실행이 지연될 수 있음 (Starvation)
- 자원을 점유하고 있는 프로세스가 다른 자원을 요구할 때 점유하고 있는 자원을 반납하고, 이전에 사용하던 자원들과 할당을 요청한 자원을 모두 할당받았을 때만 다시 프로세스 수행 가능
4) Circular wait (순환 대기) 부정
- 자원에 고유한 번호를 할당하고, 번호 순서대로 자원을 요구하도록 한다.
Deadlock Prevention은 자원의 활용도가 떨어지고 시스템 성능이 안좋아질 수 있음
Deadlock Avoidance
: Deadlock 발생하면 피해가는 방법
- Deadlock Avoidance는 사전 정보가 있어야 함
- 사전 정보: 이용 가능한 자원의 수, 프로세스가 최대로 요구하는 자원의 수, 할당된 자원의 수
- 이 알고리즘은 Resource-Allocation State를 동적으로 검사하여 Circular wait 상태가 만들어지지 않도록 한다.
- Safe 상태 : Deadlock이 발생하지 않을 수 있는 상태, Unsafe로 넘어가지 않도록 해야 함
- Unsafe 상태 : Deadlock이 발생할 가능성이 있다.
Safe State
- process가 사용가능한 resource를 요청할때, 즉시 할당이 시스템을 safe 상태로 유지하는지 여부 결정
- process에 필요한 resource가 즉시 사용 불가할 경우, 모든 프로세스가 끝날 때까지 기다릴 수 있음
- Safe Sequence가 하나라도 존재하면 Safe State
- 자원을 필요로 하는 프로세스들에게 자원을 할당해주는 순서
=> 이 예시에서 Safe Sequence : P1, P0, P2
Resource Allocation Graph
Single instance of a resource type. Use a resource-allocation graph
자원의 instance가 하나라면 resource allocation graph로 가능
- R2 자원을 P1, P2가 차후에 요청할 때 만약 여기서 P2에게 할당을 해주면 오른쪽처럼 cycle이 생겨 Deadlock 상태에 빠질 수 있다.
- R2를 P1에게 먼저 할당을 해주고 P1이 작업을 완료하고 R1과 R2를 반납하면 반납된 자원으로 P2가 작업을 수행하고 완료할 수 있다.
- 여기서 Safe Sequence는 P1, P2이다.
- 이렇게 자원의 instance가 하나라면 자원 할당 그래프로 Safe Sequece를 찾을 수 있다.
Banker's Algorithm (은행원 알고리즘)
n Multiple instances of a resource type. Use the banker’s algorithm
자원의 instance가 여러 개라면 Banker's Algorithm 사용
why 은행원 알고리즘?
- 은행은 고객들을 일정한 순서에 의해서 모든 고객들의 요청을 들어준다.
- 프로세스가 자원을 요청할 때 시스템은 자원을 할당한 후에도 safe state로 남아있게 되는지를 사전에 검사하여 deadlock 회피하는 기법
- safe state면 자원 할당, 그렇지 않으면 다른 프로세스들이 자원을 해지할 때까지 대기
- 사전 정보
- Available : 사용 가능한 자원의 수
- Max : 최대로 할당할 수 있는 자원의 수
- Allocation : 이미 할당된 자원의 수
- Need : Max - Allocation
Deadlock Detection
- Deadlock이 발생한 후 복구하는 방법
- Instance 하나일 때 사용
- Wait-for-Graph cf) Resource Allocation Graph
=> Resource-Allocation Graph에서는 자원을 소유하고 있는 상황도 표현했지만
Wait-for Graph에서는 단순히 프로세스가 다른 프로세스가 끝나고 자원 반납을 기다리는 상황만 표현
cycle이 존재한다면 현재 Deadlock 상태
- Instance 여러 개 일 때 사용
- Banker's Algorithm과 유사
- 차이점
- In deadlock avoidance,
- Need(Banker's Algorithm) = Max - Allocation
- 요청은 하지 않아도 궁극적으로 작업을 끝내기 위해 필요한 자원의 양
- In deadlock detection,
- Request : 현재 특정 자원을 요청한 상황
- In deadlock avoidance,
- 차이점
- Banker's Algorithm과 유사
Deadlock Recovery
- detection algorithm이 deadlock 존재한다고 판단했을 때의 대안
- 1) operator에게 inform하고 수동으로 처리
- 2) 시스템이 자동으로 복구되도록
- Kill
- Rollback (특정 지점인 check point까지)
Kill
- 어떤 프로세스를 kill(termination)할지
- deadlock된 모든 process 중단
- deadlock cycle이 없어질 때까지
- deadlock 상태가 제거될 때까지 한 process씩 중단
- Partial termination을 사용할 경우, 어떤 process를 종료해야하는지 결정
- procesㄴ 우선순위, resource 필요 정도 등....
Rollback
- victim 선택 => minimize cost
- Roll back => safe state로 돌아가서 해당 process restart
Reference
Operating System Concepts 10th Edition