운영체제는 교착 상태를 예방, 회피, 검출 후 회복할 수 있습니다.

교착 상태 예방

전에 교착 상태에 대해서 설명했을 때, 교착 상태 발생 필요 조건 네 가지 중 하나를 충족하지 못한다면 교착상태가 발생하지 않는다고 설명했습니다.

프로세스들에 자원을 할당할 때 상호 배제, 점유와 대기, 비선점, 원형 대기 중 하나의 조건이라도 만족시키지 않게 할당하면 교착 상태가 발생하지 않고 예방할 수 있습니다.

1. 상호 배제(Mutual Exclusion)

상호 배제를 없애기 위해서는 자원을 공유 가능하게 만들어야 합니다. 그렇지만 현실적으로 이러한 방법이 불가능한 경우가 많습니다.

2. 점유와 대기(Hold and Wait)

이 조건을 없애기 위해서는 자원을 가지고 있는 상태에서 다른 자원을 기다리지 않도록 만들어야 합니다.

만약 여러 개의 자원이 필요하다면 필요한 모든 자원을 얻을 수 있는 경우에만 해당 자원을 요청합니다. 또는 필요한 자원 중 일부만 가지는 경우 할당받은 자원을 모두 OS에 반납합니다.

하지만 이와 같은 방법은 자원의 활용률을 저하시키고, 기아(starvation) 현상이 발생하는 단점이 있습니다.

3. 비선점(Non-Preemption)

비선점을 없애기 위해서는 반대로 선점이 가능하도록 만들어야 합니다. 이 역시 대부분의 자원에게는 불가능한 방법입니다. CPU는 강제로 스위칭하는 것이 가능한 경우가 있지만, 대부분의 경우에는 불가능합니다.

4. 원형 대기(Circular Wait)

이 조건을 없애는 것은 위 세 가지 조건보다는 할 수 있는 확률이 높습니다. 대표적인 예는 모든 자원에 번호를 부여하여 이 번호에 대한 오름차순으로 자원을 요청하는 것입니다. 이 역시 자원의 활용률을 저하시키는 단점이 존재합니다.

이러한 교착 상태 예방은 교착 상태가 발생하지 않음을 보장할 수 있지만 여러 부작용이 따릅니다.

교착 상태 회피

교착 상태가 발생하지 않을 정도로만 조심 조심 자원을 할당하는 방식입니다.

교착 상태 회피에서는 교착 상태를 한정된 자원의 무분별한 할당으로 인해 발생하는 문제로 간주합니다. 따라서, 교착상태 회피에서는 안전 상태불안전 상태 두 가지로 나뉩니다.

안전 상태는 교착 상태가 발생하지 않고 모든 프로세스가 정상적으로 자원을 할당받고 종료될 수 있는 상태를 말하며, 불안전 상태는 교착 상태가 발생할 수 있는 상황을 말합니다.

거기에 교착 상태 없이 안전하게 프로세스들에 자원을 할당할 수 있는 순서를 의미하는 것안전 순서열이라고 부르며, 이러한 안전 순서열이 존재하는 상태를 안전 상태라고 합니다.

운영체제가 교착 상태를 회피하기 위해 시스템 상태가 안전 상태에서 안전 상태로 움직이는 경우에만 자원을 할당하면 되며, 항상 안전 상태를 유지하도록 자원을 할당하는 방식이라고 볼 수 있습니다.

교착 상태 검출 후 회복

교착상태 예방과 회피는 사전에 교착상태를 일어나지 않도록 하는 방법이지만, 교착상태 검출 및 회복 방법은 교착상태가 일어나는 것을 허용합니다. 그 대신, 교착상태가 일어났을 때 이를 인지하고 복구를 해야 합니다.

교착상태가 일어나는 것을 감지하기 위해 운영체제 내부에서 주기적으로 교착상태가 발생하였는지 검사해야합니다. 그 주기의 길이가 짧으면 그 만큼 오버헤드가 크고, 주기가 길면 오버헤드는 줄일 수 있지만 복구 가능성이 낮아집니다.

회복하는 방법은 교착상태가 발생하는지 주기적으로 검사하듯이 메모리의 상태를 주기적으로 메모리에 저장해놓고 만약 교착상태가 발생하면 그 이전 상태로 되돌리는 방법이 있습니다. 그 외에도 일부 프로세스를 강제로 종료하거나 자원을 강제로 선점하여 프로세스에게 할당해주는 방법 등이 있습니다.

교착상태 검출 및 복구는 교착상태 자체가 매우 드문 현상이므로 자유롭게 자원을 분배하다가 교착상태가 발생하면 이를 정상적인 상태로 복구하는 것입니다. 하지만 복구를 제대로 하지 못할 수도 있고, 검출을 위해 추가적인 오버헤드가 발생한다는 단점이 있습니다.

교착 상태 무시

교착상태는 매우 드문 상황이기 때문에 이를 위해 오버헤드를 감수하는 것이 비효율적인 환경도 존재할 수 있습니다. 그러한 환경은 교착상태에 대한 아무런 조치를 하지 않고 무시하는 방법도 있습니다.

이상으로 교착 상태 해결 방법에 대해서 간단히 알아봤습니다.

참고

  • KOCW - 운영체제, 양희재 교수님
  • 혼자 공부하는 컴퓨터구조 + 운영체제
profile
꾸준함으로 성장하는 개발자 지망생

0개의 댓글