교착상태란
둘 이상의 프로세스가 다른 프로세스가 점유하고 있는 자원을 서로 기다릴 때 발생 (비공유 자원)
→ 자원을 해제를 수신할 때까지 현재 보유한 자원도 해제할 수 없음
→ 교착상태 발생 시 작업이 정지되어 더는 명령어 수행을 못함
→ 병행 처리와 자원 공유에 따른 부작용
하나의 프로세스는 일반적으로 여러 자원을 사용
OS가 교착상태를 해결하지 못하면 시스템 운영자나 사용자는 작업을 교체하거나 종료하는 외부 간섭으로 해결해야 함
교착 상태는 하나 이상의 작업에 영향을 주기 때문에 무한 대기나 기아 상태보다 더 심각한 문제
교착상태 발생 조건
교착 상태는 네 가지 조건을 만족할 때 발생
1. 상호배제 - 한 번에 한 프로세스만 해당 자원을 사용할 수 있어야 함
2. 점유와 대기 - 자원을 최소한 하나 정보는 보유하고, 할당된 자원을 얻으려고 기다리는 프로세스가 있어야 함
3. 비선점 - 자원은 강제로 빼앗을 수 없고, 자원을 점유하고 있는 프로세스가 끝나야 해제
4. 순환 대기 - 여러 프로세스가 서로 다른 자원을 점유 및 대기하고 있는 상태
**** 상호배제, 점유와 대기, 비선점 만족하면 교착 상태가 발생할 수도 발생하지 않을 수도 있다.
상호배제, 점유와 대기, 비선점을 만족하여 순환대기가 발생하면
교착상태에 빠지고 순환대기가 발생하지 않으면 교착상태가 발생하지 않는다.
(순환대기만 만족한다고 교착상태가 발생하진 않음)
교착상태 해결책
1. 복귀
프로세스가 자원을 요청할 때 모든 필요한 자원을 한 번에 할당 받지 못하면
이미 할당 받은 자원을 모두 반환하고 처음부터 다시 시작하는 방법
장점 :
단순하고 구현 쉬움
교착상태를 확실하게 예방 가능
단점 :
자원 이용률이 낮을 수 있다. ( 필요한 자원을 한 스레드라도 사용 중이라면 대기해야 함 )
기아 문제가 발생할 수 있다.
2. 확인 후 요청
프로세스가 실행되기 전에 필요한 모든 자원을 미리 선언하고, 모든 자원을 할당 받을 수 있을 때만 실행을 시작하는 방법
장점 :
교착상태를 완전히 예방할 수 있다.
자원할당 상태를 미리 알 수 있어 관리가 용이
단점 :
자원 이용률이 낮을 수 있다.
프로세스가 필요한 모든 자원을 미리 알아야 하므로, 동적인 환경에서는 적용 어려움
3. 사용권 우선순위 부여
모든 자원에 전역적인 번호를 부여하고, 프로세스가 오직 증가하는 순서로만 자원을 요청하도록 하는 방법
Ex) A, B, C가 각각 1, 2, 3 번 번호를 부여 받음
A → B → C 허용
A → C 허용
C → A 비허용
장점 :
순환 대기를 방지하여 교착상태를 예방
구현이 비교적 간단
단점 :
자원에 대한 전역적인 순서를 정하는 것이 어려울 수 있음
자원 이용의 유연성이 떨어질 수 있다.