교착 상태
프로세스가 서로 무한정 대기하는 상태
교착 상태
2개 이상의 프로세스가 다른 프로세스의 작업이 끝나기를 기다리며 진행되지 않는 상태를 말한다.
여러 프로세스가 하나의 자원을 동시에 사용하면 다중 자원이라고 부른다.
교착 시스템 발생
컴퓨터 시스템 에서 교착 상태는 시스템 자원, 공유 변수, 응용프로그램을 사용할 때 발생 할 수 있
🔴 시스템 자원 : 다른 프로세스와 공유할 수 없는 자원을 사용할 때 발생한다.
🟠 공유 변수 : 공유 변수를 사용할 때 발생한다.
🟡 응용 프로그램 : 데이터 베이스같은 경우의 일관성을 유지하지 못하는 상황에도 발생한다.
자원 할당 그래프
어떤 자원을 사용하는지, 어떤 자원을 기다리고 있는지 방향성 그래프를 표현한 것이다.
교착 상태 필요 조건
교착 상태와 아사상태는 서로 다른 상태인데, 아사 현상은 정책상 잘못이나 오류가 없어도 발생한다
🔴 상호 배제 : 한 프로세스가 사용하는 자원은 다른 프로세스와 공유할 수 없는 자원이여야 한다
이 자원은 임계구역으로 보호되기 때문에 동시에 사용할 수 없다
🟠 비선점 : 다른 프로세스가 중간에 뺏을 수 없는 자원이어야 한다.
🟡 점유와 대기 : 프로세스가 서로 할당&대기 상태여야 한다.
🟢 원형 대기 : 점유와 대기를 하는 프로세스의 관계가 원을 이루어야 한다
교착 상태 해결 방법
예방, 회피, 검출, 회복으로 교착상태를 해결한다.
🔴 예방 : 교착 상태를 유발하는 조건이 발생하지 않도록 무력화 시키는 방식이다.
🟠 회피 : 자원 할당량을 조절하는 방식이다. 자원을 할당하다 교착 상태의 가능성이 보이면 할당을 중단한다
🟡 검출& 회복 : 제약을 가하지 않고 자원할당 그래프를 모니터링 하면서 교착 상태가 발생하는지 살펴보는 방식이다.
교착 상태 예방
상호 배타적인 모든 자원을 없애 버리는 방법이다.
시스템 내의 모든 자원을 공유할 수 있다면 교착 상태가 발생하지 않는다.
비선점 예방
모든 자원을 빼앗을 수 있도록 만드는 방법이다.
임계 구역을 보호하기 위해 잠금을 사용하면 자원을 빼앗을 수도 없고 상호 배제도 보장할 수 없다.
점유와 대기 예방
프로세스가 자원을 점유한 상태에서 다른 지원을 기다리지 못하게 하는 방법이다.
전부 할당
& 할당 X
하는 방식으로, 프로세스 자원 사용 방식을 변화시켜 교착 상태를 처리한다
프로세스가 자신이 사용하는 모든 자원을 알기 어렵다
자원의 활용성이 떨어진다.
많은 자원을 사용하는 프로세스가 적은 자원을 사용하는 프로세스보다 불리하다
일괄 작업 방식으로 동작한
원형 대기 예방
점유와 대기를 하는 프로세스들이 원형을 이루지 못하게 하는 방법이다.
자원이 한 방향으로만 사용하도록 설정함 으로써 원형 대기를 예방할 수 있다.
프로세스 작업 진행에 유연성이 떨어진다
자원의 번호를 어떻게 부여할 것인지가 문제이다
교착 상태 회피
자원을 할당할 떄 어느 수준 이상의 자원을 나누어 주면 교착 상태가 발생하는지 파악 하는 방법이다.
자원의 총수와 할당된 자원의 수를 기준으로 안정상태
& 불안정상태
로 나누고 시스템이 안정 상태를 유지하도록 자원을 할당한
프로세스가 자신이 사용할 모든 자원을 미리 선언해야 한다
시스템의 전체 자원 수가 고정적이어야 한다
자원이 낭비된다
교착 상태 검출
교착 상태 예방은 구현하기 어렵고, 회피는 구현할 수 있지만 자원을 낭비한다.
교착 상태 검출은 타임아웃을 이용하거나, 자원할당 그래프를 이용하는 방법이 있다.
타임아웃을 이용한 검증은 가벼운 교착 상태 검증
이라 부르며, 일정 시간동안 작업이 진행되지 않은 프로세스를 교착으로 간주한다.
엉뚱한 프로세스가 종료될 수 있다
모든 시스템에 적용할 수 없다
자원 할당 그래프를 사용한 검증은 무거운 교착 상태 검증
이라 부르며 시스템이 어떤 자원을 사용하거나 기다리는지 알 수 있다.
교착 상태가 없는 자원 할당 그래프
교착 상태가 있는 자원 할당 그래프
자원 할당 그래프를 이용하여 교착 상태를 검출하는 방법은 정확하고 멈춤이 생기지 않는다.
교착 상태 회복
교착 상태가 검출되면 교착 상태를 푸는 후속 작업을 한다.
교착 상태를 일으킨 프로세스를 동시에 종료
교착 상태를 일으킨 프로세스중 하나를 골라 순서대로 종료
회복 단계에서는 관련 프로세스를 종료하고 복구하는 일도 해야된다.
Last updated