///////
Search
3️⃣

연습문제 5 ~ 6

5. 교착 상태 해결방법 중, 교착 상태가 발생하지 않는 수준으로 자원을 할당하는 방법

A. 교착 상태 회피

교착 상태 회피의 개념

프로세스에 자원을 할당할 때, 어느 수준 이상의 자원을 나누어주면 교착 상태가 발생하는지 파악
→ 그 수준 이하로 자원을 나누어준다.
교착 상태가 발생하지 않는 범위 내에서 자원을 할당
교착 상태가 발생하는 범위에 있으면 프로세스를 대기시킴
교착 상태를 자원의 총수와 현재 할당된 자원의 수를 기준으로 상태를 나눈다
안정 상태
불안정 상태
안정 상태를 유지할 수 있는 범위 내에서 자원을 할당 → 교착 상태를 피한다

은행원 알고리즘

은행이 대출을 해주는 방식과 유사한 알고리즘
→ 최악의 경우를 기준으로 해 문제 상황을 철저히 피한다
각 프로세스는 자신이 사용할 자원의 최대 수를 운영체제에 알려준다
→ 운영체제가 자원을 할당할 때 시스템의 상태를 파악하는 데 꼭 필요한 정보
프로세스에 할당된 자원의 수는 할당 자원에 표시된다
자신이 선언한 최대 자원 - 현재 할당된 자원의 수 = 기대 자원
전체 자원에서 각 프로세스에 할당되고 남은 자원의 수 = 가용 자원

자원을 할당할 때의 기준

각 프로세스의 기대 자원과 비교하여 가용 자원이 하나라도 크거나 같으면 자원을 할당
가용 자원 > 기대 자원
→ 자원을 사용하여 작업을 끝낼 수 있는 프로세스가 있다
→ 안정상태
가용 자원이 어떤 기대 자원보다 크지 않으면 할당하지 않는다
→ 가용 자원을 사용해 작업을 마칠 수 있는 프로세스가 없다
→ 불안정 상태
안정 상태 각 프로세스의 기대 자원과 비교하여 가용 자원이 크거나 같은 경우가 한 번 이상인 경우
가용 자원 : 2개, P2의 기대 자원 2개 이므로 무리없이 작업 수행가능
→ 안정 상태
가용 자원 : 1개, 프로세스의 최소 기대자원 2개 이므로 어떤 프로세스의 기대 자원도 충족할 수 없다.
→ 불안정 상태

교착 상태 회피의 문제점

프로세스가 자신이 사용할 모든 자원을 미리 선언해야 한다.

쉬운 일이 아니다
미리 선언한 자원이 정확하지 않으면 교착 상태 회피에서도 교착 상태가 발생할 수 있다.

시스템의 전체 자원 수가 고정적이어야 한다.

일시적인 고장이나 새로운 자원이 추가되는 일이 빈번
→ 시스템 자원 수가 유동적

자원이 낭비된다.

실제로는 교착 상태가 발생하지 않는데, 발생할 것이라고 예상
→ 프로세스 자원 할당에 제약
→ 낭비

6. 교착 상태 해결 방법 중, 자원 할당 그래프를 사용하여 교착 상태를 발견하는 방법

A. 교착 상태 검출

교착 상태 검출

운영체제가 프로세스의 작업을 관찰하며 교착 상태 발생 여부를 계속 주시
교착 상태가 발견 → 교착 상태 회복 단계를 밟음
타임아웃 / 자원 할당 그래프 이용 방법이 있음

타임아웃을 이용한 교착 상태 검출

일정 시간 동안 작업이 진행되지 않은 프로세스를 교착 상태가 발생한 것으로 간주하여 처리
교착 상태가 자주 발생하지 않을 것이라는 가정에 사용
특별한 알고리즘 없이 구현 가능

엉뚱한 프로세스가 강제 종료될 수 있다

교착 상태 외의 다른 이유로 작업이 진행되지 못하는 모든 프로세스가 강제 종료될 수 있다.

모든 시스템에 적용할 수 없다

여러 군데에 데이터가 나뉘어 있는 분산 DB의 경우, 타임아웃을 적용하기 어렵다
원격지에 있는 프로세스의 응답이 없는 것이 교착 상태 떄문인지, 네트워크 문제 때문인지, 단순히 처리가 늦어지는 것인지 알 수 없다.

결론

그럼에도 타임아웃은 가장 많이 사용하는 방법
→ 자원 할당 그래프를 사용해 교착 상태를 찾는 방법은 작업이 너무 많아서 구현이 어렵기 때문.
타임아웃을 이용하는 방법
→ 가벼운 교착 상태 검출
자원 할당 그래프를 이용하는 방법
→ 무거운 교착 상태 검출