교착 상태
교착 상태란 두 개 이상의 프로세스가 서로 가지고 있는 자원을 무작정 기다리려 결국은 아무것도 진행되지 못하는 상태를 뜻합니다.
교착 상태를 해결 하기 위해서는
첫째, 교착 상태가 발생했을 때 상황을 정확히 알아야 하고
둘째, 교착 상태가 발생하는 근본적인 원인을 알아야 합니다.
우선 교착 상태가 발생했을 때 상황을 정확히 알기 위하여 이를 그래프로 표현하는 방법부터 알아보겠습니다.
자원 할당 그래프
자원 할당 그래프는 다음과 같이 4가지 규칙으로 그려집니다.
1. 프로세스는 원으로, 자원의 종류는 사각형으로 표현합니다.
2. 사용할 수 있는 자원의 갯수는 자원 사각형 내에 점으로 표현합니다.
3. 프로세스가 어떤 자원을 할당 받아 사용 중이라면, 자원에서 프로세스를 향해 화살표를 표시합니다.
4. 프로세스가 어떤 자원을 기다리고 있다면 프로세스에서 자원으로 화살표를 표시합니다.
예를 들어 위와 같은 그림이 있다면, SSD에서 사용 가능한 자원은 2개, CPU도 2개, 프린터는 1개가 있는
상황이며, 프로세스는 다음과 같은 상황으로 이해할 수 있습니다.
프로세스 A - SSD 자원 1개 사용
프로세스 B - CPU 자원 1개 사용
프로세스 C - CPU 자원 1개, 프린터 자원 1개 사용
프로세스 D - 프린트 자원의 할당을 기다리는 상태
프로세스 E - CPU 자원의 할당을 기다리는 상태
저희가 오늘 공부할 교착상태는 다음과 같은 자원할당그래프가 원의 형태를 띄고 있을때 발생하게 됩니다.
다음으로 교착 상태를 해결하기 위해 두번째로 알아야 하는 교착 상태가 발생하는 근본적인 원인에 대해 살펴 보도록 하겠습니다.
교착 상태 발생 조건
교착 상태가 발생하는 조건은 4가지입니다.
1. 상호 배제
2. 점유와 대기
3. 비선점
4. 원형 대기
각각의 조건에 대해 자세히 살펴보도록 하겠습니다.
상호배제
자원을 한번에 하나의 프로세스만 이용 가능 했기 때문에 교착 상태가 발생합니다. 프로세스가 사용하는 자원을
다른 프로세스가 사용 할 수 없을 때, 즉 상호 배제의 상황에서 교착 상태가 발생합니다.
점유와 대기
자원을 보유 한 채로 다른 자원을 기다리기 때문에 교착 상태가 발생합니다. 점유와 대기는 자원을 할당 받은 상태에서
다른 자원의 사용을 기다리는 상태를 뜻합니다.
비선점
교착 상태가 발생하는 근본적인 문제는 프로세스 자원을 비선점 하고 있었기 때문입니다. 비선점은 자원은
프로세스의 작업이 끝나야 이용 할 수 있습니다. 어떤 프로세스도 해당 프로세스를 강제로 빼앗지 못하기 때문에
교착 상태가 발생합니다.
원형 대기
위에서 살펴본 자원할당 그래프가 원의 형태를 띄고 있을 때, 교착상태가 발생하는 것 처럼, 프로세스들과 자원이
원의 형태를 이루면 교착상태가 발생할 수 있습니다.
그렇다면 이러한 교착상태를 어떠한 방법으로 해결할 수 있을까요?
교착 상태 해결 방법
1. 운영체제는 교착 상태 발생 조건에 부합하지 않게 자원을 분배하여 교착 상태를 예방 할 수도 있고
2. 교착 상태의 위험이 있다면 자원을 할당하지 않는 방식으로 회피를 할 수 도 있습니다.
3. 또한 교착 상태가 검출 되면 교착 상태를 회복하는 방법을 취할 수도 있습니다.
운영체제가 행하는 각각의 해결방법에 대해 자세히 살펴보도록 하겠습니다.
교착 상태 예방
교착 상태를 예방하는 방법은 앞서 살펴본 교착 상태에 필요 조건 네 가지 중 하나라도 충족하지 못하게 만드는 것입니다.
교착 상태는 4가지 조건이 모두 충족되어야 발생하기 때문이죠.
이제부터 각각의 조건을 없애는 방법에 대해 살펴보도록 하겠습니다.
상호 배제 해결 방법
모든 자원을 프로세스들이 공유를 가능하게 만들면 가능합니다. 하지만, 현실적으로 모든 자원의 상호배제를
없애는 것은 불가능하기에 현실적으로 어렵습니다.
점유와 대기를 해결하는 방법
프로세스에 자원을 모두 할당하거나 아예 할당하지 않는 방식으로 해결 가능합니다. 하지만 이는 자원의 활용률이
낮아질 우려가 존재합니다.
A라는 프로세스가 모든 자원을 할당받는데, C라는 자원은 아직 사용하지 않는 상태임에도 이를 가지고 있게 됩니다.
B라는 프로세스는 모든 자원을 할당 받지 못하는데, C라는 자원만 있으면 프로세스를 진행할 수 있습니다.
만약 C라는 자원을 B라는 프로세스에 먼저 할당하게 된다면, 자원의 활용률이 더 높아지고, 효율적으로 작동할 것입니다.
비선점 해결하는 방법
비선점 조건을 없애려면, 프로세스로 부터 자원을 빼앗을 수 있어야 합니다. 이 방식은 선점하여 사용할 수 있는 일부
자원에 대해서는 효과적입니다만, 프린터와 같이 이용하는 도중에 다른 프로세스가 빼앗아 사용하기 힘든 자원은
선점하는 방식으로 사용하기 힘듭니다. 따라서 범용성이 다소 떨어지는 방안이라 할 수 있습니다.
원형 대기 해결 방벙
모든 자원에 번호를 부팅고 오름차순으로 자원을 할당하면 원형 대기는 발생하지 않습니다. 하지만 모든
컴퓨터 시스템 내에 존재하는 수많은 자원에 번호를 붙이는 일은 그리 간단한 작업이 아니며, 어떤 번호를
붙이는지에 따라 자원의 활용률이 떨어질 수 있는 단점을 지닙니다.
교착 상태 회피
교착 상태 회피란 교착 상태가 발생하지 않을 정도로 조심해서 자원을 할당하는 방식입니다.
프로세스들에 배분 할 수 있는 자원의 양을 고려하여 교착 상태가 발생하지 않을 정도의 양만큼만 자원을 배분하는 방법이
교착 상태 회피 방법입니다.
교착 상태가 발생하지 않고 모든 프로세스가 정상적으로 자원을 할당받고 종료될 수 있는 상태를 안전상태라 부릅니다.
반면 교착 상태가 발생할 수도 있는 상황을 불안정 상태라고 부릅니다.
안전 순서열이란 교착 상태 없이 프로세스들에 자원을 할당할 수 있는 순서를 의미합니다. 다시 말하면 불안전 상태는
이러한 안전 순서열이 없는 상황을 뜻합니다.
예시를 들어 설명하자면 총 12개의 자원을 3개의 프로세스가 나누 쓰는 상황을 가정해봅시다.
프로세스 | 자원 요구량 | 현재 사용량 |
P1 | 10 | 5 |
P2 | 4 | 2 |
P3 | 9 | 2 |
이와 같은 경우 안전 순서열은 P2 - P1 - P3가 됩니다.
현재 사용량은 5 + 2 + 2 = 9 이므로 총 자원의 갯수 12 - 9 = 3이 가용할 수 있는 현재 자원이 됩니다.
P2가 프로세스를 끝내기 위해서 필요한 추가적인 자원 요구량은 4 - 2 = 2개입니다.
P2에 2개의 자원을 배치하여 P2 프로세스를 끝내면 총 4개의 자원이 반환되어 가용할 수 있는 현재 자원은 5개가 됩니다.
P1프로세스가 종료되려면 필요한 자원 요구량은 5개이므로 현재 자원량 5개를 배치합니다.
P1프로세스가 종료되면서 가용할 수 있는 자원은 5 + 5 = 10이 됩니다.
P3 는 7개의 자원이 필요한데, 현재 가용할 수 있는 자원이 10개이므로 P3 또한 교착 상태 없이 안전하게 처리할 수 있습
니다.
이와 같은 경우를 안전 상태 라고 합니다.
교착 상태 검출 후 회복
교착상태 검출 후 회복은 교착 상태 발생을 인정하고 사후에 조치하는 방식입니다. 해당 방식은 프로세스들이 자원을
요구할 때마다 모든 자원을 할당하며, 교착 발생 상태 여부를 주기적으로 확인합니다.
만약 교착 상태가 검출된다면 다음과 같은 조치를 취하게 됩니다.
1. 선점을 통한 회복
선점은 통한 회복은 교착상태가 해결될 때 까지, 한 프로세스씩 자원을 몰아 주는 방식입니다. 다른 프로세스로
부터 자원을 가엦로 빼앗고 한 프로세스에 할당하는 방식이라고 이해하면 됩니다.
2. 프로세스 강제 종료를 통한 회복
교착 상태를 해결한 가장 단순하면서 확실한 방식입니다. 운영체제는 교착 상태가 없어질 떄 까지
한 프로세스씩 강제종료 시키거나, 교착 상태에 놓인 모든 프로세스를 강제 종료 시킬 수 있습니다.
이상으로 운영체제의 교착상태 원인과 해결방안에 대해 살펴보았습니다.
글 읽어주셔서 감사합니다.
참고 도서
혼자 공부하는 컴퓨터 구조+운영체제 | 강민철 | 한빛미디어- 교보ebook
누구를 위한 책인가요? ● 개발자가 되고 싶어 컴퓨터 구조와 운영체제를 배우려고 하는 비전공자, 일반인 ● 컴퓨터 구조와 운영체제의 기본 용어조차 헷갈리는 학부생 ● 취업을 위해 기술 면
ebook-product.kyobobook.co.kr
'CS > 운영체제' 카테고리의 다른 글
가상 메모리란? (4) | 2023.05.07 |
---|---|
연속 메모리 할당의 문제점은? (0) | 2023.05.03 |
프로세스 동기화란 (0) | 2023.03.15 |
PCB와 Context Switching이란? (0) | 2023.03.01 |
프로세스와 스레드에 대하여 (0) | 2023.03.01 |