※ 전남대학교 박태준 교수님의 운영체제 강의를 듣고, 정리한 내용입니다.
다음 4가지 상황이 모두 허용되는 시스템은 언제든지 교착상태가 발생할 수 있습니다 ( Coffman Condition )
상호 배제 ( Mutual Exclusion )
비선점 ( No Preemption )
점유와 대기 ( Hold & Wait )
환형 대기 ( Circular Wait )
이 4가지 조건 중 한 가지라도 성립되지 않으면, 교착상태는 발생하지 않습니다.
교착상태 예방 ( Prevention )
교착상태 회피 ( Avoidance )
교착상태 감지 및 복구 ( Detection and Recovery )
교착상태 무시
상호 배제 없애기
비선점 조건 없애기
점유와 대기 조건 없애기
환형 대기 조건 없애기

자원 할당 시, 미래에 환형 대기가 발생할 것으로 판단되면 자원을 할당하지 않는 정책
교착 상태가 발생하지 않는 범위 내에서만 자원 할당

자원 할당 전, 미래에 교착 상태가 발생할 것인지 판단 후 자원 할당
알고리즘
하지만, 각 프로세스가 실행 전 필요한 자원의 갯수를 아는 것은 불가능
프로세스의 갯수도 동적으로 변하기 때문에, 미리 프로세스의 갯수를 정적으로 고정시키는 것 또한 불가능함

백그라운드에서 교착상태를 감지하는 프로그램이 항상 실행되도록 하여, 교착상태 발생시 이를 풀어주는 방법도 고려해볼 수 있습니다.
교착 상태가 형성되었는지 확인하는 방법은 2가지 방법이 있습니다.
자원 할당 그래프를 이용한 교착 상태 검출
타임아웃을 이용한 교착 상태 검출

자원 강제 선점 ( Preemption )
롤백 ( Rollback )
프로세스 / 쓰레드 강제 종료 ( Kill Process )
교착상태의 발생횟수와, 발생할 확률에 비해 이를 해결하기엔 상대적으로 비용이 많이 발생합니다.
그래서 교착상태가 발생하지 않을 것 이라 여기고, 말 그래도 무시하는 방법도 고려해볼 수 있습니다.
이 경우, 다음과 같은 문제점이 발생할 수 있습니다.