jisung-02notes
← Archive

Chapter 08. Deadlock

두 개 이상의 프로세스가 서로 상대방이 가진 자원을 기다리며 무한정 대기하게 되는 상태를 의미

jisung-02

Notion 원본 페이지의 강의 슬라이드와 설명을 바탕으로 정리한 노트입니다.


Deadlock Problem

Deadlock

  • 두 개 이상의 프로세스가 서로 상대방이 가진 자원을 기다리며 무한정 대기하게 되는 상태를 의미 = 두 개 이상의 프로세스가 상대방 프로세스에 의해 발생해야 하는 이벤트를 기다리며 무한정 대기하는 상태 → 위 코드에서는 P0과 P1에서 쓰인 두 가지 세마포어가 모두 1로 초기화되어있어 데드락 발생

Deadlock Characterization

  • 데드락은 총 4가지의 조건이 모두 동시에 충족되어야지 발생

1. Mutual Exclusion

  • 오직 한 번에 한 프로세스만 자원을 사용 가능

2. Hold and wait

  • 한 프로세스가 자원을 점유한 상태로 다른 자원을 추가로 요청하며 기다리는 상황
    • 이 자원은 다른 프로세스에 의해 점유되어있기 때문에 대기하는 상황이 됨

3. No preemtion

  • 점유된 자원은 프로세스가 작업을 마친 후 자발적으로 내려놓을 때만 해제될 수 있는 것
  • 다른 프로세스가 강제로 자원을 해제시켜 사용할 수 없는 상황

4. Circular wait

  • 프로세스 사이 순환적인 자원 대기 관계가 존재하는 상황
  • 프로세스들이 원형 고리처럼 서로의 자원을 사용하기 위해 기다리는 상황 → P0 → P1 → P2 → P0 의 형태로 자원 요청을 하는 경우를 말함

Handling Deadlock

  • 데드락을 처리하는 방법 4가지

1. Deadlock Prevention(데드락 방지)

  • 데드락이 발생하지 않도록 미리 설계 단계에서 방지하는 방법
  • 데드락을 발생시키는 4가지 조건 중 하나라도 만족하지 않게 보장하는 것 → 문제 발생 이전에 하는 것, 개발자가 주로 담당

2. Deadlock Avoidance(데드락 회피)

  • 자원 할당 시점에 데드락이 발생할 가능성이 있는지 미리 예측해 자원 요청을 승인하거나 거절하는 방법
  • 문제점
    • 커널 레벨에서 코드 분석을 전부 해야하므로 커널 오버헤드 증가

3. Deadlock detection and recovery(데드락 탐지 및 복구)

  • 데드락을 허용하고 이를 탐지해 해결하는 방법
  • 문제점
    • 프로세스를 찾는 리소스, 데드락을 해결하는 리소스가 사용됨

4. Deadlock ignorance(데드락 무시)

  • 데드락을 무시하는 방식
  • ex) Ostrich(타조) algorithm → 문제를 무시하면 없는 것과 같다

Dining Philosopher 문제 예시

기존 방식

  • 젓가락 자체가 Mutual Excusive한 공유 자원
  • 코드 자체가 No Preemption이라 가정
  • 한 철학자가 자신의 젓가락을 잡고 다른 젓가락을 사용하려고 대기
  • 각 철학자가 순환적으로 각자가 점유한 젓가락을 대기 ⇒ 데드락 발생

해결 방법

  • 상태 기반의 해결 방법으로 데드락 문제 해결
  • but, 특정 철학자가 계속 대기하는 Starvation문제는 여전히 발생 가능