교착상태는 예방하거나, 회피하거나, 검출 후 회복해서 해결할 수 있다.
🎈 예방
교착 상태 발생 조건 4가지에 해당하는 상호 배제, 점유와 대기, 비선점, 원형 대기 중 하나의 조건이라도 없애면 교착 상태는 발생하지 않는다.
- 상호 배제
- 모든 자원을 공유 가능하게 만든다
단점
: 현실적으로 힘듦
- 점유와 대기
- 특정 프로세스에 자원을 모두 할당하거나, 아예 할당하지 않는 방식으로 배분한다. (포크를 두개 동시에 들게 하거나, 아예 못들게 한다.)
단점
: 자원의 활용률이 낮아지고, 프로세스가 모든 자원을 할당 받을 수 있는 타이밍을 확보하기가 어렵다.
- 비선점
- 자원을 이용 중인 프로세스로부터 자원을 빼앗는다.
- 대표적으로 CPU 를 각 프로세스가 일정 시간동안 선점해서 사용한다.
단점
: 프린터와 같이 한 프로세스가 시작부터 끝까지 사용해야 하는 경우 사용이 불가능하다.
- 원형 대기
- 모든 자원에 번호를 부여해서 오름차순으로 자원을 할당한다.
- 철학자들에게 번호가 낮은 포크에서 높은 포크 순으로 집어들게 한다.
단점
: 시스템에 존재하는 수많은 자원에 일일이 번호를 붙이기 힘들다.
원형 구조를 없애면 일자 테이블에서 식사하는 상황과 유사해진다.
🎈 회피
자원이 충분히 많은 상황에서 프로세스가 적은 자원만 요구한다면 교착 상태는 발생하지 않는다.
(포크를 100개, 1000개로 늘리면 교착 상태가 발생하지 않는다.)
교착 상태 회피를 위해서는 시스템이 계속 안전 상태를 유지할 수 있게 자원을 할당하면 된다
- 안전 순서열 : 교착 상태 없이 안전하게 프로세스들에게 자원을 할당할 수 있는 순서
- 안전 상태 : 안전 순서열대로 프로세스에 자원을 배분해 교착 상태가 발생하지 않는 상태
- 불안전 상태 : 안전 순서열이 없는 상황으로 교착 상태가 발생할 위험이 있다.
🎈 검출 후 회복
- 선점을 통한 회복 : 교착 상태가 해결될 때까지 자원을 강제로 한 프로세스에게 몰아주는 방식
- 강제 종료를 통한 회복 : 교착 상태에 놓인 프로세스를 모두 또는 하나씩 강제종료시켜 해결하는 방식
교착 상태를 그냥 무시하는게 효율적일 때도 있다. (타조 알고리즘)