1054 단어
5 분
데드락
2025-04-22

DeadLock#

TIP
  • 2개 이상의 프로세스가 다른 프로세스의 작업이 끝나기만을 기다리며 작업을 더이상 진행하지 못하는 상태
  • 다른 프로세스와 공유할 수 없는 자원을 사용할 때 발생

Resource#

  • 하드웨어, 소프트웨어 등을 포함하는 개념
  • 프로세스가 자원을 사용하는 절자

DeadLock의 필요 조건(필요 조건)#

아래 4 가지 조건이 모두 만족되어야 교착 상태

  • Mutual exclusion(상호 배제) : 자원의 특징
    • 가지고 있는동안은 독점적으로만 쓸 수 있음
  • No preemption (비선점) : 자원의 특징
    • 뻬앗기지 않음
  • Hold and wait(보유 대기) : 프로세스의 행위
    • 보유를 하면서 추가적인 자원을 기다림
  • Circular wait(순환 대기) : 프로세스의 행위
    • 자원을 기다리는 프로세스간에 사이클이 형성됨 자원의 특징은 바꿀 수 없기에, 프로세스의 행위를 예방하는 방식으로 교착 상태를 해결

Deadlock의 해결 방법#

  • Deadlock은 빈번히 발생하지 않기 때문에 미연에 방지하기 위해 오버헤드를 감수하는 것이 현대의 시스템에서는 비효율적

1️. 예방#

교착 상태를 유발하는 네 가지 조건이 발생하지 않도록 무력화

상호 배제 예방#

  • 자원의 특성은 바꿀 수 없음

비선점 예방#

  • 자원을 선점할 수 있도록(빼앗을 수 있도록) 함.
  • 마찬가지로 아무때나 뺏으면 문제가 될 수 있음
TIP

CPU, Memory는 왜 빼앗을 수 있을까?

  • State를 쉽게 save하고 restore할 수 있는 자원에서 주로 사용 (바로 다음 지점에서 재시작 가능)

점유와 대기 예방#

자원을 점유한 상태에서 다른 자원을 기다릴 수 없음 (전부 할당 or 아예 할당 x)

  1. 프로세스 시작 시 필요한 모든 자원을 전부 할당
  2. 자원이 필요할 경우 보유 자원을 모두 놓고 다시 요청

하지만 자원의 활용성이 떨어지므로 좋은 방식은 X

원형 대기 예방 → 가장 쉬운 방법#

  • 점유와 대기를 하는 프로세스들이 원형을 이루지 못하도록 막음
  • 모든 자원에 순서를 부여해 정해진 순서대로만 자원 할당

2. 회피 (비효율적)#

자원 할당량을 조절하여 교착 상태 해결#

  • 자원 요청에 대한 부가적인 정보를 이용해 deadlock의 가능성이 없는 경우에만 자원 할당

  • 교착 상태가 발생하는 범위 내에 있으면 프로세스 대기

  • 시스템 state가 원래 state로 돌아올 수 있는 경우에만 자원 할당

  • Available 범위 내의 Need인 프로세스의 요청을 받아들임

  • P0의 경우 Need(최대 요청)이 Available 내에선 만족할 수 없기 때문에 어떤 요청이 와도 자원을 내어주지 않음

  • P1의 경우Available 내에 Need가 충족이 되기 때문에(충분히 커버) P1은 어떤 요청이 와도 자원을 내어줌

3️. 검출과 회복#

어떤 제약을 가하지 않고 자원 할당 그래프를 모니터링 하며 교착상태가 발생하는지 확인하고, 교착 상태가 발생하면 교착 상태 회복 단계 진행

검출#

  • Resource의 인스턴스가 1개인 경우 : 자원할당 그래프에서의 cycle로 검출
  • Resource의 인스턴스가 여러개인 경우 : 테이블을 그려서 은행원 알고리즘으로 검출

회복#

  1. 데드락에 연류된 프로세스들을 죽임
  2. 데드락에 연류된 프로세스들을 하나씩 죽여서 자원을 뺏음

4️. 무시#

Deadlock이 일어나지 않는다고 생각하고 아무런 조취도 취하지 않음

  • Deadlock이 매우 드물게 발생하므로 deadlock에 대한 조치가 더 큰 overhead일 수 있음
  • 운영체제가 관여하지 않으므로, 사람이 프로세스를 직접 죽임
데드락
https://devlog.jpstudy.org/posts/2025/cs/deadlock/
저자
SY
게시일
2025-04-22
라이선스
CC BY-NC-ND 4.0