본문 바로가기
CONCEPT/OS

[OS] 교착상태 - 발생조건 4가지 / 해결방법 4가지

by 1005 2025. 3. 17.

 

* 교착상태: 일어나지 않을 사건을 기다리며 진행이 멈춰 버리는 현상

자원 A,B를 게임과 웹 브라우저 모두 사용하려고 기다리는 상태임. 게임은 A자원을 웹 브라우저는 B자원을 가지고 있어 서로의 자원을 무작정 기다리는 현상이 발생함.
위 상황을 "자원 할당 그래프"로 표현한 그림 (그래프가 원의 형태라면 교착상태가 일어난 것)


 

교착 상태를 해결하기 위해서는?

첫째, 교착 상태가 발생했을 때의 상황을 정확히 표현해보기

 

 

 

사용할 수 있는 자원이 SSD는 3개 있고 CPU는 2개 있고 프린터는 1개 있다. 프로세스A는 SSD 하나를 할당받아서 사용 중이고 프로세스 B,C는 각각 CPU를 할당받아서 사용 중이고 프로세스D는 프린터를 할당받았다. 프로세스E는 프린터의 사용을 기다리고 있고 프로세스F는 CPU의 할당을 기다리고 있다.

 

 

 

 

둘째, 교착 상태가 일어나는 근본적인 이유 이해하기

 

상호 배제 Mutual Exclusion,  점유와 대기 Hold and Wait,  비선점 Non-preemption,  원형대기 Circular Wait



 

 

 

이론적으로는 가능하지만 현실적인 방법은 아님.

 

 

 

어떤 프로세스한테 자원을 모두 할당하거나 아니면 아예 할당하지 않거나 이런 방식으로 배분을 해준다면, 지금 당장 자원이 필요한데 활용되지 못하는 프로세스가 있을 수 있고 할당을 받지 못해서 오랫동안 대기해야되는 프로세스도 있을 수 있다. 특정 프로세스한테 모든 자원을 다 할당을 했는데 자원의 일부만 사용한다면 해당 프로세스가 안쓴 자원은 그거대로 낭비라서 자원 활용률이 낮아지는 부작용이 있다.

 

 

 

선점이 가능한 자원에 대해서는 효과적이지만 범용적인 방법은 못된다. 프린트와 같이 프로세스A(나무 그림)가 선점하여 작업을 하다가 마감을 못하고 프로세스B(개 그림)에게 넘겨졌을 때 작업 결과물이 엉망인 경우(나무와 개가 섞인 그림)가 생길 수 있다.

 

 

 

가장 현실적이고 실용적인 방식지만 이 역시도 단점이 있다.


교착 상태 회피를 사용할 시에는 꼭 "안전 순서열"이 필수조건임.

 

 

 

 

 

(예시- 안전순서열O = 안전 상태)

안전 순서열이 존재: P2 -> P1 -> P3

 

 

 

 

(예시- 안전순서열X = 불안전 상태)


 

교착상태를 회복하는 두가지 방식


교착상태가 아주 드물게 발생한다면 잠재된 문제를 그냥 무시해버리자는 태도, 문제 발생의 빈도수나 심각성에 따라서 최대 효율을 추구하는 엔지니어의 입장에서 이 방식이 적합할 때도 있음.

댓글