데드락(Deadlock)


🖥️ 데드락(deadlock)이란?

데드락(deadlock)은 교착 상태(膠着狀態)라고도 불리며, 두 개 이상의 작업이 서로 상대방의 작업이 끝나기 만을 기다리고 있기 때문에 결과적으로 아무것도 완료되지 못하는 상태이다. 전산학에서 교착 상태란 다중 프로그래밍 환경에서 흔히 발생할 수 있는 문제이다. 이 문제를 해결하는 일반적인 방법은 아직 없는 상태이다.

🖥️ 데드락(deadlock)의 발생조건

  1. 상호배제(Mutual exclusion) : 프로세스들이 필요로 하는 자원에 대해 배타적인 통제권을 요구.
  2. 점유대기(Hold and wait) : 프로세스가 할당된 자원을 가진 상태에서 다른 자원을 기다림.
  3. 비선점(No preemption) : 프로세스가 어떤 자원의 사용을 끝낼 때까지 그 자원을 뺏을 수 없음.
  4. 순환대기(Circular wait) : 각 프로세스는 순환적으로 다음 프로세스가 요구하는 자원을 가지고 있음.

이 조건 중에서 한 가지라도 만족하지 않으면 교착 상태는 발생하지 않는다. 이중 순환대기 조건은 점유대기 조건과 비선점 조건을 만족해야 성립하는 조건이므로, 위 4가지 조건은 서로 완전히 독립적인 것은 아니다.

🖥️ 데드락(deadlock)의 해결방안

  1. 예방(Prevention) : 데드락이 발생하는 조건을 파악하고, ‘상호배제’, ‘점유대기’, ‘비선점’, ‘순환 대기’ 이 4가지 발생조건이 일어나지 않도록 사전에 막아버리는 것.
  2. 회피(Avoidence) : 데드락이 발생하지 않을 정도로만 조심스럽게 자원을 할당하는 방식

    안전 상태(Safe State) : 자원을 할당받고 종료될 수 있는 상태 불안정 상태(Unsafe State) : 교착 상태가 발생할 수도 있는 상태

데드락을 회피하기 위해서는 시스템 상태가 안전 상태에서 안전 상태로 움직이는 경우에만 자원을 할당하면 됨. 즉, 데드락 회피 기법은 항상 안전 상태를 유지하도록 자원을 할당하는 방식.

  1. 탐지(Detection) : 운영체제는 프로세스들이 자원을 요구할 때마다 모두 할당해주며, 데드락 발생 여부를 주기적으로 검사함. 이로써 나온 검사 결과로 데드락이 발생했다고 탐지함.
  2. 회복(Recovery) : 탐지가 완료 되면, 선점프로세스 강제 종료이 두 방법으로 회복함.

    선점을 통한 회복

    • 데드락이 해결될 때 까지 한 프로세스씩 자원을 몰아주는 방식. 다른 프로세스로부터 자원을 강제로 빼앗은 뒤, 해당 자원들을 한 프로세스에 할당해줌.

프로세스 강제 종료를 통한 회복

  • 프로세스를 강제로 종료시켜서 데드락을 회복함으로써, 가장 단순하면서 확실한 방식. 운영체제는 데드락에 빠진 프로세스들을 모두 강제 종료할 수도 있고 데드락이 없어질 떄 까지 한 프로세스만 강제 종료할 수도 있다. 하지만 많은 프로세스들이 작업한 내역을 잃게 될 수 있다.

출처 :
· https://ko.wikipedia.org/wiki/%EA%B5%90%EC%B0%A9_%EC%83%81%ED%83%9C
· https://haon.blog/cs/os/deadlock/


© 2024. All rights reserved.

Powered by Hydejack v9.2.1