← Blog로 돌아가기

2026년 4월 21일 · 조회수 0

CS / OS

[OS] 5. 데드락

본 글은 인프런 강의를 바탕으로 정리한 개인 학습 기록입니다.
출처: <그림으로 쉽게 배우는 운영체제>



목차

1. 데드락이란?
2. 데드락 해결



1. 데드락이란?


1) 교착상태란

  • 여러 프로세스가 서로 자원을 기다리며 멈춰 있는 상태
  • 누구도 작업을 끝내지 못하고 계속 기다리게 됨

2) 왜 발생하는가

  • 여러 프로세스가 공유자원을 함께 사용하려고 하기 때문
  • 공유자원이 없다면 교착상태도 발생하지 않음

3) 예시

도로 정체

  • 차들이 서로 길이 열리길 기다리며 멈춤
  • 이때 공유자원은 도로

식사하는 철학자 문제

  • 철학자들이 포크를 하나씩 집고
  • 나머지 포크를 기다리면
  • 모두가 서로를 기다리게 되어 교착상태가 생김

4) 교착상태 발생 조건 4가지

1. 상호배제

  • 어떤 자원은 한 번에 한 프로세스만 사용 가능
  • 예: 포크 하나를 두 사람이 동시에 사용할 수 없음

2. 비선점

  • 이미 다른 프로세스가 가진 자원을 강제로 빼앗을 수 없음

3. 점유와 대기

  • 한 자원을 가진 상태에서 다른 자원을 추가로 기다리는 것

4. 원형 대기

  • 자원을 기다리는 관계가 원형 구조를 이루는 것
  • 서로가 서로를 기다리는 상태가 됨

5) 의미

  • 위 4가지 조건이 모두 만족될 때만 교착상태가 발생함
  • 따라서 이 중 하나라도 깨지면 교착상태는 발생하지 않음


2. 데드락 해결


1) 교착상태 회피

  • 자원을 할당하기 전에 이 요청을 받아도 시스템이 안전한지 검사하는 방식
  • 목표는 항상 안전 상태를 유지하는 것임

2) 안전 상태와 불안전 상태

  • 안전 상태

    • 적절한 실행 순서가 존재해서
    • 모든 프로세스가 결국 필요한 자원을 받고 종료할 수 있는 상태
  • 불안전 상태

    • 당장 교착상태는 아닐 수 있지만
    • 교착상태에 빠질 위험이 큰 상태

3) 은행원 알고리즘

  • 프로세스에 자원을 주기 전에 앞으로도 모든 프로세스를 끝낼 수 있는지 확인하는 방식
  • 은행이 대출을 해주기 전에 파산하지 않을지 계산하는 것과 비슷함

4) 은행원 알고리즘에 필요한 정보

  • 전체 자원 수
  • 각 프로세스의 최대 필요 자원
  • 현재 각 프로세스에 할당된 자원 수
  • 현재 사용 가능한 자원 수
  • 그리고
    Need = Max - Allocated 를 계산함

5) 동작 방식

  • 현재 사용 가능한 자원으로 어떤 프로세스의 남은 필요량을 충족할 수 있는지 확인함
  • 가능하면 그 프로세스가 끝난다고 가정하고 자원을 반납받아 다음 프로세스를 검사함
  • 이런 순서가 끝까지 가능하면 안전 상태
  • 중간에 더 이상 진행할 수 없으면 불안전 상태

6) 은행원 알고리즘의 한계

  • 매번 안전성 검사를 해야 해서 비용이 큼
  • 프로세스의 최대 자원 요구량을 미리 알아야 함
  • 그래서 실제로는 비효율적인 경우가 많음

교착상태 검출 방식

7) 가벼운 검출 방식: 타이머 기반

  • 프로세스가 오랫동안 진행되지 않으면 교착상태로 간주하는 방식
  • 일정 시점의 작업 상태를 체크포인트로 저장해 둠
  • 문제가 생기면 롤백해서 다시 시작함

단점

  • 실제 교착상태가 아닌데도 단순히 오래 걸렸다는 이유로 잘못 판단할 수 있음

8) 무거운 검출 방식: 자원할당 그래프 기반

  • 운영체제가 자원할당 그래프를 유지함
  • 어떤 프로세스가 어떤 자원을 가지고 있고, 또 어떤 자원을 기다리는지 추적함
  • 그래프에 순환(cycle) 이 생기면 교착상태로 판단함

특징

  • 더 정확하게 교착상태를 찾을 수 있음
  • 대신 그래프를 계속 관리하고 검사해야 해서 오버헤드가 큼

9) 검출 후 해결

  • 교착상태를 일으킨 프로세스를 강제 종료할 수 있음
  • 또는 체크포인트로 롤백해서 복구할 수 있음

댓글

댓글을 불러오는 중...