교착상태: 무한 대기 상태
교착상태와 아사현상 차이
둘다 리소스를 요청하는 프로세스가 오랫동안 지연된 상태
다른 프로세스와 공유할 수 없는 자원을 사용할 때 발생
공유 변수를 사용할 때 발생
자원할당 그래프: 프로세스가 어떤 자원을 사용 중이고 어떤 자원을 기다리고 있는지
프로세스) 원, 자원) 사각형, 할당 받음) 실선 화살표, 기다림) 점선 화살표
다중 자원) 여러 프로세스가 하나의 자원을 동시에 사용하는 경우, 수용 가능 프로세스 수를 사각형 안에 작은 동그라미로
4가지 중 하나라도 만족하지 않으면 교착상태 발생X
상호 배제
특징)사용하는 자원은 다른 프로세스와 공유할 수 없는 배타적 자원
비선점
특징)사용중인 자원은 빼앗을 수 없는 비선점 자원
점유와 대기
행위)자원을 할당 받은 상태에서 다른 자원을 기다리는 상태
원형 대기
행위)점유와 대기 -> 원형 관계(사이클)
4가지 필요조건이 발생하지 않도록
상호배제
독점적으로 사용할 수 있는 자원 제거
현실적으로 어려움
비선점
모든 자원을 빼앗을 수 있도록
아사현상을 일으킴, 무력화 하기 어려움
점유와 대기
전부 할당하거나 아니면 아예 할당하지 않는 방식
이미 자원을 할당 받았으면 다른 자원을 기다리지 X
단점
- 프로세스가 자신이 사용하는 자원을 자세히 알기 어려움
- 자원 활용 떨어짐
- 많은 자원을 사용하는 프로세스가 불리함
- 결국 일괄 작업 방식으로 동작
원형 대기
모든 자원에 숫자 부여, 오름차순으로만 자원 할당
프로세스 P2는 자원을 할당 받을 수 없어 강제 종료되고 프로세스 P1은 정상적으로 실행
단점
- 프로세스 작업 유연성 떨어짐
- 자원 번호 어떻게 부여?
교착상태 예방 정리
상호 배체, 비선점 -> 자원을 보호하기 위해 예방 어렵
점유와 대기, 원형 대기 -> 프로세스 작업 방식 제한, 자원 낭비. 사용할 수 없음
자원 할당량 조절(포크 개수 조절)
교착 상태가 발생하지 않는 범위 내에서만 자원 할당
발생 범위-> 프로세스 대기
안정상태와 불안정상태
할당된 자원 적음 -> 안정, 할당 자원 많음 -> 불안정
불안정 상태가 커질수록 교착 상태가 발생할 가능성 증가
대출금이 대출 가능 범위 내(안정 상태)이면 대출해주지만 아니면 거부
기대 자원 <= 가용 자원 -> 할당해줌
문제점
프로세스가 사용할 모든 자원을 미리 선언해야함
시스템 전체 자원 수가 고정적
자원 낭비
일어나면 처리하자
검출- 자원할당 그래프를 모니터링
회복- 교착상태가 발생하면 교착상태 회복 단계 진행
타임아웃
-일정 시간 동안 작업이 진행되지 않은 프로세스를 교착 상태가 발생한 것으로 간주하여 처리
-가정: 교착 상태가 자주 발생하지 않을 것
-특별한 알고리즘이 없음(쉽게 구현가능)
-타임아웃 -> 프로세스 종료
자원 할당 그래프
단일 자원 사용, 자원할당 그래프에 사이클이 있으면 교착상태
교착상태를 유발한 프로세스 강제 종료
1. 교착상태 일으긴 모든 프로세스 동시에 종료
2. 교착상태 일으킨 프로세스 중 하나를 골라 순서대로 종료
다중 자원과 사이클
대기 그래프와 그래프 감소
그래프 감소 결과 사이클X => 교착 상태 발생 X
그래프 감소 결과 사이클 => 교착 상태