솜은 코튼

[OS] 교착 상태 해결 방법 (교착 상태 회피) 본문

OS

[OS] 교착 상태 해결 방법 (교착 상태 회피)

솜.코 2023. 5. 27. 17:38

2023.05.27 - [OS] - [OS] 교착 상태 해결 방법 (교착 상태 예방)

 

[OS] 교착 상태 해결 방법 (교착 상태 예방)

2023.05.27 - [OS] - [OS] 교착 상태 (자원 할당 그래프, 식사하는 철학자 문제) [OS] 교착 상태 (자원 할당 그래프, 식사하는 철학자 문제) 교착 상태 . 교착상태는 다른 프로세스의 잡업이 끝나기를 기다

sommda.tistory.com

 

 

2. 교착 상태 회피

.

 

앞에서 교착 상태 해결 방법 중 하나인 교착 상태 예방에 대해 알아보았다.

 

교착 상태 예방 알고리즘은 요청 방법에 제한을 두어 교착 상태를 예방한다.

하지만 이 방식은 장치의 이용률이 저하되고 시스템 총처리율이 감소한다는 것이다.

 

 

교착 상태 회피는 프로세스에 자원을 할당할 때 어느 수준 이상의 자원을 나누어주면

교착 상태가 발생하는지 파악하여 그 수준 이하로 자원을 나누어주는 방법이다.

 

즉, 교착 상태가 발생하지 않는 범위 내에서만 자원을 할당하고,

교착 상태가 발생하는 범위에 있으면 프로세스를 대기시킨다.

 

예로 시스템에 총 20개의 자원이 있는데 1개를 할당하면 교착 상태가 발생하지 않는다.

그러나 모두 할당하면 교착 상태가 발생할 확률이 매우 높아진다.

 

교착 상태 회피는 자원의 총수와 현재 할당된 자원의 수를 기준으로

시스템을 안정 상태불안정 상태로 나누고

시스템이 안정 상태를 유지하도록 자원을 할당한다.

 

 

 

위의 그림을 보면 할당된 자원이 적으면 안전상태가 크고, 할당된 자원이 늘어날수록 불안정 상태가 커진다.

그렇다고 불안정 상태에서 항상 교착 상태가 발생하는 것은 아니며 가능성이 높아지는 것이다.

 

즉, 안정 상태를 유지할 수 있는 범위 내에서 자원을 할당함으로써 교착 상태를 피한다.

 

 

2.1 은행원 알고리즘

 

교착 상태 회피를 구현하는 방법 중 '은행원 알고리즘'이 있다.

 

대출 금액이 대출 가능한 범위 내이면(안정 상태) 허용되지만 그렇지 않으면 거부되는 것과 유사하다.

 

 

 

은행원 알고리즘에서 자원을 할당할 때 필요한 정보인

프로세스가 사용할 자원의 최대 수를 운영체제에 알려준다.

 

각 프로세스에 할당된 자원의 수'할당 자원'에 표시되고,

각 프로세스마다 자신이 선언한 최대 자원에서 현재 할당된 자원의 수를 빼면 '기대 자원'이 된다.

또한 전체 자원에서 각 프로세스에 할당되고 남은 자원의 수가 '가용 자원'이다.

 

 

 

위의 그림은 '안정 상태'인 예이다.

 

시스템에 전체 14개의 자원이 있고, (P1, P2, P3)는 각 (5, 6, 10)개의 자원을 필요로 한다.

현재 (2, 4, 6)개의 자원이 할당되어 있고, 시스템 전체에서 사용할 수 있는 가용 자원은 14-12=2개이다.

또한 앞으로 사용할 자원의 수는 각 (3, 2, 4)개이다.

 

안정 상태인 이유는 현재 가용 자원이 2개인데 P2가 필요로 하는 자원이 2개이기 때문에

P2가 2개를 사용하여 실행을 종료하면 이미 할당받아 사용하던 자원 6개를 반환하고,

이를 P1과 P3에 할당하면 전체 작업을 완료할 수 있다.

 

 

 

위의 그림은 '불안정 상태'인 예이다.

 

가용 자원이 1개인데 이것으로는 어떤 프로세스의 기대 자원도 충족할 수 없다.

이는 현재 남은 자원으로는 어떤 프로세스도 끝낼 수 없다는 의미이다.

 

 

은행원 알고리즘에서는 현재 실행 중인 프로세스 가운데 하나라도 끝낼 수 있을 때 가용 자원을 할당해야 한다.

 

 

교착 상태 회피의 원칙은 교착 상태가 발생하지 않을 수준까지만 자원을 나누어 주는 것이다.

하지만 여기에는 문제가 있어 교착 상태 회피를 사용하지 않는다.

 

교착 상태 회피의 문제점은 아래와 같다.

 

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

모든 프로세스가 자신이 사용할 자원을 미리선언해야 하는데 이는 쉽지 않다.

또한 선언한 자원이 정확하지 않으면 회피에서도 교착 상태가 발생할 수 있다.

 

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

안정 상태나 불안정 상태를 파악하려면 시스템의 전체 자원 수가 고정적이어야 한다.

그러나 고장이나 새로운 자원이 추가되는 일이 빈번해 시스템의 자원 수가 유동적이다.

 

자원이 낭비된다.

만약 시스템에 자원 A는 10개, 자원 B는 9개가 있고 프로세스가 자원 A는 12개, 자원 B는 2개를 필요로 할 때

자원 B가 충분히 있음에도 할당받지 못한다.

 

또한, 모든 불안정 상태가 교착 상태가 되는 것은 아님에도 자원을 할당하지 않는 것은 자원 낭비이다.

 

예로, P2가 자원을 다 사용하지 않고 종료되면 다른 프로세스가 작업을 완료할 수 있다.

이는 교착 상태가 발생하지 않는데도 발생할 것이라 예상함으로써 자원 할당에 제약을 둔다.

 

다음엔 교착 상태 탐지에 대해 알아보겠습니당

 

 

 

 

 

 

 

 

* 해당 글은 '쉽게 배우는 운영체제'와 '운영체제' 책을 참고하여 작성하였습니다. 출처: 쉽게 배우는 운영체제 (조성호), 운영체제 10판 (Abraham Silberschatz)