교착상태 해결책에는 교착상태가 발생하지 않도록 자원을 할당하는 프로토콜을 사용하는 방법으로써 예방(prevention)과 회피(avoidance) 그리고 교착상태를 허용하고 발생 여부를 탐지(detection)하여 복구(recovery)시키는 방법이 있다. 그러나 운영체제에서 교착상태에 대한 해결책을 지원하지 않을 경우에는 교착상태의 프로세스를 강제로 종료시키거나 재부팅(rebooting)할 수 밖에 없다.
교착상태 예방
교착상태 예방은 교착상태의 발생 가능성을 사전에 제거함으로써 예방하는 것이다. 교착상태의 원인(4가지) 중 어느 하나라도 만족하지 않도록 운영체제에서 자원을 관리함으로써 교착상태의 가능성을 사전에 제거할 수 있다. 이 방법은 개념적으로 간단명로하지만 자원 할당에 대한 지나친 제약으로 지원의 이용률이 매우 저하되는 단점이 있다.
1. 상호 배제 조건의 예방
상호 배제 조건은 두 개 이상의 프로세스가 공유 자원을 접근할 경우 상호 배제적으로 접근하는 것이다. 따라서 이 조건의 부정에 의한 교착상태 예방은 모든 자원을 두 개 이상의 프로세스들이 동시에 사용하도록 허용하는 것이다.
그러나 컴퓨터 시스템에서 사용되는 자원 중에는 물리적으로 동시에 사용하면 곤란한 것들이 있다.
ex) 읽기 전용의 파일에 대한 동시접근은 가능하지만 프린터 혹은 공유 메모리에 대한 접근은 한 프로세스가 사용중이면 다른 프로세스는 반드시 기다려야 한다. 그러므로 상호 배제 조건을 부정하는 예방책은 이론적으로 가능하지만 실질적으로 적용하기엔 곤란한 방법이다.
2. 점유 및 대기 조건의 예방
- 점유 및 대기 조건은 프로세스가 자신에게 할당된 자원을 점유하면서 또 다른 자원을 요청하는 것이다. 만약 요청한 자원이 다른 프로세스에게 할당되었을 경우 자원을 요청한 프로세스는 대기 상태에서 기다리게 된다. 따라서 이 조건의 부정에 의한 교착상태 예방은 점유 혹은 대기 상태를 허용하지 않도록 하는 것이다.
- 점유 상태를 부정하는 방법은 통제된 자원 할당(controlled resource allocation) 방식으로 모든 프로세스로 하여금 자신에게 할당된 자원을 반드시 해제한 상태에서만 새로운 자원을 요청하도록 하는 것이다. 이 방식은 자주 접근해야 하는 자원에 대해서도 해제 및 요청을 반복해야 하는 오버헤드가 있다.
- 대기 상태를 부정하는 방법은 최대 자원 할당(maximum resource allocation)방식으로 프로세스가 실행하기 전에 필요로 하는 최대 자원을 할당하는 것이다.
- 이 방식은 프로세스마다 최대 자원에 대한 정보를 예측하여 운영체제에 알려주어야 하는 오버헤드가 있다. 뿐만 아니라 필요로 하는 모든 자원을 한번에 점유하기 때문에 자원에 대한 이용률이 저하되고 프로세스의 기아현상(starvation)이 발생할 수 있는 단점이 있다.
3. 비선점 조건의 예방
- 비선점 조건은 다른 프로세스에게 이미 할당된 자원을 어떤 프로세스가 요청할 경우 그 자원을 강제로 선점하지 못하고 대기 상태에서 기다리게되는 것이다. 이 조건의 부정에 의한 교착상태 예방은 대기 상태의 프로세스가 점한 모든 자원에 대한 선점을 허용하도록 한다.
- 만약 어던 자원이 선점에 의해 해제될 경우 그 자원을 대기 목록에 추가시킨다. 따라서 선점된 프로세스가 다시 실행되기 위해서는 대기 목록에 등록된 모든 자원들을 다시 요청해야 하는 오버 헤드가 있다. 또한 프린터 혹은 테이프와 같은 자원에 대해서는 부적합하다.
4. 환형 대기 조건의 예방
환형 대기 조건은 N개의 프로세스{P0, P1, ... Pn-1}가 대기 상태에 있을 때는 P0는 P1이 점유하고 있는 자원을, P1은 P2가 점유하고 있는 자원을 Pn-1은 P0가 점유하고 있는 자원을 각각 점유하고 있는 자원을 Pn-1 P0가 점유하고 있는 자원을 각각 요청함으로써 대기 상태의 프로세스들이 환형 구조가 형성 되는 것이다. 이 조건의 부정에 의한 상태 예방은 모든 자원에 대하여 일련 번호를 여하고 각 프로세스의 자원 요청을 항상 오름차순 혹은 내림차순으로 제한함으로써 대기 상태의 프로세스들이 환형 구조를 허용하지 않도록 한다.
ex) 시스템이 보유하고 잇는 자원들 중에서 테이프, 디스크, 프린터의 일련번호가 각각 2, 7, 9라고 가정하고 오름차순으로 자원 요청을 제한하였을 때 디스크7와 프린터9를 필요로 하는 프로세스는 반드시 디스크7를 먼저 요청하도록 제한한다. 만약 프린터를 사용한 후 디스크를 요청하기 위해서는 디스크의 일련 번호보다 큰 자원들은 모두 헤제하도록 한다.
이 방법에서 자원들에 대한 일련 번호는 시스템 성능에 직접적인 영향을 미치기 때문에 실제 자원의 이용 순서를 정확히 예측하여 결정해야 하는 어려움과 새로운 자원이 추가될 때마다 전체 자원에 대한 일련번호를 재조정해야하는 오버헤드가 있다.
교착상태의 회피
교착상태 회피는 교착상태가 발생하기 위한 필요 조건을 만족하지 않도록 사전에 예방하는 것이 아니고 자원의 할당 상태를 검사하여 교착상태의 가능성을 회피해 나가는 방법이다. 이 방법은 예방책보다 자원의 이용률은 향상되지만 자원의 할당 상태를 검사하고 교착상태의 발생 가능성을 판단하는데 소요되는 오버헤드가 있다.
안전 및 불안전 상태
- 교착상태는 불안전 상태에 속한다. 그러나 불안전 상태라고 해서 반드시 교착상태는 아니지만 교착상태의 발생 가능성이 있음을 유의하여야 한다. 따라서 교착 상태 회피는 자원의 할당 상태를 검사하여 항상 안전 상태를 유지하도록 한다.
- 시스템 상태를 판단하기 위하여 프로세스마다 필요한 자원의 종류와 최대 개수를 제시하고 실행 과정에서 자신이 제시한 자원의 최대 개수 내에서 요청하도록 한다.
- 어떤 프로세스가 자원을 요청하였을 때 그 자원을 할당해 주었다고 가정하고 다른 모든 프로세스들이 임의의 순서로 실행이 가능하면 시스템은 안전 상태로 판단한다.
- 이때 프로세스들의 실행 순서를 안전순서(safe sequence)라고 한다. 만약 안전 순서가 존재하지 않으면 불안전 상태로써 교착상태의 발생 가능성이 있기 때문에 요청한 자원을 할당하지 않고 대기 상태에서 기다리게 한다.
- 운영체제에서는 이러한 상태를 판단하기 위하여 정보를 유지 관리하여야 한다.
- 자원별 사용 가능한 개수
- 각 프로세스가 제시한 자원별 최대 요구 개수
- 각 프로세스에게 현재 할당된 자원 별 개수
- 각 프로세스에게 추가적으로 할당되어야 할 자원 별 개수
안전 및 불안전 상태의 예
ex) 사용 가능한 프린터 자원이 12개인 시스템에서 3개의 프로세스(P1, P2, P3)에 대한 자원 할당 상태는 아래와 같다.
최대 요구 개수 | 현재 할당된 개수 | 추가되어야 할 개수 | |
P1 | 10 | 5 | 5 |
P2 | 4 | 2 | 2 |
P3 | 9 | 2 | 7 |
안전 상태 예시
각 프로세스에게 총 9개의 자원이 할당되었으므로 현재 사용 가능한 자원은 3개이다. 이 경우에는 안전 순서<P2, P1, P3>가 존재함으로 현재 시스템은 안전 상태이다. 위의 상황에서 P3가 자원 1개를 요청하여 이를 할당해 줄 경우, 현재 사용 가능한 자원은 2개이며 자원 할당상태는 아래와 같이 될 것이다.
최대 요구 개수 | 현재 할당된 개수 | 추가되어야 할 개수 | |
P1 | 10 | 5 | 5 |
P2 | 4 | 2 | 2 |
P3 | 8 | 3 | 6 |
불안전 상태의 예
안전 및 불안전 상태의 개념을 이용하여 교착상태 회피 알고리즘을 정의할 수 있다. 프로세스가 사용 가능한 자원을 요청할 경우 이를 할당했다고 가정한 상태에서 안전 여부를 검사하여 불안전 상태로 판단되면 요청한 프로세스를 대기 상태에서 기다리게 함으로써 항상 안전 상태를 유지하도록 한다.
교착상태 회피 알고리즘
교착상태 회피에는 자원 할당 그래프를 이용하는 방법과 은행원(Banker's) 알고리즘을 이용하는 방법이 있다.
1. 자원 할당 그래프를 이용한 알고리즘
- 각 자원 유형의 개수가 여러 개 일 경우에는 자원 할당 그래프에 사이클이 있다고 해서 교착상태의 프로세스가 반드시 존재하는 것이 아니다. 그러나 자원 유형의 개수가 오직 하나일 경우에는 자원 할당 그래프에 사이클이 존재하면 사이클에 속해있는 프로세스는 반드시 교착상태임을 알 수 있었다. 자원 할당 그래프를 이용한 알고리즘은 이러한 사실을 이용하여 교착상태 발생 여부를 판단하는 것으로써 각 자원의 유형이 오직 하나 존재하는 시스템일 경우에만 적용할 수 있으며 추가적인 요청이 제시되어야 한다.
ex)
안전상태에서 점선의 화살표는 추가적인 요청을 의미한다. 이와 같은 상황에서 P2에게 R2를 할당하게 되면 불안전 상태와 같이 사이클이 존재하기 때문에 교착상태가 발생하게 된데. 따라서 프로세스의 자원 요청이 있을 때 이를 할당해 주었다고 가정하고 자원 할당 그래프에 추가적인 요청에지를 포함하여 사이클 존재 여부를 검사하여 사이클이 형성되지 않을 경우에만 자원을 할당한다.
2. 은행원(Banker's)알고리즘
- 은행원 알고리즘은 컴퓨터 시스템의 자원 할당 정책을 은행에서 예금액을 대출하는 정책을 적용하는데서 유래한 것이다. 일반적으로 은행에서는 부도가 발생하지 않는 범위에서 예금액을 최대한 대출하여 이윤을 남겨야 한다. 이를 위하여 은행에서는 예금주가 예금액을 언제 찾아갈 것인가와 대출자가 언제 값을 것인가에 대한 정보가 필요하며 이 정보에 따라 대출 여부를 결정하게 된다. 이러한 정책은 운영체제에서 교착상태가 발생하지 않는 범위에서 시스템이 보유하고 있는 자원을 최대한 활용하려는 교착상태 회피책과 매우 유사하다.
- 은행원 알고리즘을 교착상태 회피책에 적용하기 위해서는 프로세스가 실행되는 동안에 필요로 하는 모든 자원의 유형과 각 자원에 대한 최대 개수에 대한 정보가 있어야 한다. 운영체제에서는 이 정보를 이용하여 프로세스의 자원 요청에 대한 할당 여부를 판단할 수 있다.
- 은행원 알고리즘에서는 시스템 상태를 판단하기 위하여 다음과 같은 자료 구조를 유지 관리한다.(프로세스와 자원의 유형의 개수를 각각 m, n으로 가정한다,)
- Available[n] : 모든 자원(n)에 대한 사용 가능한 개수.
(Available[j]=k 는 j 유형의 자원이 현재 k개 사용 가능함을 의미한다.) - MAX[m, n] : 각각의 프로세스(m)가 제시한 모든 자원(n)에 대한 최대 요구 개수
(Max[i, j]=k 는 프로세스 i가 j 유형의 자원을 최대 k개 요구함을 의미한다.) - Allocation[m, n] : 각각의 프로세스(m)에게 할당된 모든 자원(n)에 대한 개수
(Allocation[i, j]=k는 프로세스 i에게 j 유형의 자원이 k개 할당되었음을 의미한다.) - Need[m, n] : 각각의 프로세스(m가 주기적으로 필요로 하는 자원 (n)의 개수
(Need,[i, j] = k 는 프로세스 i가 j 유형의 자원이 k개 추가적으로 필요함을 의미한다.
(결국, Need[i, j] = Max[i, j] - Allocation[i, j]임을 유의할 것.)
위의 자료구조를 이용하여 안전성의 여부를 판단하는 안전 알고리즘(safety algorithm)을 정의할 수 있다.
- 임시 자료구조 Finish[m], Work[n]의 초기 값을 다음과 같이 선언한다.
Finish[i] : = false(1 <= m),
Work : = Avaliable - 다음의 조건을 동시에 만족하는 프로세스 (Pi)를 찾는다.
(조건 -1) : Finish[i] : = false
(조건 -2) : Need(i), <= Work
만약, 만족하지 않는 프로세스가 하나라도 존재하면 단계 4로 간다. - Work:=Work+Allocation(i)
Finish[i] : = true
단계 2로간다. - 모든 프로세스 (M)에 대하여 다음 조건을 만족하는지 조사한다.
(조건) : Finish[i] = true(1<=i<=m)
만약, 만족하지 않는 프로세스가 하나라도 존재하면 불안전 상태이다.
안전 알고리즘을 이용하여 어떤 프로세스가 자원을 요청할 경우 이에 대한 할당 여부를 결정하는 은행원 알고리즘은 다음과 같이 정의할 수 있다.(프로세스 Pi가 요청한 자원 유형에 대한 개수를 Request(i)로 표시한다.)
- 필요 이상의 자원을 요청하는지 조사한다.
(조건) : Request(i) <= Need(i)
만약, 만족하지 않으면 필요 이상의 자원을 요청한 것으로 오류(error)발생. - 요청한 자원이 할당 가능한지 조사한다.
(조건) : Request(i) <=Available
만약, 만족하지 않으면 자원이 부족함으로 프로세스 P(i)를 대기상태로 처리한다. - 프로세스 P(i)가 요청한 자원 할당을 가정하고 다음과 같이 자료구조를 수정한 후, 안전 알고리즘을 적용하여 안전성 여부를 판단한다.
Available := Available - Request(i)
Allocation(i) : = Allocation(i) + Request(i)
Need(i) : = Need(i) - Request(i)
만약 불안전 상태이면 프로세스 P(i)에게 자원을 할당하지 않고 대기 상태로 처리한 후 자료 구조를 원래대로 복구한다.
3. 은행원 알고리즘의 예
ex) 자원의 유형이 (R1, R2, R3)이고 각 자원의 개수가 (9, 5, 7)인 시스템에서 5개의 프로세스(P1, P2, P3, P4, P5)의 최대 요구와 이미 할당된 상태가 같다고 가정한다.
Max | Allocation | Need | |||||||
R1 | R2 | R3 | R1 | R2 | R3 | R1 | R2 | R3 | |
P1 | 6 | 5 | 3 | 0 | 1 | 0 | 6 | 4 | 3 |
P2 | 3 | 2 | 7 | 2 | 0 | 1 | 1 | 2 | 6 |
P3 | 2 | 1 | 5 | 1 | 0 | 2 | 1 | 1 | 3 |
P4 | 5 | 2 | 6 | 1 | 1 | 0 | 4 | 1 | 6 |
P5 | 4 | 3 | 4 | 0 | 0 | 2 | 4 | 3 | 2 |
안전 상태의 예
각 프로세스에게 할당된 유형별 자원의 총 개수가 (4, 2, 5)임으로 현재 사용 가능한 유형별 자원의 총 개수가 available = (5, 3, 2)이다. 이 경우에는 안전 순서 <P5, P3, P4, P1, P2>가 존재함으로 현재 시스템은 안전 상태라고 할 수 있다.
앞에서 정의한 안전 알고리즘을 적용할 경우 아래와 같다.
- Finish[1, 2, 3, 4, 5] = (F, F, F, F, F)
Work(1, 2, 3) = (5, 3, 2) - 다음의 조건을 동시에 만족하는 프로세스는 P5이다.
<조건-1> : Finish(5) : = F
<조건-2> : Neex(5) = (4, 3, 2) <= Work=(5, 3, 2) - Work[1, 2, 3] = (5, 3, 4)
Finish[1, 2, 3, 4, 5] = (F, F, F, F, T)
단계 2로 간다.
(동일한 방법으로 진행한다) - 모든 프로세스(P1, P2, P3, P4, P5)에 대한 다음의 조건을 만족하기 때문에 현재의 상태는 안전 상태임을 알 수 있다.
(조건):Finish[1, 2, 3, 4, 5] = (T, T, T, T, T)
위의 표와 같은 상황에서 임의의 프로세스(P3)가 자원(R1, R2, R3)을 각각 (1, 0, 1)씩 요청하였다고 가정한다. 즉, Request3=(1, 0, 1)을 가정한다. 이 경우 은행원 알고리즘은 다음과 같이 진행된다.
- Request3=(1, 0, 1) <= Need(3) = (1, 1, 3)을 만족하므올 오류(error)가 아니다.
- Request3 = (1, 0, 1) <= Available = (5, 3, 2)을 만족한다.
- P3가 요청한 자원 할당을 가정하고 자료구조를 아래의 표와 같이 수정한 후, 안전 알고리즘으로 안전성을 검사한다.
Max | Allocation | Need | |||||||
R1 | R2 | R3 | R1 | R2 | R3 | R1 | R2 | R3 | |
P1 | 6 | 5 | 3 | 0 | 1 | 0 | 6 | 4 | 3 |
P2 | 3 | 2 | 7 | 2 | 0 | 1 | 1 | 2 | 6 |
P3 | 2 | 1 | 5 | 2 | 0 | 3 | 0 | 1 | 2 |
P4 | 5 | 2 | 6 | 1 | 1 | 0 | 4 | 1 | 6 |
P | 4 | 3 | 4 | 0 | 0 | 2 | 4 | 3 | 2 |
불안전 상태의 예
각 프로세스에게 할당된 유형별 자원의 총 개수가(5, 2, 6)임으로 현재 사용 가능한 유형별 자원의 총 개수(Available = (4, 3, 1)이다. 이 경우에는 안전 순서가 존재하지 않기 때문에 불안전 상태이다. 결국 프로세스(P3)의 요청대로 자원을 할당하게 되면 모든 프로세스(P1, P2, P3, P4, P5)가 대기 상태에서 무한정 기다리는 교착상태가 발생하게 된다.
교착상태 탐지 및 회복
교착상태 탐지 및 회복은 교착상태의 발생을 허용하고, 주기적으로 교착 상태 발생 여부를 탐지(detection)한 후 이를 회복(recovery)해 나가는 방법이다. 이 방법은 가장 소극적인 해결책으로서 자원의 이용률은 향상되지만 주기적으로 교착상태를 탐지하고 이를 회복하는데 소요되는 오버헤드가 있다.
교착상태 탐지 알고리즘
교착상태 탐지에는 대기 그래프(wait-for-graph)를 이용하는 방법과 교착상태 탐지 알고리즘을 이용하는 방법이 있다.
- 대기 그래프(wait-for-graph)를 이용한 알고리즘
- 유형별 자원의 개수가 오직 하나일 경우에는 자원 할당 그래프에 사이클이 존재하면 사이클에 속해있는 프로세스는 반드시 교착상태임을 알 수 있었다. 이러한 사실을 이용하여 대기 그래프를 이용한 알고리즘은 유형별 자원의 개수가 오직 하나 존재하는 시스템일 경우에 교착상태 발생과 교착상태의 프로세스를 탐지하는 것이다.
- 대기 그래프는 자원 할당 그래프에서 자원에 해당된 노드를 삭제하고 오직 프로세스들 간의 대기 관계를 나타내는 그래프이다.
ex)대기 그래프를 이용한 알고리즘은 자원 할당 그래프를 변형한 대기 그래프에서 사이클 존재 여부를 검사함으로써 교착상태 발생과 교착상태으 ㅣ프로세스를 탐지하는 것이다.
- 교착상태 탐지 알고리즘
- 교착사태 탐지 알고리즘은 교착상태 회피를 위한 은행원 알고리즘과 매우 유사하며 유형별 자원의 개수가 다수일 때도 적용 가능하다.
- 임시 자료 구조 Finish[m], Work[n]의 초기 값을 다음과 같이 선언한다.
Work : Available
if Allocation(i) != 0 then Finish[i] : = false
else Finish[i] : = true(1<=i<=m) - 모든 프로세스(m)에 대하여 다음의 조건을 동시에 만족하는지 조사한다.
<조건-1>: Finish[i] = false;
<조건-2> : Request(i) <= Work
만약, 만족하지 않은 프로세스가 하나라도 존재하면 단계 4로 간다. - Work : = Work + Allocation(i)
Finish[i] : = true
단계 2로 간다. - 모든 프로세스(m)에 대하여 다음으 ㅣ조건을 만족하는지 조사한다.
(조건) : Finish[i] = true (1<= i <=m)
만약, 만족하지 않는 프로세스는 교착상태이다.
- 임시 자료 구조 Finish[m], Work[n]의 초기 값을 다음과 같이 선언한다.
- 교착사태 탐지 알고리즘은 교착상태 회피를 위한 은행원 알고리즘과 매우 유사하며 유형별 자원의 개수가 다수일 때도 적용 가능하다.
- 교착상태 탐지 알고리즘의 예
ex) 자원의 유형이 (R1, R2, R3)이고 각 자원의 개수가 (7, 2, 6)인 시스템에서 이들 자원에 대한 5개의 프로세스(P1, P2, P3, P4, P5)의 할당 및 요청 상태가 아래의 안전상태의 표와 같다고 가정
R1 | R2 | R3 | R1 | R2 | R3 | |
P1 | 0 | 1 | 0 | 0 | 0 | 0 |
P2 | 2 | 0 | 0 | 2 | 0 | 2 |
P3 | 3 | 0 | 3 | 0 | 0 | 0 |
P4 | 2 | 1 | 1 | 1 | 0 | 0 |
P5 | 0 | 0 | 2 | 0 | 0 | 2 |
안전 상태의 예
각 프로세스에게 할당된 유형별 자원의 총 개수가 (7, 2, 6)임으로 현재 사용 가능한 유형 별 자원의 총 개수 Available = (0, 0, 0)이다. 이 경우에는 탐지 알고리즘을 실행하면 모든 프로세스는 <P1, P2, P3, P4, P2, P5> 순서로 Finish[i] 값이 'true'로 될 것이다. 따라서 현재 상태는 교착상태의 프로세스가 존재하지 않는다.
위의 표와 같은 상황에서 P3가 R3를 하나 더 요청하였다고 가정하면 Request3 = (0, 0, 1)으로 가정하고, 이 경우 할당 및 요청 상태가 변경될 것이다.
Allocation | Request | |||||
R1 | R2 | R3 | R1 | R2 | R3 | |
P1 | 0 | 1 | 0 | 0 | 0 | 0 |
P2 | 2 | 0 | 0 | 2 | 0 | 2 |
P3 | 3 | 0 | 3 | 0 | 0 | 1 |
P4 | 2 | 1 | 1 | 1 | 0 | 0 |
P5 | 0 | 0 | 2 | 0 | 0 | 2 |
교착 상태의 예
이 상태에서 교착 탐지 알고리즘을 실행하면 P1을 제외한 나머지 프로세스의 Finish[i] 값이 'false'로 될 것이다. 따라서 P1을 제외한 모든 프로세스<P2, P3, P4, P5>는 교착상태로 탐지된다.
교착 상태 회복
교착 사태를 탐지한 후 이를 회복하는 방법에는 교착상태의 프로세스를 강제적으로 종료(termination)시키는 방법과 교착상태의 프로세스가 점유하고 있는 자원을 선점(preemption)시키는 방법이 있다.
- 프로세스 종료(termination)
교착 상태의 프로세스를 종료시킴으로써 이들 프로세스가 점유하고 있던자원을 회수하여 교착상태를 회복하는 방법이다. 교착상태의 프로세스를 종료시키는 압법에는 두 가지가 있다.
첫 번째 방법은 교착상태의 모든 프로세스를 한번에 종료시키는 가장 단순한 방식이다. 이 방식은 교착 상태를 확실하게 해결할 수 있지만 강제로 종료된 프로세스들을 다시 처음부터 실행시켜야 하는 오버헤드가 있다.
두 번째 방법은 교착상태가 해결될 때까지 교착 상태의 프로세스를 하나씩 종료해 나가는 방식이 있다. 이 방식에서는 프로세스를 종료시킬 때마다 교착상태 탐지 알고리즘을 실행 시켜야 하는 오버헤드가 있으며 어느 프로세스를 우선적으로 종료시킬 것인지에 대한 적절한 선정 기준이 요구된다. 이러한 기준은 최소의 피해가 발생할 프로세스를 우선적으로 선정하는 것이 중요하며 일반적으로 다음과 같은 사항을 고려하여 선정한다.- 프로세스의 우선 순위
- 지금까지 프로세스가 실행된 시간 및 앞으로 실행해야 할 시간
- 지금까지 프로세스가 사용한 지원 유형 및 개수
- 앞으로 프로세스가 필요로 하는 자원 유형 및 개수
- 다른 프로세스와의 관계
- 자원 선점(preemption)
교착상태의 프로세스가 점유하고 있는 자원을 선점하여 교착상태가 해결될 때까지 다른 프로세스에게 할당하는 방법이다. 이 방법을 보다 효과적으로 적용하기 위해서는 다음과 같은 문제에 대한 대책이 있어야 한다.- 희생자의 선택(selection of a victim) : 어떤 프로세스로부터 어떤 자원을 우선적으로 선점할 것인가?
이것은 교착상태의 프로세스를 하나씩 종료시킬 때 희생자 프로세스를 선정하는 요인과 유사하게 결정한다. - 복귀(rollback) : 자원을 선점당한 프로세스를 어떻게 복귀 시킬 것인가? 복귀에 대한 대책으로써 자원을 선점 당한 프로세스의 상태를 저장한 후 그 프로세스를 다시 실행시키도록 한다.
- 기아현상(starvation) : 동일한 프로세스가 매번 희생자로 선정될 경우 그 프로세스는 기아현상이 발생하게 된다. 이에 대한 대책으로써 희생자 횟수의 상한선을 정하여 상한선 이상은 계속적으로 희생자가 되지 않도록 한다.
- 희생자의 선택(selection of a victim) : 어떤 프로세스로부터 어떤 자원을 우선적으로 선점할 것인가?
Reference
개념 이해를 위한 운영체제
https://howudong.tistory.com/366
[OS] 교착 상태 회피와 자원 할당 알고리즘, 은행원 알고리즘
교착 상태 회피(Deadlock Avoidance) 교착 상태 예방의 단점 장치의 이용률이 저하됨 시스템 총 처리율(throughput)이 감소 교착 상태 회피 원리 자원이 어떻게 요청될지에 대한 추가 정보를 제공하도록
howudong.tistory.com
https://jihunn-kim.github.io/operating_system/operating_system_7/
운영체제 요약 - 7. 교착상태
Study blog
jihunn-kim.github.io
'CS > 운영체제' 카테고리의 다른 글
[Chapter 5] 개념 이해를 위한 운영체제 [메모리 관리 - 단일 프로그래밍 시스템] (0) | 2025.02.27 |
---|---|
[Chapter 5] 개념 이해를 위한 운영체제 [메모리 관리 - 개요] (0) | 2025.02.27 |
[Chapter 4] 개념 이해를 위한 운영체제 [교착상태 - 개요] (0) | 2025.02.26 |
[Chapter 3] 개념 이해를 위한 운영체제 [병행성 - 리눅스 병행성] (0) | 2025.02.25 |
[Chapter 3] 개념 이해를 위한 운영체제 [병행성 - 프로세스 간 통신] (0) | 2025.02.25 |