study/CS study
Deadlock 2
It's Hyeeun Time
2021. 10. 20. 22:59
Deadlock Avoidance(예방적 방법)
- 최대로 사용할 자원을 미리 선언 => deadlock 가능성 판단하여 자원 할당 결정
자원이 하나일 때
자원이 여러 개 일 때
- 위의 예제
- 다섯 개의 프로세스
- 세 개의 자원
- Allocation: 현재 할당된 개수
- Max: 자원을 최대로 쓸 때의 수
- Available: 남아있는 자원의 수
- ⭐Need와 Available을 비교해서 자원 할당 결정⭐
- 최악의 경우를 가정하는 것(최대 요청을 가정하고, 가용 자원으로 처리가 가능한지를 확인)
- P0의 요청은 무조건 거절 / P1의 요청은 무조건 수락
- 데드락이 생기지 않는 상태 = safe state
- deadlock은 발생하지 않지만, 비효율적
- 가용 자원만 가지고 처리가 안 되는 요청이 있다고 해서 deadlock은 아니라는 것!
Deadlock Ignorance
- deadlock를 미연에 방지하기 위해 비효율적인 방법을 쓰느니, 상황이 이상해지면 deadlock을 확인하고 해결하는 법
- 사이클을 찾는데 걸리는 시간 : O(n^2) cf. dfs/bfs
Deadlock Detection
자원이 하나인 경우
- 프로세스끼리 연결하여 간결하게 작성 후 사이클 확인
- P1 <- P4 : P4는 P1이 가진 자원을 기다리고 있다
자원이 여러 개인 경우
- 설명
- 프로세스 5개
- 자원은 3종류 : A(7) / B(2) / C(6)
- Request: 요청
- deadlock인지 확인하는 법
- 낙관적으로 확인하기 : P0와 P2는 요청이 없기 때문에 자원을 반납할 것이다.
- Available => A(3) / B(1) / C(3)
- 현재는 Deadlock이 없음
자원이 여러개인 경우 2. if P2의 request가 있다면?
- Deadlock
- 가용자원으로 요청 처리가 가능한 게 있는지를 확인
Deadlock Recovery
Process termination
데드락에 연관된 모든 프로세스를 죽임(프로세스를 종료시키는 것🚧)
Resource Preemption
데드락과 관련된 프로세스를 하나씩 죽여봄(자원을 빼앗는 것🎈)
- A라는 프로세스에서 자원을 뺏어 deadlock을 없앴는데 A가 자원을 재요청한다면 같은 문제 반복 가능 => 자원을 빼앗는 패턴을 조금씩 다르게 함 Deadlock Avoidance(예방적 방법)