데드락 예방

데드락 예방 조건

데드락은 상호 배제, 점유와 대기, 비선점, 순환 대기가 동시에 성립할 때 발생합니다. 예방은 발생 뒤 탐지하는 것이 아니라, 자원 사용 규칙을 바꿔 이 네 조건 중 적어도 하나가 성립하지 않게 만드는 방법입니다.

01

필요 조건 확인

데드락이 되려면 네 조건이 모두 필요하므로 시스템에서 어떤 조건이 강하게 존재하는지 봅니다.

conditions
02

점유와 대기 축소

자원을 한 번에 모두 요청하게 하거나, 추가 요청 전 보유 자원을 놓게 할 수 있습니다.

hold-wait
03

순서를 강제한다

모든 자원에 전역 순서를 부여하고 그 순서대로만 획득하게 하면 순환 대기를 막습니다.

ordering
04

예방 비용을 평가한다

너무 강한 예방은 병렬성을 낮추거나 starvation을 만들 수 있어 도메인별 균형이 필요합니다.

tradeoff
상호 배제
공유 가능한 자원으로 바꾸면 조건을 약화 읽기 전용 파일처럼 동시에 공유 가능한 자원은 lock이 필요하지 않을 수 있습니다.
share
비선점
자원을 강제로 회수할 수 있으면 조건을 깰 수 있음 CPU는 선점 가능하지만 프린터나 lock은 회수가 어렵습니다.
preempt
순환 대기
자원 획득 순서를 정해 cycle을 막음 실무에서 lock ordering은 가장 자주 쓰이는 예방 규칙 중 하나입니다.
order

네 조건 · 활용률 · 복구와 구분 점검

네 조건 문제를 보면 네 조건을 표로 표시해 어떤 조건을 깨는지 먼저 찾습니다.
활용률 예방이 자원을 놀게 만들거나 병렬성을 과하게 낮추지 않는지 봅니다.
복구와 구분 예방은 사전에 규칙을 바꾸는 것이고 탐지/복구는 발생 후 처리입니다.