Post

교착 상태(deadlock)

교착 상태란

  • 두 개 이상의 작업이 상대방의 작업이 끝나기만을 기다리고 있기 때문에 결과적으로 아무것도 완료되지 못하는 상태
    • A 스레드가 B 스레드에 할당된 자원을 기다리고 있지만, B 스레드도 A 스레드에 할당된 자원을 기다리고 있는 경우
  • 서로 마주 보고 있는 기차가 서로가 비켜주길 기다리는 상태와 같다.

교착 상태의 조건

다음 네 조건을 동시에 모두 만족해야 교착 상태가 발생한다.

  1. 상호배제(Mutual exclusion)
    1. 프로세스들이 필요로 하는 자원에 대해 배타적인 통제권을 요구
    2. 자원은 한 번에 하나의 프로세스만이 사용할 수 있다.
    3. 다른 프로세스는 이미 점유 중인 자원을 사용하기 위해 기다려야 한다.
  2. 점유대기(Hold and wait) 
    1. 프로세스는 최소한 하나의 할당된 자원을 가진 상태에서 다른 자원을 기다려야 한다.
  3. 비선점(No preemption)
    1. 프로세스는 다른 프로세스가 자원의 사용을 끝낼 때까지 그 자원을 뺏을 수 없다.
  4. 순환대기(Circular wait) :
    1. 각 프로세스가 순환적으로 다음 프로세스가 요구하는 자원을 가지고 있다.
    2. 점유대기 조건과 비선점 조건을 만족해야 성립한다.

교착 상태의 관리

일반적으로 교착 상태를 해결하기 위한 세 가지 방법이 있다.

  1. 교착 상태를 무시하고 시스템에서 교착 상태가 절대 일어나지 않는다고 가정한다.
    1. Linux와 Windows를 포함한 대부분의 운영 체제가 사용하는 방법
    2. 교착 상태에 빠지지 않도록 프로그램을 작성해야 한다.
  2. 교착 상태를 예방하고 회피하기 위한 프로토콜을 사용하여 시스템이 절대 교착 상태로 들어가지 않도록 한다.
  3. 시스템이 교착 상태에 들어가는 걸 감지하고 해결한다.

교착 상태 예방

교착 상태의 네 가지 조건 중 최소한 한 개의 조건 상황이 발생하지 않도록 해 교착 상태를 예방한다.

  • 상호배제 조건의 제거
    • 공유 가능한 자원은 상호배제 조건이 필요하지 않기 때문에 교착 상태를 예방할 수 있다.
      • 읽기 전용 파일은 대표적인 공유 가능한 자원이다.
    • 하지만 어떠한 자원들은 본질적으로 공유 불가능하기 때문에 상호배제 조건을 제거해도 교착 상태를 완벽히 예방할 수 없다.
  • 점유와 대기 조건의 제거
    • 프로세스가 자원을 요청할 때 그 프로세스는 다른 자원을 가지고 있지 않도록 해야 한다.
    • 사용 가능 프로토콜
      1. 각 프로세스가 실행되기 전에 모든 자원을 할당시킨다.
      2. 프로세스는 자원이 전혀 없을 때만 자원을 요청한다.
    • 자원을 사용하는데 효율성이 낮으며, 기아 상태가 발생할 수 있는 문제점이 있다.
      • 기아 상태: 프로세스가 끊임없이 필요한 컴퓨터 자원을 가져오지 못하는 상황
  • 비선점 조건의 제거
    • 이미 선점 중인 자원을 요구할 때 실행을 멈추고 그 자원을 내주고, 다시 해당 자원을 가져올 수 있는 경우 재실행한다.
  • 환형 대기 조건의 제거
    • 자원 유형에 따라 순서를 매긴다.

교착 상태 회피

  • 자원이 어떻게 요청될지에 대한 추가정보를 요구하여 이를 바탕으로 시스템이 교착 상태가 발생하지 않도록 자원 할당 상태를 검사한다.
  • 교착 상태 회피를 위한 알고리즘으로 크게 두 가지가 있다.
    1. 자원 할당 그래프 알고리즘 (Resource Allocation Graph Algorithm)
    2. 은행원 알고리즘 (Banker’s algorithm)

교착 상태 무시

예방 혹은 회피기법을 프로그래밍해서 넣으면 성능에 큰 영향을 미칠 수 있게 된다. 그렇기 때문에 데드락의 발생 확률이 비교적 낮은 경우 별다른 조치를 취하지 않는다.

교착 상태 감지 및 해결

교착 상태를 감시/발견하는 알고리즘을 이용해 교착 상태 발생을 확인하고 해결한다.

요약

  • 교착 상태란 두 개 이상의 작업이 상대방의 작업이 끝나기만을 기다리고 있기 때문에 결과적으로 아무것도 완료되지 못하는 상태이다.
  • 교착 상태는 상호배제, 점유대기, 비선점, 순환대기, 이 네 가지 조건이 모두 만족하여야 발생된다.
  • 교착 상태 관리에는 예방, 회피, 무시, 감지 및 해결 방법이 존재한다.

참고 자료

This post is licensed under CC BY 4.0 by the author.