DeadLock - 교착상태

1. DeadLock 이란?


운영체제에서 데드락이란, 시스템 자원에 대한 요구가 뒤엉킨 상태를 뜻한다. 즉 둘 이상의 프로세스가 다른 프로세스가 점유하고 있는 자원을 서로 기다릴 때 무한 대기에 빠지는 상황을 일컫는다. 

 

데드락 예시

예를 들어 위와 같은 상황을 가정해보자.

현재 컴퓨터 시스템은 위와 같이 두 개의 프로세스 A, B 를 실행 중이다.

  • 프로세스 A는 자원 A 를 사용해 작업 A 를 진행 중이다.
  • 프로세스 B는 자원 B 를 사용해 작업 B 를 진행 중이다.

프로세스는 다음 작업을 시작해야 현재 사용하고 있는 자원의 점유를 해제한다고 가정해보자. 그렇다면 작업 A 와 작업 B 는 서로가 점유하고 있는 자원을 얻을 때 까지 자기 자신의 자원 점유를 해제하지 못하므로, 두 개의 프로세스 모두 다음 작업을 진행하지 못하고 무한 대기 상태에 빠지게 된다.

 

 

2. DeadLock의 발생조건


데드락이 발생하기 위한 조건은 크게 4가지로 말할 수 있다. 해당 조건 중 하나라도 만족하는 경우, 데드락이 발생할 수 있는 가능성이 있다는 뜻이다. 

  • 상호 배제
    • 한 번에 프로세스 하나만 해당 자원을 사용할 수 있다.  다른 프로세스가 해당 자원을 사용하려면, 요청한 자원이 해제될 때 까지 대기해야 한다. -> 위에서 설명한 예시의 조건에 해당한다.

 

  • 점유 대기
    • 자원을 최소한 하나 보유하고, 다른 프로세스에 할당된 자원을 점유하기 위해 대기하는 프로세스가 존재해야 한다. -> 위 데드락 발생 예시에서도, A라는 자원을 점유하고, B 자원을 대기하는 프로세스 A가 존재했었다.

 

  • 비선점
    • 이미 할당된 자원을 강제로 뺏을 수 없다. -> 만약 할당된 자원을 강제로 뺏을 수 있으면, 무한 대기 상태에 빠지지 않는다.

 

  • 순환 대기
    • 대기 프로세스의 집합이 순환 형태로 자원을 대기하고 있어야 한다.

      순환 대기

3. DeadLock 해결법


데드락 현상을 해결하는 방법은 크게 4가지로 분류할 수 있다.

 

  1. 데드락이 발생하지 않도록 예방
  2. 데드락을 회피하기
  3. 데드락 발생을 허용하지만, 데드락을 탐지하여, 회복하기
  4. 데드락 무시

4. DeadLock 예방


데드락을 예방한다는 뜻은, 위에서 설명한 데드락의 발생조건 4가지 중 하나라도 발생하지 않게 처리하는 것을 뜻한다. 예방으로 데드락을 확실하게 방지할 수 있지만, 모든 작업에 추가적인 오버헤드가 붙는 것이나 마찬가지이므로, 자원을 매우 많이 소모하고 처리량이나 효율성이 매우 떨어진다는 단점이 있다.

 

  • 상호 배제 방지
    • 한 번에 여러 프로세스가 공유 자원을 사용할 수 있게 한다 -> 동기화 관련 문제가 발생할 가능성이 매우 높다.
    • 동기화 문제란, 여러 프로세스가 동일한 자원을 사용하는 과정에서 다른 작업의 결과가 끝나기 전 데이터를 읽어가 데이터의 일관성이 사라지는 현상을 뜻한다.

 

  • 점유 대기 조건 방지
    • 프로세스 실행에 필요한 모든 자원을 한꺼번에 요구하고, 허용할 때 까지 작업을 보류 -> 위 예시를 가지고 설명하자면, 프로세스 A 가 필요한 자원 A,B 를 모두 가져가서 작업을 진행한다. 이 때 프로세스 B 는 자원 B 를 점유하지 않았으므로 아무 작업도 진행할 수 없다.

 

  • 비선점 조건 방지
    • 이미 다른 프로세스에게 할당된 자원이 선점권이 없다고 가정할 때 (=다른 프로세스가 자원을 뻇을 수 있다고 가정할 때), 높은 우선 순위의 프로세스가 해당 자원을 선점할 수 있도록 한다.

 

  • 순환 대기 조건 방지
    • 자원을 순환 형태로 대기하지 않도록 일정한 한 쪽 방향으로만 자원을 요구

 

5. DeadLock 무시


Window, Unix 등 현재 대부분의 운영체제들이 적용하고 있는 방법으로, DeadLock 현상의 발생이 매우매우 적은 횟수로 발생할 경우, 이를 방지하기 위해 추가적인 비용을 소비하기 보다는 그냥 DeadLock 을 무시하고 발생할 때마다 사용자로 하여금 재부팅을 하는 방법이 사용된다. (블루스크린, 블랙스크린)

블루스크린