[운영체제] 13-2 교착 상태 해결 방법
이 글을 혼자 공부하는 컴퓨터구조 + 운영체제 (한빛미디어) 책을 읽고 혼자 공부한 내용입니다.
잘못 이해한 부분이 있을 수 있고, 문제가 있는 부분 댓글로 알려주시면 수정하겠습니다.
교착 상태 예방
교착 상태 발생 필요 조건 중 하나를 충족하지 못하게하는 방법
상호 배제를 없앤다?
이 말은 모든 자원을 공유 가능하게 만든다는 말과 같음
이론적으로는 가능하나 현실적으로는 다소 무리가 있음
점유와 대기를 없애면?
특정 프로세스에 자원을 모두 할당학나, 아예 할당하지 않는 방식으로 배분
자원의 활용률이 낮아질 우려가 있음 (많은 자원을 사용하는 프로세스가 불리, 타이밍 확보가 어려워서 -> 기아현상)
비선점 조건을 없애면?
자원을 이용 중인 프로세스부터 해당 자원을 뺏을 수 있음
cpu-cpu에서는 효과적일 수 있지만, cpu-프린터기라고 생각한다면 어려움
다소 범용성이 떨어짐
원형 대기 조건을 없애면?
모든 자원에 번호를 붙이고, 오름차순으로 자원을 할당하면 됨
하지만 모든 자원에 번호를 붙인다는 것은 간단한 작업이 아니고, 특정 자원의 활용률이 떨어질 수 있음
이렇듯 예방 방식은 교착 상태가 발생하지 않음을 보장할 수는 있지만 여러 부작용이 따름
교착 상태 회피
교착 상태가 발생하지 않을 정도로만 조심 조심 자원을 할당하는 방식
여기서는 교착 상태를 한정된 자원의 무분별한 할당으로 인해 발생하는 문제로 간주
프로세스들에 할당할 수 있는 자원이 충분한 상황에서 프로세스들이 한두 개의 적은 자원만을 요구한다면 교착 상태는 발생하지 않음
-> 프로세스들에 배분할 수 있는 자원의 양을 고려하여 교착 상태가 발생하지 않을 정도의 양만큼만 자원을 배분하는 방법이 교착 상태 회피
교착 상태가 발생하지 않고 모든 프로세스가 정상적으로 자원을 할당받고 종료될 수 있는 상태가 안전 상태
교착 상태가 발생할 수도 있는 상황을 불안전 상태
안전 순서열은 교착 상태 없이 안전하게 프로세스들에 자원을 할당할 수 있는 순서를 의미
운영체제가 교착 상태를 회피하기 위해서는
시스템 상태가 안전 상태에서 안전 상태로 움직이는 경우에만 자원을 할당하면 됨
교착 상태 검출 후 회복
교착 상태 발생을 인정하고 사후에 조치하는 방식
운영체제는 프로세스들이 자원을 요구할 때마다 그때그때 모두 할당하며, 교착 상태 발생 여부를 주기적으로 검사
선점을 통한 회복
교착 상태가 해결될 때까지 한 프로세스씩 자원을 몰아주는 방식
프로세스 강제 종료를 통한 회복
교착 상태에 높은 프로세스를 모두 강제 종료 또는 교착 상태가 없어질 때까지 한 프로세스씩 강제 종료
전자는 확실하지만 작업 내역을 잃게 될 가능성이 있고, 후자는 교착 상태가 없어졌는지 여부를 확인하는 과정에서 오버헤드 야기
교착 상태를 무시하는 방법도 있음
타조 알고리즘