[OS] Ch7. 교착상태
교착상태
- 대기 중인 프로세스들이 요청한 자원이 이미 점유되고, 그 프로세스들도 대기 상태일 때 그 상태를 변경할 수 없는 상황
교착 상태의 조건
-
다음의 4가지 조건이 동시에 성립 될 때 발생한다.
상호 배제 (Mutual Exclusion)
- 최소 한 개 이상의 자원이 비공유 모드로 점유되어야 한다. 비공유 모드에서는 한 번에 하나의 프로세스만이 그 자원을 사용할 수 있다.
점유 하며 대기 (Hold and Wait)
- 프로세스는 최소한 하나의 자원을 점유 한 채 자원을 추가로 얻기 위해 대기해야 한다.
비선점 (No Preemtion)
- 자원들을 선점할 수 없어야 한다.
환형 대기 (Circular Wait)
교착 상태 처리 방법
회피 (Avoidance)
- 교착 상태가 발생 했을 때 적절히 피해가는 방법
은행원 알고리즘 (Banker's Algorithm)
- 프로세스가 자원 요청을 할 때, 자원 할당 뒤에도 시스템이 교착 상태가 일어나지 않는지 확인 후 할당
- 안정 상태(Safe state)에 있으면 할당, 불안정 상태(Unsafe State)에 있으면 비할당
Max
얼마나 많은 금액을 요구하는가Available
빌려줄 수 있는 돈Allocated
현재 빌려준 돈
예방 (Prevention)
- 4가지 조건 중 하나를 제거함으로서 해결
- 가장 자원 낭비가 심하다.
- 상호 배제 : 한 번에 여러 프로세스가 공유 자원을 사용할 수 있도록 함
- 점유 대기 : 프로세스가 실행 되기 전 필요한 모든 자원을 할당하거나 자원이 점유되지 않은 상태에서만 자원을 요구하게 함
- 비선점 : 자원을 점유하고 있는 프로세스가 다른 자원을 요구할 때 점유하고 있는 자원을 반납, 대기하게 함.
- 환형 대기 : 자원을 선형 순서로 번호를 분배함. 한 쪽 방향으로만 자원을 공유하게 함.
발견 후 처리 (Detect and Recovery)
- 교착 상태가 발생 했는 지 점검 후 회복시킨다.
- 교착 상태 발견 알고리즘, 자원 할당 그래프 등을 사용한다.
- 회복 기법은 교착 상태를 일으킨 프로세스를 종료 시키거나 교착 상태의 자원을 선점하여 해결하는 방법
- 자원 선점 시 고려 사항
- 희생자 선택 (selection of a victim) : 최소의 피해를 줄 프로세스 선택
- 후퇴 (rollback) : 일반적으로 일시 중단 시키고 다시 복귀
- 기아 상태 (starvation) : 한 프로세스가 계속 선점 대상이 되지 않도록 한다. (후퇴 횟수 포함하기)
- 자원 선점 시 고려 사항
무시 (Do Nothing)