솜은 코튼

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

OS

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

솜.코 2023. 5. 27. 16:52

2023.05.27 - [OS] - [OS] 교착 상태 (자원 할당 그래프, 식사하는 철학자 문제)

 

[OS] 교착 상태 (자원 할당 그래프, 식사하는 철학자 문제)

교착 상태 . 교착상태는 다른 프로세스의 잡업이 끝나기를 기다리며 작업을 진행하지 못하는 상태이다. 아사현상은 운영체제가 잘못된 정책을 사용하여 지연되는 문제이고, 교착상태는 여러 프

sommda.tistory.com

 

 

교착 상태 해결 방법

.

 

 

앞에서 교착 상태가 발생할 수 있는 4가지 조건에 대해 설명하였다.

이번엔 복잡한 교착 상태를 해결할 수 있는 방법에 대해 알아보자.

 

교착 상태를 해결하는 방법은 예방, 회피, 검출

교착 상태가 발견된 후에 자원을 회복하는 방법이 있다.

 

 

해결 방법   특징
교착 상태 예방   교착 상태를 유발하는 네 가지 조건을 무력화한다.
교착 상태 회피   교착 상태가 발생하지 않는 수준으로 자원을 할당한다.
교착 상태 검출   자원 할당 그래프를 사용하여 교착 상태를 발견한다.
교착 상태 회복   교착 상태를 검출한 후 해결한다.

 

 

1. 교착 상태 예방

.

 

상호 배제, 비선점, 점유와 대기, 선형 대기 중 하나라도 막는다면 교착 상태가 발생하지 않는다.

 

1-1. 상호 배제 예방

 

시스템 내에 독점적으로 사용할 수 있는 자원을 없애버리는 방법이다.

 

예로 변수나 파일에 동시 접근이 허용된다.

 

하지만 모든 자원을 공유 가능하도록 하는 것은 불가능하다..

앞에서 임계구역에 대해 설명할 때 동시 접근 시 결과값이 달라지는 것을 확인했다.

 

이 상황을 해결하기 위해 Mutex락 등을 사용하였는데, 이는 자원을 보호하기 위해 공유하지 못하도록 처리한 것이다.

 

또 다른 예로는 프린터를 공유하면 여러 데이터가 엉켜 출력물이 엉망이 될 것이다.

 

 

1-2. 비선점 예방

 

모든 자원을 빼앗을 수 있도록 만드는 방법이다.

 

하지만 임계구역을 보호하기 위해 잠금을 사용하면 자원을 빼앗을 수도 없고, 상호 배제도 보장할 수 없다.

 

설사 빼앗을 수 있도록 하더라도 기준을 정할텐데 이는 아사 현상을 일으킬 수 있다.

아사 현상은 에이징 기법으로 해결할 수 있다고 했다.

 

만약 에이징 기법을 사용하여 우선순위를 높여준다면 해당 프로세스가 점유하고 있는 자원은

비선점 자원이 되어 다시 교착 상태에 빠질 수 있다.

 

 

1-3. 점유와 대기 예방

 

프로세스가 자원을 점유한 상태에서 다른 자원을 기다리지 못하게 하는 방법이다.

 

즉, 전부 할당하거나 아니면 아예 할당하지 않는 방식을 적용하는 것이다.

이를 위해 프로세스는 시작 초기에 자신이 사용하려는 모든 자원을 한꺼번에 점유하거나

그렇지 못할 경우 자원을 모두 반납해야 한다.

 

 

 

위의 그림에서 P2는 P1이 먼저 자원을 사용하고 놓을 때까지 기다렸다 자원을 사용한다.

 

앞에 말한 상호 배제와 비선점 예방은 임계구역으로 보호받는 자원에 대한 제약을 풀어 어렵지만

점유와 대기 예방은 자원이 아닌 프로세스의 자원 사용 방식을 변화시켜 처리하여 의미가 있다.

 

하지만 이 방법도 아래와 같은 단점이 있다.

 

프로세스가 자신이 사용하는 모든 자원을 자세히 알기 어렵다.

프로세스가 필요한 자원을 모두 확보한 후 실행했는데

추가로 필요한 자원이 생기면 이를 다시 확보하기 어렵다.

 

자원의 활용성이 떨어진다.

프로세스가 앞으로 사용할 자원까지 미리 선점하여

그 자원을 필요로 하는 다른 프로세스의 작업이 진행되지 않는다.

이는 당장 사용하지 않을 자원까지 선점하는 것으로 낭비가 된다.

 

많은 자원을 사용하는 프로세스가 적은 자원을 사용하는 프로세스보다 불리하다.

자원을 많이 사용하는 프로세스는 자원을 동시에 확보하기가 어렵고

이는 아사 현상이 발생한다.

 

결국 일괄 작업 방식으로 동작한다.

자원을 확보한 순서대로 실행하면 그 자원을 획득한 프로세스가 끝내야 다른 프로세스가 작업을 할 수 있다.

결국 모든 작업이 일괄 처리 방식으로 처리되어 효율이 떨어진다.

 

 

 

P1이 자원 R1, R3, R4를 확보했고, P2와 P3가 R1을 원한다!

R1말고 겹치는 자원이 없지만 모든 자원을 확보해야 실행되기 때문에

P2와 P3는 P1이 끝날 때까지 기다려야 한다.

 

결국 모든 프로세스는 R1 때문에 일괄 작업 방식으로 처리된다.

 

 

1-4. 순환 대기 예방

 

점유와 대기를 하는 프로세스들이 원형을 이루지 못하도록 막는 방법이다.

 

즉, 자원을 한 방향으로만 사용하도록 설정함으로써 선형 대기를 예방할 수 있다.

모든 자원에 숫자를 부여하고 숫자가 큰 방향으로만 자원을 할당하는 것이다.

 

이는 숫자가 작은 자원을 잡은 상태에서 큰 숫자를 잡는 것은 허용하지만,

숫자가 큰 자원을 잡은 상태에서 작은 숫자를 잡는 것은 허용하지 않는다.

 

 

 

위의 그림에서 자원 R1의 번호가 작아 P2의 요청이 거절됨으로써 그래프에 원형이 생기지 않는다.

 

이 방법은 점유와 대기 예방보다 완화되었지만 아래와 같은 단점이 있다.

 

 

프로세스 작업 진행에 유연성이 떨어진다.

R2의 자원을 사용 후 R1의 자원을 사용할 수 없는데, 사용자 입장에서는 납득이 어렵다.

 

자원의 번호를 어떻게 부여할 것인지가 문제이다.

자원에 번호를 붙이는데 신중해야 하고 어떻게 붙이든 제약이 따른다.

 

 

위의 4가지 방법 중 상호 배제와 비선점을 예방하기 어려우며

점유와 대기, 순환 대기는 프로세스 작업 방식을 제한하고 자원을 낭비해 사용할 수 없다.

 

다음 내용엔 교착 상태 회피에 대해 알아보겠습니당

 

 

 

 

 

 

 

 

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