Last update: @1/7/2023
•
교착 상태 예방
◦
교착 상태 필요 조건 네 가지 중 하나늘 충족하지 못하게 함
▪
자원의 상호 배제 없애기
: 모든 자원을 공유 가능하게 만드는 것. 비현실적임
▪
점유와 대기 없애기
: 특정 프로세스에 자원을 모두 할당하거나, 아예 할당하지 않는 방식으로 배분
•
당장 자원이 필요해도 기다릴 수 밖에 없는 프로세스와 사용되지 않으면서 오랫동안 할당되는 자원을 다수 할당하게 되어 자원의 활용률이 낮아짐
•
자원을 많이 이용하는 프로세스는 자원을 사용할 타이밍을 확보하기가 어려워저 기아 현상이 야기됨
▪
비선점 조건 없애기
: 이용 중인 프로세스부터 해당 자원을 빼앗을 수 있음
•
CPU 같은 자원에는 효과적이지만, 프린트 같은 자원에는 어려움. 다소 범용성이 떨어짐
▪
원형 대기 조건 없애기
: 모든 자원에 번호를 붙이고, 오름차순으로 자원을 할당하면 원형 대기가 발생하지 않음
•
모든 컴퓨터 시스템 내에 존재하는 수많은 자원에 번호를 붙이기는 쉽지 않음
•
각 자원에 어떤 번호를 붙이는지에 따라 특정 자원의 활용률이 떨어질 수 있음
▪
교착 상태 회피
: 교착 상태가 발생하지 않을 정도로만 조심 조심 자원을 할당하는 방식
•
교착 상태 회피 방식에서는 교착 상태를 한정된 자원의 무분별한 할당으로 인해 발생하는 문제로 간주함
•
프로세스들에 배분할 수 있는 자원의 양을 고려하여 교착 상태가 발생하지 않을 정도의 양만큼만 자원을 배분하는 방법
•
교착 상태 회피에서 사용되는 개념
◦
안전 상태(safe state)
: 교착 상태가 발생하지 않고 모든 프로세스가 정상적으로 자원을 할당받고 종료될 수 있는 상태. 안전 순서열대로 프로세스들에 자원을 배분하여 교착 상태가 발생하지 않는 상태.
◦
불안정 상태(unsafe state)
: 교착 상태가 발생할 수도 있는 상황. 안전 순서열이 없는 상황
◦
안전 순서열(safe sequence)
: 교착 상태 없이 안전하게 프로세스들에 자원을 할당할 수 있는 순서. 즉, 프로세스들의 실행 순서
▪
교착 상태 검출 후 회복
: 교착 상태 발생을 인정하고 사후에 조치하는 방식.
•
운영체제는 프로세스들이 자원을 요구할 때마다 그때그때 모두 할당하며, 교착 상태 발생 여부를 주기적으로 검사함
•
교착 상태가 검출되면 그때 비로소 다음과 같은 방식으로 회복함
◦
선점을 통한 회복
: 교착 상태가 해결될 떄까지 한 프로세스씩 자원을 몰하주는 방식. 교착 상태가 해결될 때까지 다른 프로세스로부터 자원을 강제로 빼앗고 한 프로세스에게 할당함
◦
프로세스 강제 종료를 통한 회복
▪
교착 상태에 놓인 프로세스를 모두 강제 종료
•
한 방에 교착 상태를 해결할 수 있는 가장 확실한 방식
•
그만큼 많은 프로세스들이 작업 내역을 잃게 될 가능성이 있음
▪
교착 상태가 없어질 때까지 한 프로세스씩 강제 종료
•
작업 내역을 잃는 프로세스를 최대한 줄일 수 있음
•
교착 상태가 없어졌는지 여부를 확인하는 과정에서 오버헤드를 야기
▪
타조 알고리즘(ostritch algorithm)
: 교착 상태를 아예 무시하는 방식
•
문제 발생의 빈도가 최대 효율을 추구하는 엔지니어 입장에서 때때로 이 방식이 적합할 때도 많음