5. 교착 상태 해결방법 중, 교착 상태가 발생하지 않는 수준으로 자원을 할당하는 방법
A. 교착 상태 회피
교착 상태 회피의 개념
•
프로세스에 자원을 할당할 때, 어느 수준 이상의 자원을 나누어주면 교착 상태가 발생하는지 파악
→ 그 수준 이하로 자원을 나누어준다.
•
교착 상태가 발생하지 않는 범위 내에서 자원을 할당
•
교착 상태가 발생하는 범위에 있으면 프로세스를 대기시킴
교착 상태를 자원의 총수와 현재 할당된 자원의 수를 기준으로 상태를 나눈다
•
안정 상태
•
불안정 상태
안정 상태를 유지할 수 있는 범위 내에서 자원을 할당 → 교착 상태를 피한다
은행원 알고리즘
은행이 대출을 해주는 방식과 유사한 알고리즘
→ 최악의 경우를 기준으로 해 문제 상황을 철저히 피한다
•
각 프로세스는 자신이 사용할 자원의 최대 수를 운영체제에 알려준다
→ 운영체제가 자원을 할당할 때 시스템의 상태를 파악하는 데 꼭 필요한 정보
•
프로세스에 할당된 자원의 수는 할당 자원에 표시된다
•
자신이 선언한 최대 자원 - 현재 할당된 자원의 수 = 기대 자원
•
전체 자원에서 각 프로세스에 할당되고 남은 자원의 수 = 가용 자원
자원을 할당할 때의 기준
•
각 프로세스의 기대 자원과 비교하여 가용 자원이 하나라도 크거나 같으면 자원을 할당
•
가용 자원 > 기대 자원
→ 자원을 사용하여 작업을 끝낼 수 있는 프로세스가 있다
→ 안정상태
•
가용 자원이 어떤 기대 자원보다 크지 않으면 할당하지 않는다
→ 가용 자원을 사용해 작업을 마칠 수 있는 프로세스가 없다
→ 불안정 상태
안정 상태
각 프로세스의 기대 자원과 비교하여 가용 자원이 크거나 같은 경우가 한 번 이상인 경우
•
가용 자원 : 2개, P2의 기대 자원 2개 이므로 무리없이 작업 수행가능
→ 안정 상태
•
가용 자원 : 1개, 프로세스의 최소 기대자원 2개 이므로 어떤 프로세스의 기대 자원도 충족할 수 없다.
→ 불안정 상태
교착 상태 회피의 문제점
프로세스가 자신이 사용할 모든 자원을 미리 선언해야 한다.
•
쉬운 일이 아니다
•
미리 선언한 자원이 정확하지 않으면 교착 상태 회피에서도 교착 상태가 발생할 수 있다.
시스템의 전체 자원 수가 고정적이어야 한다.
•
일시적인 고장이나 새로운 자원이 추가되는 일이 빈번
→ 시스템 자원 수가 유동적
자원이 낭비된다.
•
실제로는 교착 상태가 발생하지 않는데, 발생할 것이라고 예상
→ 프로세스 자원 할당에 제약
→ 낭비
6. 교착 상태 해결 방법 중, 자원 할당 그래프를 사용하여 교착 상태를 발견하는 방법
A. 교착 상태 검출
교착 상태 검출
•
운영체제가 프로세스의 작업을 관찰하며 교착 상태 발생 여부를 계속 주시
•
교착 상태가 발견 → 교착 상태 회복 단계를 밟음
•
타임아웃 / 자원 할당 그래프 이용 방법이 있음
타임아웃을 이용한 교착 상태 검출
•
일정 시간 동안 작업이 진행되지 않은 프로세스를 교착 상태가 발생한 것으로 간주하여 처리
•
교착 상태가 자주 발생하지 않을 것이라는 가정에 사용
•
특별한 알고리즘 없이 구현 가능
엉뚱한 프로세스가 강제 종료될 수 있다
•
교착 상태 외의 다른 이유로 작업이 진행되지 못하는 모든 프로세스가 강제 종료될 수 있다.
모든 시스템에 적용할 수 없다
•
여러 군데에 데이터가 나뉘어 있는 분산 DB의 경우, 타임아웃을 적용하기 어렵다
•
원격지에 있는 프로세스의 응답이 없는 것이 교착 상태 떄문인지, 네트워크 문제 때문인지, 단순히 처리가 늦어지는 것인지 알 수 없다.
결론
•
그럼에도 타임아웃은 가장 많이 사용하는 방법
→ 자원 할당 그래프를 사용해 교착 상태를 찾는 방법은 작업이 너무 많아서 구현이 어렵기 때문.
•
타임아웃을 이용하는 방법
→ 가벼운 교착 상태 검출
•
자원 할당 그래프를 이용하는 방법
→ 무거운 교착 상태 검출