24. 교착상태와 기아상태
Deadlock
교착상태란 무한 대기 상태를 뜻하며 두 개 이상의 작업이 서로 상대방의 작업이 끝나기 만을 기다리고 있기 때문에 다음 단계로 진행하지 못하는 상태를 말한다.
교착상태 발생조건
다음 네 가지 조건이 모두 성립할 때 교착상태 발생 가능성이 있다.
- 상호배제(Mutual exclusion) : 프로세스들이 필요로 하는 자원에 대해 배타적인 통제권을 요구한다.
- 점유대기(Hold and wait) : 프로세스가 할당된 자원을 가진 상태에서 다른 자원을 기다린다.
- 비선점(No preemption) : 프로세스가 어떤 자원의 사용을 끝낼 때까지 그 자원을 뺏을 수 없다.
- 순환대기(Circular wait) : 각 프로세스는 순환적으로 다음 프로세스가 요구하는 자원을 가지고 있다.
따라서 위의 한 조건이라도 성립하지 않으면 교착상태가 일어나지 않도록 할 수 있다.
Starvation
특정 프로세스의 우선순위가 낮아서 원하는 자원을 계속 할당 받지 못하는 상태를 말한다.
Deadlock vs Starvation
- 교착상태 : 여러 프로세스가 동일 자원 점유를 요청할 때 발생
- 기아상태 : 여러 프로세스가 부족한 자원을 점유하기 위해 경쟁할 때 발생
기아상태 해결 방안
기아상태는 주로 다음과 같은 방법으로 해결한다.
- 프로세스 우선순위 수시 변경을 통해 각 프로세스 높은 우선순위를 가지도록 기회 부여
- 오래 기다린 프로세스의 우선순위 높이기
- 우선순위가 아닌 요청 순서대로 처리하는 요청큐 사용