IT지식/Computer Science

프로세스 교착상태의 원인과 해결방법

맨땅에헤딩개발자 2025. 1. 30. 23:29

교착상태(deadlock)

 

두 개 이상의 프로세스가 자원을 점유한 상태에서 서로가 점유한 자원을 서로에게 요구하고 있어

그 프로세스들이 무한정 기다리고 있는 상태를 의미합니다.

 

 

교착상태의 4가지 필요요건

 

1. 상호배제(Mutual exclusion)

- 한 리소스는 한 번에 한 프로세스만이 사용할 수 있다.

- 사용중인 자원을 다른 프로세스가 사용하려면 요청한 자원이 해제될 때 까지 기다려야 한다.

 

2. 점유와 대기(Hold and wait)

- 특정 프로세스가 점유한 자원을 다른 프로세스가 요청하며 대기하는 상태입니다.

 

3. 비선점(No preemption)

- 이미 할당된 자원을 강제로 빼앗을 수 없다.

- 프로세스가 task를 마친 후 리소스를 자발적으로 반환할 때 까지 기다려야 한다.

 

4. 환형 대기(Circular wait)

- 서로 다른 프로세스가 서로의 자원을 요구하고있는 즉, 환형 모양의 대기 상태를 말합니다.

 

* 위 4가지 모두 충족되어야 교착상태가 일어날 수 있습니다. 하나라도 제외되면 교착상태는 일어날 수 없습니다.

 

 

교착상태 해결방법

 

1. 데드락이 발생하지 않도록 예방하기

2. 데드락 발생 가능성을 인정하면서 적절하게 회피하기

3. 데드락 발생을 허용하지만 데드락을 탐지하여 데드락에서 회복하기

 

 

* 예방(Prevention)

- 교착상태 필요요건 4가지 중 하나라도 제거함으로 써 교착상태를 방지한다.

- 자원낭비가 가장 심한 방법이다.

 

* 회피(Avoidance)

- 교착상태가 발생할 가능성을 염두에 두고 발생 시 적절히 피해나가는 방법이다.

- 리스소 할당 측면에서 교착상태가 발생할 가능성이 있는 자원 할당을 하지 않는다.

- 주로 *은행원 알고리즘이 사용된다.

 

* 탐지(Detection)

- 교착 상태가 발생할 수 있도록 놔두고 교착상태가 발생하면 찾아내어 고치는 방법이다.

- 교착상태 발생 알고리즘과 자원 할당 그래프를 이용한다.

 

* 회복(Recovery)

- 교착 상태의 프로세스 강제중지

- 교착 상태가 제거될 때 가지 한 프로세스씩 중지

- 교착 상태가 필요로 하는 자원을 강제로 가져옴

 

 

 

** 은행원 알고리즘이란?

 

다익스트라가 제안한 기법으로, 은행에서 모든 고객의 요구가 충족되도록 현금을 할당하는데서 유래한 기법

각 프로세스에게 자원을 할당하여 교착 상태가 발생하지 않으며 모든 프로세스가 완료될 수 있는 상태는 안전상태,

교착 상태가 발생할 수 있는 상태는 불안전 상태라고 한다.

은행원 알고리즘을 적용하기 위해선 자원의 양과 사용자(프로세스) 수가 일정해야 하고 프로세스의 모든 요구를

유한한 시간안에 할당하는 것을 보장한다.

 

 

 

출처 - https://velog.io/@ejung803/%EA%B5%90%EC%B0%A9%EC%83%81%ED%83%9C%EC%99%80-%EA%B5%90%EC%B0%A9%EC%83%81%ED%83%9C-%ED%95%B4%EA%B2%B0%EB%B0%A9%EB%B2%95