운영체제 따라잡기

데드락 해결

meellon 2026. 6. 27. 05:00

학습 목표

데드락 대응 4가지 전략(예방·회피·탐지+복구·무시)을 비교할 수 있다.

Banker 알고리즘안전 상태(safe state) 를 유지하는 방식을 설명할 수 있다.

탐지 알고리즘희생자 선택(victim) 복구의 트레이드오프를 설명할 수 있다.

실무에서 락 순서·타임아웃·무시(ostrich) 중 무엇을 쓰는지 판단할 수 있다.

문제 상황

  • DB는 데드락 탐지 후 한 트랜잭션 롤백 — 애플리케이션은 그냥 락만 걸고 있다
  • 모든 요청을 한꺼번에 자원 할당하면 데드락은 줄지만 자원 이용률이 떨어진다
  • Banker는 교과서에만 있고 실제 OS는 다른 방식 — 왜 다른가
  • try_lock + backoff는 데드락 예방인가 회피인가 그냥 운인가

필요조건을 봤다. 이번 편은 OS·DB가 어떻게 다루는지 전략별로 정리한다.

1. 네 가지(다섯 가지) 접근

전략 아이디어
예방 (Prevention) 필요조건 하나를 **원천 차단** 락 전역 순서, all-or-nothing 요청
회피 (Avoidance) 요청 시 **안전한지 검사** 후 허용 Banker 알고리즘
탐지 + 복구 주기적으로 사이클 찾고 **희생자** 중단 DBMS, 일부 OS 옵션
무시 (Ignore) 데드락이 드물다고 가정 전통적 Unix — 개발자 책임
  • 대부분의 일반 OS는 예방·회피 비용이 커서 무시 + 개발자 가이드에 가깝다
  • DBMS는 탐지·복구가 표준 — 트랜잭션 비용을 감수할 가치가 있음

2. 예방 — 실무에서 쓰는 것

깨는 조건 기법 실무
순환 대기 락 ordering mutex A always before B
점유 대기 모든 락을 한 번에 획득 std::lock, pthread_mutex_timedlock 조합
상호 배제 읽기 공유 락(RW lock) 읽기 많은 캐시
  • all-or-nothing은 자원 낭비 — 잡기 전까지 아무것도 못 씀
  • 타임아웃 락은 데드락을 보장 제거하진 않지만 hang을 줄임 — 재시도 로직 필요

3. 회피 — Banker 알고리즘

각 프로세스의 최대 필요량 Max, 현재 할당 Allocation, 남은 가용 Available을 추적한다.

안전 상태: 어떤 순서 <P_i, …>모든 프로세스가 끝날 수 있는 상태.

  1. Need = Max - Allocation 계산
  2. AvailableNeed ≤ Available인 프로세스 찾기
  3. 가상 완료 → 자원 반환 → 반복
  4. 모두 완료 가능하면 안전 — 새 요청 허용 가능
  5. 불안전하면 거부 (프로세스 대기)
  • 단점: 프로세스 수·자원 종류를 미리 알아야 하고, 오버헤드 큼
  • 용도: 교육·이론, 일부 임베디드·자원 고정 환경

4. 탐지와 복구

탐지: RAG와 유사한 대기-for 그래프에서 사이클 검색 — 주기적 실행.

복구 방법 비용
프로세스 종료 전체 또는 희생자 하나 kill 작업 손실
자원 선점 상태 롤백·체크포인트 구현 어려움, DB는 undo log
  • 희생자 선택 기준: 우선순위, 실행 시간, 필요 자원 수, 트랜잭션 횟수 …
  • DB: 데드락 victim 트랜잭션 rollback → 애플리케이션 재시도

5. 무시 전략과 현실

Linux·Windows 커널은 범용 데드락 해결기를 돌리지 않는다.

  • 개발자: 락 순서, 락 범위 최소화, lock hierarchy lint
  • 런타임: Go deadlock detector(개발 모드), ThreadSanitizer
  • 인프라: watchdog, health check, orchestrator restart

6. 정리

  • 예방은 조건 파괴, 회피는 Banker·안전 상태, 탐지·복구는 DB급
  • 실무 앱: 순환 대기 제거 + 타임아웃·재시도가 현실적
  • 다음: Producer-Consumer 등 동시성 패턴 사례

다음에 다룰 것

  • 동시성 문제 사례
  • Producer-Consumer, Readers-Writers

해당 내용은 Operating System Concepts, 10/E (Avraham Silberschatz, Peter Baer Galvin, Greg Gagne) 의 내용을 기반으로 합니다.

'운영체제 따라잡기' 카테고리의 다른 글

메모리 관리 기초  (0) 2026.06.29
동시성 문제 사례  (0) 2026.06.28
데드락 기초  (0) 2026.06.26
동기화 도구  (0) 2026.06.25
CPU 스케줄링 기초  (0) 2026.06.24