티스토리 뷰

CS/운영체제

DeadLock에 대해 설명해주세요.

개발기록 :) 2023. 7. 17. 00:40

DeadLock

  • 둘 이상의 thread가 각기 다른 thread가 점유하고 있는 자원을 서로 기다릴 때, 무한 대기에 빠지는 상황을 말한다.
  • deadlock이 발생하는 조건은 상호 배제(mutual exclusion), 점유 대기(hold-and-wait), 비선점(no preemption), 순환 대기(circular wait)이다. 이 4가지 조건이 동시에 성립할 때 발생할 수 있다.
  • deadlock 문제를 해결하는 방법에는 무시, 예방, 회피, 탐지-회복의 4가지 방법이 있다.

 


Deadlock이 발생하는 조건

상호 배제(mutal exclusion)

  • 동시에 한 thread만 자원을 점유할 수 있는 상황이다.
  • 다른 thread가 자원을 사용하려면 자원이 방출될 때까지 기다려야 한다.

 

점유 대기(hold-and-wait)

  • thread가 자원을 보유한 상태에서 다른 thread가 보유한 자원을 추가로 기다리는 상황이다.

 

비선점(no preemption)

  • 다른 thread가 사용 중인 자원을 강제로 선점할 수 없는 상황이다.
  • 자원을 점유하고 있는 thread에 의해서만 자원이 방출된다.

 

순환대기(circular wait)

  • 대기 중인 thread들이 순환 형태로 자원을 대기하고 있는 상황이다.

 


Deadlock 해결 방법

무시

  • deadlock 발생 확률이 낮은 시스템에서 아무런 조치도 취하지 않고 deadlock을 무시하는 방법

 

예방

  • 교착 상태의 4가지 발생 조건중 하나가 성립하지 않게 하는 방법

 

회피

  • thread가 앞으로 자원을 어떻게 요청할지에 대한 정보를 통해 순환 대기 상태가 발생하지 않도록 자원을 할당하는 방법

 

탐지-회복

  • 시스템 검사를 통해 deadlock 발생을 탐지하고, 이를 회복시키는 방법