![[운영체제] 교착 상태 예방, 회피, 검출 후 회복](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbMhekS%2FbtsHbM7Dpsg%2Fs1T6kWB8IUw9Sk3PWPp63K%2Fimg.png)
교창 상태를 알고 있다는 가정하에 설명합니다. 여기를 먼저 읽고 와주세요!
교착 상태를 해결하기 위해서 예방, 회피, 검출 후 회복 방법이 존재합니다.
- 예방 : 애초에 교착 상태가 발생하지 않도록 자원 분배
- 회피 : 교착 상태가 발생하지 않도록 조절하다가, 발생 시에 자원 할당 중지
- 검출 후 회복 : 교착 상태가 발생하면 회복
교착 상태 예방
교착 상태가 발생하기 위해서는 아래 4가지 조건을 모두 만족해야 합니다.
즉, 1가지라도 만족하지 않으면 교착상태가 발생하지 않습니다.
- 상호 배제
- 점유와 대기
- 비선점
- 원형 대기
상호 배제
상호 배제란 하나의 자원에 임계구역을 설정하여 하나의 프로세스만 접근할 수 있도록 하는 방법입니다.
상호 배제를 없앤다는 것은 하나의 자원에 대하여 여러 프로세스가 접근할 수 있음을 의미합니다.
이론적으로 가능하지만, 현실적으로 모든 자원의 상호 배제를 없애기란 어렵습니다.
점유와 대기
점유와 대기란 이미 자원을 할당받은 프로세스가 다른 자원을 할당받기 위해 대기하고 있는 상태를 의미합니다.
이를 없앤다는 것은 하나의 프로세스에 모든 자원을 할당하거나, 아예 할당받지 못하게 됩니다.
프로세스가 모든 자원을 할당받게 되면 굳이 필요하지 않은 자원까지 할당받는 문제가 발생합니다.
이는 다른 프로세스가 자원을 할당받지 못하게 됩니다.
이는 사용하지 자원을 할당받게 되어, 막상 해당 자원을 필요로 하는 프로세스가 대기하게 됩니다. 따라서 자원의 활용률이 낮아집니다.
비선점
비선점이란 프로세스가 자원을 사용 중일 때, 사용이 완료될 때까지 다른 프로세스가 해당 자원에 접근할 수 없음을 의미합니다.
즉, 사용 중인 자원을 강제로 뺏을 수가 없습니다.
나무를 출력하기 위해 프린터 자원을 사용 중이던 프로세스 A가 있습니다. 강아지를 출력하기 위한 프로세스 B가 프로세스 A가 사용 중이던 자원을 강제로 뺏어버리면 나무가 출력되고 있다가 강아지가 출력되는 문제가 발생합니다.
원형 대기
원형 대기란 자원 할당 그래프가 원의 모형으로 이루어져 있음을 의미합니다.
원형 대기를 없애기 위해서는 모든 자원에 숫자를 붙이면 됩니다. 프로세스는 자원을 오름차순으로 사용하면 됩니다.
즉 한 방향으로만 자원을 사용하도록 하는 것이죠.
그러나 모든 자원에 숫자를 붙이는 것은 현실적으로 불가능하고, 자원을 사용하는 유연성이 사라지게 됩니다.
교착 상태 회피
교착 상태 회피란 교착 상태가 발생하지 않을 정도로 자원 분배를 조절하는 것입니다.
전체 조건으로 한정된 자원을 무분별한 할당으로 인해 발생하는 문제입니다.
교착 상태 회피를 설명하기 위해서 3가지 용어를 알아야 합니다.
- 안전 상태 : 교착 상태가 발생하지 않고 모든 프로세스가 자원을 할당받아서 사용하는 상황
- 불안전 상태 : 교착 상태가 발생할 수도 있는 상황
안전 상태
- 전체 자원 개수 : 12개
- 이미 할당된 자원 개수 : 9개
- 남은 자원 개수 : 3개
- 전체 자원 개수 : 12개
- 이미 할당된 자원 개수 : 11개
- 남은 자원 개수 : 1개
- 전체 자원 개수 : 12개
- 이미 할당된 자원 개수 : 7개
- 남은 자원 개수 : 5개
- 전체 자원 개수 : 12개
- 이미 할당된 자원 개수 : 12개
- 남은 자원 개수 : 0개
- 전체 자원 개수 : 12개
- 이미 할당된 자원 개수 : 2개
- 남은 자원 개수 : 10개
- 전체 자원 개수 : 12개
- 이미 할당된 자원 개수 : 9개
- 남은 자원 개수 : 3개
- 전체 자원 개수 : 12개
- 이미 할당된 자원 개수 : 0개
- 남은 자원 개수 : 12개
불안전 상태
- 전체 자원 개수 : 12개
- 이미 할당된 자원 개수 : 10개
- 남은 자원 개수 : 2개
- 전체 자원 개수 : 12개
- 이미 할당된 자원 개수 : 12개
- 남은 자원 개수 : 0개
- 전체 자원 개수 : 12개
- 이미 할당된 자원 개수 : 8개
- 남은 자원 개수 : 4개
여기서 문제가 발생합니다. 프로세스 A와 C는 5개, 6개의 자원을 필요로 합니다. 그러나 현재 남은 자원의 개수는 4개이므로 어느 프로세스에도 할당할 수가 없습니다. 프로세스 A와 C는 서로가 보유하고 있는 자원을 할당받길 기다리게 됩니다. 이를 교착 상태가 발생했다고 합니다.
따라서 교착 상태를 피하기 위해서는 안전 상태인 경우에만 자원을 할당하면 됩니다.
교착 상태 검출 후 회복
교착 상태 예방과 회피와 달리 검출 후 회복 방법은 교착 상태가 발생하는 것을 인정합니다.
대신 사후 조치를 통해 교착 상태를 해결합니다.
선점 방식
기존의 비선점 방식이 아닌 선점 방식을 사용합니다. 교착 상태가 해결될 때까지 기존의 프로세스가 사용 중이던 자원을 빼앗아 다른 프로세스에게 자원을 할당합니다.
프로세스 강제 종료
교착 상태를 유발하는 프로세스를 강제로 종료시킵니다.
이는 교착 상태를 한 번에 해결할 수 있으나, 진행 중이던 작업 내용을 잃게 될 가능성이 있습니다.