[OS] Deadlocks

Deadlock

  • 프로세스는 실행을 위해 여러 자원을 필요로 한다.
  • 교착상태 필요 조건
    • Mutual exclusion (상호배타)
    • Hold and wait (보유 및 대기)
    • No Preemption (비선점)
    • Circular wait (환형 대기)

교착상태 처리

교착상태 방지

  • Deadlock Prevention
  1. 상호배타

자원을 모두 공유 가능하게 하는 것 -> 원천적으로 힘든 방법이다.

  1. 보유 및 대기

어떤 자원을 가지고 있으면서 다른 자원을 기다리지 않게 하는 것 -> 동시에 두 개를 잡는 것 아니면 하나도 잡지 않게 하는 것

  1. 비선점

자원을 선점 가능하게 하기 -> 원천적으로 힘든 방법이다. (ex> 프린터)

  1. 환형대기

자원에 번호를 부여한다. 번호 오름차순으로 자원을 요청할 수 있도록 한다. -> 자원 활용률이 떨어진다.

교착상태가 처음부터 일어나지 않도록 한다.

교착상태 회피

  • Deadlock Avoidance

자원 요청에 대한 잘못된 승인에 의해 교착 상태가 일어났다. 자원 할당에 대해 불안전한 할당을 하였을 때, 교착상태가 일어난다. (unsafe allocation)

운영체제는 자원을 할당할 때, 불안전 할당으로 인한 교착상태가 발생하지 않도록 해야한다. (Banker’s Algorithm)

교착상태가 처음부터 일어나지 않도록 한다.

교착상태 검출 및 볼구

  • 교착상태가 일어나는 것을 허용한다.
  • 주기적으로 교착상태가 일어나는지 검사한다.
  • 교착상태가 발생하면 복구하도록 한다.

검출

주기적인 검사를 얼마나 해야할지?

검사에 따른 추가 부담이 크다. (overhead) : 계산, 메모리

복구

프로세스를 일부 강제 종료한다. 자원 선점하여 일부 프로세스에게 할당하도록 한다.

교착상태 무시

교착상태는 실제로 잘 일어나지 않는다.

교착상태에 대한 방안을 아무것도 쓰지 않도록 하는 것도 하나의 방안이 될 수 있다. 즉, 교착상태 발생시 재시동을 한다.