데드락(Deadlock)
🖥️ 데드락(deadlock)이란?
데드락(deadlock)은 교착 상태(膠着狀態)라고도 불리며, 두 개 이상의 작업이 서로 상대방의 작업이 끝나기 만을 기다리고 있기 때문에 결과적으로 아무것도 완료되지 못하는 상태이다. 전산학에서 교착 상태란 다중 프로그래밍 환경에서 흔히 발생할 수 있는 문제이다. 이 문제를 해결하는 일반적인 방법은 아직 없는 상태이다.
🖥️ 데드락(deadlock)의 발생조건
- 상호배제(Mutual exclusion) : 프로세스들이 필요로 하는 자원에 대해 배타적인 통제권을 요구.
- 점유대기(Hold and wait) : 프로세스가 할당된 자원을 가진 상태에서 다른 자원을 기다림.
- 비선점(No preemption) : 프로세스가 어떤 자원의 사용을 끝낼 때까지 그 자원을 뺏을 수 없음.
- 순환대기(Circular wait) : 각 프로세스는 순환적으로 다음 프로세스가 요구하는 자원을 가지고 있음.
이 조건 중에서 한 가지라도 만족하지 않으면 교착 상태는 발생하지 않는다. 이중 순환대기 조건은 점유대기 조건과 비선점 조건을 만족해야 성립하는 조건이므로, 위 4가지 조건은 서로 완전히 독립적인 것은 아니다.
🖥️ 데드락(deadlock)의 해결방안
- 예방(Prevention) : 데드락이 발생하는 조건을 파악하고, ‘상호배제’, ‘점유대기’, ‘비선점’, ‘순환 대기’ 이 4가지 발생조건이 일어나지 않도록 사전에 막아버리는 것.
- 회피(Avoidence) : 데드락이 발생하지 않을 정도로만 조심스럽게 자원을 할당하는 방식
안전 상태(Safe State) : 자원을 할당받고 종료될 수 있는 상태 불안정 상태(Unsafe State) : 교착 상태가 발생할 수도 있는 상태
데드락을 회피하기 위해서는 시스템 상태가 안전 상태
에서 안전 상태
로 움직이는 경우에만 자원을 할당하면 됨. 즉, 데드락 회피 기법은 항상 안전 상태를 유지하도록 자원을 할당하는 방식.
- 탐지(Detection) : 운영체제는 프로세스들이 자원을 요구할 때마다 모두 할당해주며, 데드락 발생 여부를 주기적으로 검사함. 이로써 나온 검사 결과로 데드락이 발생했다고 탐지함.
- 회복(Recovery) : 탐지가 완료 되면,
선점
및프로세스 강제 종료
이 두 방법으로 회복함.선점을 통한 회복
- 데드락이 해결될 때 까지 한 프로세스씩 자원을 몰아주는 방식. 다른 프로세스로부터 자원을 강제로 빼앗은 뒤, 해당 자원들을 한 프로세스에 할당해줌.
프로세스 강제 종료를 통한 회복
- 프로세스를 강제로 종료시켜서 데드락을 회복함으로써, 가장 단순하면서 확실한 방식. 운영체제는 데드락에 빠진 프로세스들을 모두 강제 종료할 수도 있고 데드락이 없어질 떄 까지 한 프로세스만 강제 종료할 수도 있다. 하지만 많은 프로세스들이 작업한 내역을 잃게 될 수 있다.
출처 :
· https://ko.wikipedia.org/wiki/%EA%B5%90%EC%B0%A9_%EC%83%81%ED%83%9C
· https://haon.blog/cs/os/deadlock/