데드락이란 ?

 

'교착 상태' 라고도 하며 , 한정된 자원을 여러 곳에서 사용하려고 할 때 발생할 수 있다.

 

데드락이 발생할 수 있는 경우

 

 

- 멀티 프로그래밍 환경에서 한정된 자원을 사용하려고 프로세스가 서로 경쟁하는 상황이 발생할 수 있다.

 

- 어떤 프로세스가 자원을 요청 했을 때 ,그 자원이 현재 사용할 수 없다면, 프로세스는 대기 상태로 들어간다.

 

- 대기 상태로 들어간 프로세스들이 실행 상태로 변경될 수 없을 때 , 이러한 상황을 데드락(교착 상태) 라고 한다.

 

데드락의 발생 조건

데드락은 한 시스탬 내에서 다음 4가지 조건이 동시에 성립할 때 발생하며, 따라서 아래의 네가지 조건 중

하나라도 성립하지 않도록 한다면 데드락을 해결할 수 있다.

 

1. 상호 배제 - 자원은 한번에 한 프로세스 만 사용할 수 있어야 한다.

 

2. 점유 대기 - 프로세스가 할당된 자원을 가진 상태에서 다른 자원을 기다린다.

 

3. 비선점 - 프로세스가 어떤 자원의 사용을 끝낼 때까지 그 자원을 뺏을 수 없다.

 

4. 순환 대기 - 각 프로세스는 순환적으로 다음 프로세스가 요구하는 자원을 가지고 있다.

 

데드락의 처리

 

크게 3가지 방법으로 나눌 수 있다.

 

1. 교착 상태 예방 및 회피 - 교착상태가 되지 않도록 보장하기 위하여 교착 상태를 예방하거나

회피하는 프로토콜을 이용하는 방법

 

2. 교착 상태 탐지 및 회복 - 교착상태가 되도록 허용한 후 회복 시키는 방법

 

3. 교착 상태 무시 - 대부분의 시스템은 교착 상태가 잘 발생하지 않으며, 교착 상태 예방, 회피, 탐지 , 복구는 많은

비용이 든다.

 

교착 상태 예방

 

교착 상태 발생 조건 중 하나를 제거함으로써 해결한다. 자원 낭비가 심하다.

 

1. 상호 배제 부정 - 여러 개의 프로세스가 공유 자원을 사용할 수 있도록 한다.

 

2. 점유 대기 부정 - 프로세스가 실행 되기 전 필요한 모든 자원을 할당한다.

 

3. 비선점 부정 - 자원을 점유하고 있는 프로세스가 다른 자원을 요구할 때 점유하고 있는 자원을 반납하고,

요구한 자원을 사용하기 위해 기다리게 한다.

 

4. 순환 대기 부정 - 자원에 고유한 번호를 할당하고, 번호 순서대로 자원을 요구하도록 한다.

 

교착 상태 회피

 

- 교착 상태가 발생하면 피해나가는 방법.

 

 - 은행원 알고리즘

 

 

교착 상태로부터 회복

 

- 교착 상태를 일으킨 프로세스를 종료하거나 , 할당된 자원을 해제함으로써 회복한다.

 

1. 교착 상태의 프로세스를 모두 중지하거나,

 

2. 교착 상태가 제거될 때 까지 한 프로세스 씩 중지한다.

 

참고 블로그

https://includestdio.tistory.com/12

https://blog.lael.be/post/1304

+ Recent posts