Post

[OS] 교착 상태 (Deadlock)

3줄 요약
교착 상태(Deadlock)는 자원을 점유한 채 다른 자원을 기다리며 모든 프로세스가 멈춘 상태
4가지 조건(상호 배제, 점유와 대기, 비선점, 원형 대기)이 모두 충족될 때 발생
예방·회피·검출·무시 등 다양한 해결 방식이 존재

💻 컴퓨터 구조 & 운영체제 시리즈

이 시리즈는 『혼자 공부하는 컴퓨터 구조+운영체제』 (강민철 저)
+ 인프런 강의를 기반으로 개인적으로 복습 및 정리한 기록입니다.


💥 교착 상태(Deadlock)

일어나지 않을 사건을 기다리며 프로세스의 실행이 멈추는 상태

철학자 문제
위키백과

  1. 일정 시간 생각한다
  2. 왼쪽 포크가 사용 가능할 때까지 대기 → 가능하면 집어든다
  3. 오른쪽 포크가 사용 가능할 때까지 대기 → 가능하면 집어든다
  4. 두 포크를 모두 잡은 경우 식사를 한다
  5. 오른쪽 포크를 내려놓는다
  6. 왼쪽 포크를 내려놓는다
  7. 다시 1번으로 돌아간다

→ 모든 철학자가 동시에 한 손에 포크를 들고 다른 한 손의 포크를 기다리면 영원히 기다리는 상태가 발생

  • 공유 자원을 점유한 프로세스들이 서로 자원을 기다리며 무한 대기
  • 교착 상태는 시스템 자원의 비효율적 사용으로 이어짐

🔒 발생 조건 (4가지 모두 만족해야 발생)

  1. 상호 배제 (Mutual Exclusion)
    → 자원은 한 번에 한 프로세스만 사용할 수 있음

  2. 점유와 대기 (Hold and Wait)
    → 자원을 점유한 상태에서 다른 자원을 기다리는 상황

  3. 비선점 (No Preemption)
    → 다른 프로세스가 점유한 자원을 강제로 빼앗을 수 없음

  4. 원형 대기 (Circular Wait)
    → 각 프로세스가 다음 프로세스가 점유한 자원을 기다리는 순환 구조

이 중 하나라도 제거하면 교착 상태를 방지할 수 있음


🧭 자원 할당 그래프

  • 자원과 프로세스 간의 관계를 시각적으로 표현
  • 프로세스는 원으로, 자원은 사각형으로 표현
  • 사용할 수 있는 자원의 개수는 자원 사각형 내 ‘점’으로 표현
  • 프로세스가 자원을 할당 받아 사용 중이라면 자원에서 프로세스로 화살표로 표시
  • 프로세스가 자원을 기다리고 있다면 프로세스에서 자원으로 화살표로 표시
  • 프로세스: 원 / 자원: 사각형 / 할당: 자원 → 프로세스 / 요청: 프로세스 → 자원
  • 원형 구조가 발생하면 교착 상태 가능성

🛡️ 교착 상태 예방 (Prevention)

교착 상태 발생 조건 중 하나 이상을 제거

  • 상호 배제 제거
    → 자원을 모두 공유 자원으로 만들기 (현실적으로 불가능)

  • 점유와 대기 제거
    → 프로세스가 모든 자원을 한 번에 요청하거나 아무것도 요청하지 않도록 설정 (자원 활용률 ↓)

  • 비선점 제거
    → 자원이 선점 가능해야 함 (CPU는 가능, 대부분 자원은 어려움)

  • 원형 대기 제거
    → 자원에 번호를 매겨 순서대로 요청 (설계 복잡성 ↑)


💡 교착 상태 회피 (Avoidance)

교착 상태가 발생하지 않도록 자원을 조심스럽게 할당

  • 안전 상태 (Safe State)
    → 모든 프로세스가 순서대로 자원을 할당받고 종료할 수 있는 상태

  • 불안전 상태 (Unsafe State)
    → 교착 상태가 발생할 수 있는 상태

  • 은행원 알고리즘 (Banker’s Algorithm)

    • 은행원 알고리즘
      → 시스템 자원의 최대 요청량을 기반으로 안전 상태를 유지하면서 자원 배분

🛠️ 교착 상태 검출 후 회복

교착 상태를 일단 허용하고, 이후에 해결

  • 선점을 통한 회복
    → 특정 프로세스에서 자원을 회수하여 다른 프로세스에게 할당

  • 프로세스 강제 종료
    → 교착 상태에 있는 프로세스를 모두 또는 일부 강제 종료


🪶 교착 상태 무시: 타조 알고리즘

  • 타조 알고리즘
  • “교착 상태는 자주 발생하지 않으니 무시하자”
  • 실제로 대부분의 운영체제는 검출도 회피도 하지 않고 방치
  • 예: Linux, Windows

✅ 마무리 정리

교착 상태는 공유 자원을 둘러싼 프로세스 간 대기로 발생
4가지 조건이 모두 충족될 때 가능하며,
예방, 회피, 검출 및 회복 등 다양한 방식으로 대응 가능


📚 참고 자료


읽어주셔서 감사합니다 🙌
내용이 도움이 되었거나, 틀린 부분이 있다면 댓글이나 GitHub Issue로 알려주세요 😊

This post is licensed under CC BY 4.0 by the author.