운영체제는 교착 상태를 회피할 수도, 예방할 수도, 검출 후 회복할 수도 있다.
애초에 교착 상태가 발생하지 않도록 하는 방식
-> 4가지 교착상태 발생조건 중 하날르 없애버리기..(상호배제, 점유와 대기, 비선점, 원형대기)
-> 이론적으로 가능하나 현실적으로 모든 자원을 공유하기는 어려움
특정 프로세스에 자원을 모두 할당하거나, 아예 할당하지 않는 방식으로 배분
-> 이론적으로 교착상태는 발생하진 않으나, 자원의 활용률을 낮출 수 있다는 방식이다.
( 어떤 프로세스는 자원이 많이 필요 하진 않은데, 모두 할당받거나, 사용하지 않는 자원들이 오랫동안 할당되기도하고, 어떤 프로세스는 그로인해 대기를 많이 하게 되거나..)
기아 현상을 야기할 우려가 있다.
선점이 가능한 자원( CPU)에 한해서는 효과적이다
-> 모든 자원이 선점 가능한 것은 아니다..
예로들어 한 프로세스 작업이 끝날때까지 다른 프로세스가 기다려야하느 자원은 많다 ( 프린터 등) 그래서 범용성이 떨어지는 방안
원형대기를 없애는 방법은, 모든 자원에 번호를 붙이고, 오름차순으로 자원을 할당하면 원형대기는 발생하지 않는다.
-> 5번들고 1번을 들 수는 없음. 즉, 1번 2번이 끝나면 2번 3번.....
그러나, 자원에 번호를 붙이는 것은 어려움.
어떤 자원에 어떤 번호를 붙이느냐에 따라 활용률이 달라진다.
가장 현실적이나 위와 같은 단점이 있따 !
안전 순서열 : 교착 상태 없이 안전하게 프로세스들에 자원을 할당할 수 있는 순서
안전 상태 : 교착 상태 없이 모든 프로세스가 자원을 할당 받고 종료 될 수 있는 상태
불안전 상태 : 교착 상태가 발생할 수도 있는 상태
예를 들어 웹브라우저, 메모장, 게임 프로세스가 동시에 운영체제에 자원을 요청한 상황에서, 웹브라우저->메모장->게임프로세스 순서대로 자원을 할당하면 교착상태가 발생하지 않는다면 😎안전순서열이 된다.
안전순서열이 존재하는 상태 안전상태, 안전순서열이 없는상태 불안전 상태
예시로, 만약 P1,P2,P3가 모두 최대로 자원을 요구한 최악의 상황 가정
- 그래서, 추가로 P1이 5개, P2가 2개, P3가 7개 를 요구
이후 P2의 작업이 끝나서 작업이 끝나서 4개의 자원을 반납함 ( 총 자원 5개)
P1에게 남은 자원을 할당 5개필요하니 5개를 할당
P1이 작업을 마치고 10개의 자원 반납( 총 자원 10개)
즉, P2 -> P1 -> P3 안전 순서열대로 자원을 배분하면 교착 상태없이 올바르게 작업을 마칠 수 있음!
만일 운영체제가 P3에서 선뜻 자원 하나를 내주 었다면???
불안전 상태 : 교착 상태가 발생할 위험이 있음.
예시로, 만약 P1,P2,P3가 모두 최대로 자원을 요구한 최악의 상황 가정
- 그래서, 추가로 P1이 5개, P2가 2개, P3가 6개 를 요구
현재 사용가능한 자원이 2개이므로 P2에 밖에 배분하지 못함
남은 자원( 4개 )으로 P1, P3 요구도 들어 줄수가 없다( 교착 상태 발생 위험)
교착상태 회피는 항상 안전상태로 움직이는 경우에만 자원을 할당하는 방식이다. 항시 안전상태를 유지하도록 자원을 할당한다.
예시) 은행원 알고리즘