OS

Deadlock

sshhhh 2024. 10. 28. 03:35

Deadlock

- 해결법 x

- 두개 이상의 프로세스가 상대방이 가진 자원을 가지고자 함

- 자원을 가지려고 무한정 기다림 그런데 블락되어있기 때문에 영원히 아무것도 못함 -> 기아 현상

- os는 비용이 많이 들기 때문에 데드락을 무시함

- 데드락의 자원은 상호배타적임 즉 독점적으로 자원을 사용함

 

 

Resource Allocation Graph

- cycle이 존재시 데드락 발생 가능성 O

- 하나의 인스턴스를 가지는 자원이 있다면 데드락 무조건 발생, 여러개면 데드락 가능성 있음

- 즉 사이클이 없으면 데드락이 없음 

 

발생 조건 4가지

 

1. 상호 배제 Mutual Exclusion

- 독점 사용, 한 프로세스만이 그 자원 사용

 

2. 점유하며 대기 Hold and Tight

- 하나의 자원을 가지면서 다른 프로세스가 가진 자원을 더 가지려고 기다림

 

3. 비선점 No-Preemptive

- 자원을 강제로 뺏을 수 없음, 자발적으로 반납해야함

 

4. Circular wait 순환 대기

 

 

발생조건 해결 방법

1. deadlock prevention

 

1. 상호 배제 Mutual Exclusion

- 해결방법 없음 자원의 속성을 바꾸기는 힘듬

 


2. 점유하며 대기 Hold and Tight

- 자원이 없을때만 요청

- 프로세스가 필요로 하는 자원을 한거번에 모두 요구

- 실패시 대기

 

*문제 : 당장 쓰지도 않는 자원을 다 요청한다면 다른 프로세스가 자원이 부족해서 실행 못할 수 있음

           -> 낮은 자원이용도, 기아상태 발생

 

3. 비선점 No-Preemptive

- 프로세스가 자원을 요청할때 요청된 자원이 즉시 할당되지 않으면(wait 상태가 되면)

  자기가 가진 자원을 모두 자진해서 반납 -> 그 자원은 다른 프로세스가 사용

 

*문제 : 진행했던 작업이 무효화 됨

 

4. Circular wait 순환 대기

- 자원의 순서를 정해서 순서대로 요청 (오름차순으로만 요청함 역방향x , circular 끊어버림)

 

 

<<<<데드락 prevention의 단점>>>>

1. 장치 이용률 낮아짐

2. 시스템 처리율 낮아짐

3. 프로세스가 기아상태에 빠질 수 있음

4. 비용 높고 자원낭비

 

>>장점은 데드락이 절대 발생하지 않음<<

 

2.deadlock avoidance

- 프로세스가 자원을 요청할 때 사전 정보를 이용하여 안전 상태(safe state)를 유지하는 방법

- 사전 정보 -> 데드락을 회피하기위한 프로세스 정보 있어야함

- 시스템을  safe 상태로만 유지할것, unsafe 상태로 들어가지 못하게 보장

 

<safe state>

- 모든 프로세스가 완료될 수 있는 자원의 할당 순서를 보장하는 상태

-  safe sequence : 남아있던 자원을 차례로 몰아주고 -> 끝 -> 반납, 이것을 반복해서 나오는 순서

- 시스템이 safe state라면 모든 프로세스의 safe sequence가 존재해야함

 

 

장점 : 데드락 발생 막아짐, 롤백필요없음. 자원할당이 prevention에 비해 자유로움

단점 : 높은 시스템 오버헤드, 낮은 자원 활용도, 최대 자원 요구량을 os에 미리 알려줘야함