Skip to content

Deadlock

#os

참고 자료

1. Deadlock 이란?

  • 두개 이상의 서로다른 프로세스 (쓰레드)가 자신의 자원을 가진 상태에서 서로가 가진 자원을 원하여 더이상 진행될 수 없는 교착상태

deadlock.png


2. Deadlock 필요 조건

리소스의 조건

  • Non-preemetive - 리소스 반환은 오직 그 리소스를 취득한 프로세스 만이 할 수 있다.
  • Mutual Exclusion - 자원을 공유해서 사용할 수 없다.

프로세스의 조건

  • Circular Wait - 프로세스들이 Circular 하게 서로의 자원을 요구한다.
  • Hold and Wait - 프로세스가 이미 하나 이상의 자원을 확보한 상태에서 다른 프로세스가 확보안 자원을 요구한다.

3. Deadlock 해결 방법

1. Deadlock 예방

Deadlock 의 필요조건 네가지중 단 하나라도 성립되지 않으면 Deadlock 은 발생하지 않습니다. Deadlock 예방은 프로세스의 전체 흐름과 구성을 미리 파악해 필요조건이 발생하지 않도록 전체 시스템을 설계하는 것입니다.

하지만 이 방법은 현실적으로 어렵습니다. 리소스의 특성상 Mutual Exclusion 이나 Non-preemetive 를 포기하게 만들기 어려운 경우가 많습니다. Hold and Wait 의 예방을 위해 자원을 모두 확보하고 프로세스를 진행하게 한다면 Starvation 이 발생하거나 자원 사용율이 매우 낮은 상황이 발생하게됩니다. Circular Wait 을 예방하는 방식으로 자원에 순서체계를 부여하고 오름차순으로만 요청할 수 있도록 설계하는 방식도 있습니다.

2. Deadlock 회피

Deadlock 회피는 시스템에 전체 할당된 자원의 수를 일정량 이하로 유지시켜서 Deadlock 이 발생하지 않도록 하는것입니다. 대표적으로 Banker 알고리즘이 여기에 속합니다. Banker 알고리즘은 자원 요청을 허락해줬을 때 데드락이 발생할 가능성이 있으면 요청을 거절하는 알고리즘입니다.

3. Deadlock 감지와 복구

Deadlock 을 허용하고 데드락이 발생하면 이를 복구하는 것입니다.

복구 방법

  • 프로세스를 종료하여 해결하는 방법 (한번에/ 하나씩)
  • 리소스의 일시적인 선점을 허용하여 해결

4. Deadlock 무시

Deadlock 을 무시해버리는 방법에서는 운영체제를 믿고 타임아웃등으로 알아서 처리되기를 기다립니다. 현실적으로 가장 많이 활용됩니다.


Last update: February 27, 2023
Created: December 27, 2022