데드락(Deadlock, 교착 상태)

이상우·2022년 2월 15일
0

데드락(Deadlock)이란?

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

데드락의 해결방법

데드락의 해결방법은 크게 3가지로 분류할 수 있다.
1. 데드락이 발생하지 않도록 예방하기
2. 데드락 발생 가능성을 인정하면서도 적절하게 회피하기
3. 데드락 발생을 허용하지만 데드락을 탐지하여, 데드락에서 회복하기

데드락(Deadlock)의 발생조건

  • 상호 배제
    한 번에 프로세스 하나만 해당 자원을 사용할 수 있다. 사용 중인 자원을 다른 프로세스가 사용하려면 요청한 자원이 해제될 때까지 기다려야 한다.

  • 점유 대기
    자원을 최소한 하나 보유하고, 다른 프로세스에 할당된 자원을 점유하기 위해 대기하는 프로세스가 존재해야 한다.

  • 비선점
    이미 할당된 자원을 강제로 빼앗을 수 없다는 의미

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

1. 데드락 예방

  • 상호 배제
    방지 하는 방법: 한 번에 여러 프로세스가 공유 자원을 사용할 수 있게 한다.(이러면 추후 동기화 관련 문제가 발생할 수 있다.)

  • 점유 대기
    방지 하는 방법: 프로세스 실행에 필요한 모든 자원을 동시에 요구하고 허용할 때까지 작업을 보류해서, 나중에 또다른 자원을 점유하기 위한 대기 조건을 성립하지 않도록 한다.

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

  • 순환 대기
    방지 하는 방법: 자원을 순환 형태로 대기하지 않도록 일정한 한쪽 방향으로만 자원을 요구할 수 있도록 한다.

데드락 예방은 시스템의 처리량이나 효율성을 떨어뜨리는 단점이 발생할 수 있다.

2. 데드락 회피

데드락 회피법은 앞서 예방법보다 조금 덜 제한적인 방법으로 예방법의 단점을 일부 해결할 수 있다.

  • 안정 상태(Safe state)
    시스템의 프로세스들이 요청하는 모든 자원을, 데드락을 발생시키지 않으면서도 차례로 모두에게 할당해 줄 수 있는 것

  • 안전 순서(Safe sequence)
    특정한 순서로 프로세스들에게 자원을 할당, 실행 및 종료 등의 작업을 할 때 데드락이 발생하지 않는 순서를 찾을 수 있는 것

3. 데드락 탐지 및 회복

먼저 시스템이 데드락 예방이나 회피법을 사용하지 않았을 때, 데드락이 발생할 수 있으니 여기에서 회복하기 위해 데드락을 탐지하고, 회복하는 알고리즘을 사용한다.

  • 탐지 기법
    Allocation, Request, Available 등으로 시스템에 데드락이 발생했는지 여부를 탐색한다. 현재 시스템의 자원 할당 상태를 가지고 파악한다. 이 외에도 자원 할당 그래프를 통해 탐지하는 방법도 있다.

  • 회복 기법
    데드락을 탐지 기법을 통해 발견했다면, 순환 대기에서 벗어나 데드락으로부터 회복하기 위한 방법을 사용한다.

단순히 프로세스를 1개 이상 중단시키기
1. 교착 상태에 빠진 모든 프로세스를 중단시키는 방법: 계속 연산중이던 프로세스들도 모두 일시에 중단되어 부분 결과가 폐기될 수 있는 부작용이 발생할 수 있다

2.프로세스를 하나씩 중단 시킬 때마다 탐지 알고리즘으로 데드락을 탐지하면서 회복시키는 방법: 매번 탐지 알고리즘을 호출 및 수행해야 하므로 부담이 되는 작업일 수 있다.
자원 선점하기
프로세스에 할당된 자원을 선점해서, 교착 상태를 해결할 때까지 그 자원을 다른 프로세스에 할당해 주는 방법

참고 사이트

profile
구상한것을 구현할 수 있는 개발자가 되고 싶습니다.

0개의 댓글