교착 상태란 2개 이상의 프로세스가 다른 프로세스의 작업이 끝나기만 기다리며 작업을 더 이상 진행하지 못하는 상태를 교착 상태라고 합니다.
기아 상태란 프로세스가 CPU 자원의 할당을 무한히 대기하는 것을 말합니다. 기아 상태는 CPU 스케쥴링과 밀접한 관련이 있습니다.
교착 상태가 발생하려면 4가지 필요조건이 있습니다.
- 상호 배제
- 비선점
- 점유와 대기
- 원형 대기
하나씩 설명하자면
상호 배제는 배타적인 자원은 임계구역으로 보호되기 때문에 다른 프로세스가 동시에 사용할 수 없다. 따라서 배타적인 자원을 사용하면 교착 상태가 발생한다.
비선점은 한 프로세스가 사용 중인 자원은 중간에 다른 프로세스가 빼앗을 수 없는 비선점 자원이어야 한다. 자원을 빼앗을 수 없으면 공유할 수도 없으므로 교착 상태가 발생한다.
점유와 대기는 프로세스가 어떤 자원을 할당받은 상태에서 다른 자원을 기다리는 상태여야 한다.
원형 대기는 점유와 대기를 하는 프로세스 간의 관계가 원을 이루어야 한다. 점유와 대기를 하는 프로세스들이 서로 방해하는 방향이 원을 이루면 프로세스들이 서로 양보하지 않기 때문에 교착 상태에 빠진다.
-
교착 상태 예방
교착 상태를 유발하는 네 가지 조건을 피한다.
→ 실효성이 적어 잘 사용하지 않는다.
-
교착 상태 회피
교착 상태가 발생하지 않는 수준으로 자원을 할당한다.
→ 얼마만큼 할당해야 교착 상태가 발생하지 않는다는 보장이 없다.
-
교착 상태 검출, 회복
자원 할당 그래프를 사용하여 교착 상태를 발견한 후 해결한다.
→ 교착 상태를 검출한 후 회복시키는 것은 결론적으로 교착 상태를 해결하는 현실적인 방법이다.
에이징이 있다.
어떤 자원을 오래 대기할수록 해당 프로세스의 우선순위를 높여준다.
- SJF 기법에서 상대적으로 실행시간이 긴 프로세스들이 CPU를 할당받지 못하는 상황을 예방하기 위해 HRN(HRRN) 기법으로 사용함.
- MLQ 기법에서 높은 우선순위를 먼저 처리 및 유연한 방법으로 처리하기 위해 에이징 기법을 도입해 MLFQ 기법으로 사용함.
쉽게 배우는 운영체제 - 조성호 / 한빛아카데미