//구글콘솔 광고 추가가
교착 상태란?

일어나지 않을 사건을 기다리며 진행이 멈춰 버리는 현상.

교착 상태를 해결하기 위해서는?
  1. 교착 상태가 발생했을 때의 상황을 정확하게 표현해 보기
  2. 교착 상태가 일어나는 근본적인 이유 이해하기.
1. 교착 상태가 발생했을 때의 상황을 정확하게 표현해 보기 - 그래프를 그려보자

자원 할당 그래프
: 교착 상태가 발생했을 때의 상황을 표현하기 위한 그래프
>>교착 상태 발생 조건 파악 가능
- 어떤 프로세스가 어떤 자원을 할당받아 사용 중인지 확인 가능.
- 어떤 프로세스가 어떤 자원을 기다리고 있는지 확인 가능.

교착상태가 일어난 그래프의 특징은 자원 할당 그래프가 원의 형태를 띄고 있다.
2. 교착 상태가 일어나는 근본적인 이유 이해하기.

교착 상태가 발생할 4가지 조건

1. 상호 배제 : 한 프로세스가 사용하는 자원을 다른 프로세스가 사용할 수 없는 상태
2. 점유와 대기 : 자원을 할당받은 상태에서 다른 자원을 할당받기를 기다리는 상태
3. 비선점 : 어떤 프로세스도 다른 프로세스의 자원을 강제로 빼앗지 못하는 상태
4. 원형 대기 : 프로세스들이 원의 형태로 자원을 대기하는 상태

위 네 가지 조건 중 하나라도 만족하지 않으면 교착 상태가 발생하지 않음.
위 네가지 조건을 모두 만족하면 교착 상태가 발생할 수 있음.
교착 상태 해결 방법 4가지.
예방, 회피, 검출 후 회복.

교착 상태 예방 애초에 교착 상태가 발생하지 않도록 교착 상태 발생 조건(상호배제, 점유와 대기, 비선점, 원형 대기)중 하나를 없애버리기
>> 교착 상태가 발생하지 않음은 보장할 수 있으나 부작용이 따르는 방식.
상호배제 없애기 모든 자원을 공유 가능하게 만들기 >> 이론적으론 가능하지만 현실적으로 ㄴㄴ
점유와 대기 없애기 특정 프로세스에 자원을 모두 할당하거나, 아예 할당하지 않는 방식으로 배분
>> 자원의 활용률을 낮출 수 있는 방식이라 부작용이 있음.
비선점 조건 없애기 선점이 가능한 자원(e.g. CPU)에 한해 효과적
>> 모든 자원이 선점 가능한 것은 아니다.
원형 대기 조건을 없애기 자원에 번호를 붙이고 오름차순으로 할당하면 원형 대기는 발생하지 않음
>> 자원에 번호를 붙이는 것은 어려운 작업, 어떤 자원에 어떤 번호를 붙이느냐에 따라 활용률이 달라짐.
교착 상태 회피 - 교착 상태를 무분별한 자원 할당으로 인해 발생했다고 간주
- 교착 상태가 발생하지 않을 만큼 조심히 할당하기
- 배분할 수 있는 자원의 양을 고려하여 교착 상태가 발생하지 않을 만큼만 자원 배분
안전 순서열 교착 상태 없이 안전하게 프로세스들에 자원을 할당 할 수 있는 순서
안전 상태 교착 상태 없이 모든 프로세스가 자원을 할당 받고 종료될 수 있는 상태
- 안전 순서열이 있는 상태
불안전 상태 교착 상태가 발생할 수도 있는 상태
- 안전 순서열이 없는 상태
- 안전 상태에서 안전 상태로 움직이는 경우에만 자원을 할당하는 방식
- 항시 안전 상태를 유지하도록 자원을 할당하는 방식
- c.f. 은행원 알고리즘 

교착 상태 검출 후 회복 - 교착 상태의 발생을 인정하고 사후에 조치하는 방식
- 프로세스가 자원을 요구하면 일단 할당, 교착 상태가 검출되면 회복
- 선점을 통한 회복, 프로세스 강제 종료를 통한 회복 
선점을 통한 회복 - 교착 상태가 해결될 때까지 한 프로세스씩 자원을 몰아주는 방식
프로세스 강제 종료를 통한 회복 - 교착 상태에 놓인 프로세스 모두 강제종료(>> 작업 내역을 잃을 위험)
- 교착 상태가 해결될 때까지 한 프로세스씩 강제종료(>> 오버헤드)

 

++교착 상태 무시 ( == 타조 알고리즘) : 문제가 발생했을 때 무시해 버리는 방법.

728x90

+ Recent posts