Deadlock
참고 자료
- 조성호 - 쉽게 배우는 운영체제 (6장 - 교착상태)
- 쉬운코드 - 데드락(교착상태)은 프로그램에 치명적이죠>)
1. Deadlock 이란?¶
- 두개 이상의 서로다른 프로세스 (쓰레드)가 자신의 자원을 가진 상태에서 서로가 가진 자원을 원하여 더이상 진행될 수 없는 교착상태
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
Created: December 27, 2022