DeadLock (케빈)

도두맨·2025년 1월 3일

공부

목록 보기
1/23

테코톡의 케빈의 Deadlock을 보고 주관적으로 정리한 내용입니다.

개념

  • 두 개 이상의 프로세스 혹은 스레드가 한정된 자원을 얻지 못해 다음 처리를 진행하지 못하는 상태

Deadlock 발생 조건

  1. 상호 배제 (mutual exclusion) - 하나의 공유 자원에 두 개 이상의 프로세스가 동시에 접근할 수 없음
  2. 점유 대기 (hold and wait) - 하나의 자원을 점유하고 있는 프로세스가 있고 해당 프로세스가 다른 프로세스에서 자원을 얻기 위해서는 요청을 하고 대기해야 함
  3. 비선점 (no preemption) - 특정 프로세스가 자원을 사용하고 있을 때, 그 자원을 뺏을 수 없음
  4. 순환 대기 (circular wait) - 프로세스들이 서로 사용하고 있는 자원에 대해 순환적으로 대기하고 있는 형태 (cycle 형태)
  • 이 모든 조건을 만족하면 deadlock이 발생

Deadlock 해결 방법

  1. 예방
  2. 회피
  3. 탐지 및 회복
  4. 무시

예방

  • 네 가지 발생 조건 중 하나를 제거함으로써 해결
  1. 하나의 공유 자원에 대해 동시에 접근 허용 - 현실적으로 불가능
  2. 프로세스가 작업을 수행할 때, 해당 작업에 필요한 리소스들을 먼저 요청하고 할당 받음 - 자원의 효율성이 떨어지고 프로세스들이 어떤 자원을 필요로 하는지 파악하기 위해 추가적인 오버헤드 발생
  3. 프로세스가 다른 프로세스의 자원을 요청하기 위해서는 자신이 할당 받았던 자원을 반납 - 여태까지 작업했던 프로세스의 상태를 잃을 수 있음
  4. 각각의 자원에 고유번호를 할당하고 특정 프로세스 내 자신이 할당받은 자원에 번호를 기준으로 오름차순/내림차순으로만 요청을 할 수 있도록 하는 방식 - 이것에 대해서는 단점을 설명하지 않았다 왜일까?

회피

  • 교착 상태 발생 가능성을 검사해서 발생 가능성이 있다면 사전에 회피하는 형식
  1. 자원 할당 그래프 알고리즘 (Resource Allocation Graph Algorithm)
  2. 은행원 알고리즘 (Banker's algorithm) - 여러가지 전제조건들이 많이 존재를 하기 때문에 현실적으로 사용하기 어려움
  • 데드락 회피 방법의 전반적인 플로우는 아래와 같음
  1. 프로세스가 자원 요청 시, 자원을 할당한 후에도 안정 상태로 남아있는지 사전 검사
  2. 안정 상태라면 자원을 할당
  3. 불안정 상태라면 다른 프로세스가 자원을 해지할 때까지 대기
  • 자원을 요청할 때마다 시스템 상태를 검사하는 만큼 오버헤드가 큰 게 단점

탐지 및 회복

  • 교착 상태를 허용하지만 상태를 탐지하고 회복하는 방식
  • 알고리즘을 주기적으로 실행함으로써, 시스템에 발생한 Deadlock을 체크하고 회복
  • 알고리즘을 어느 주기로 실행 해야할 지 결정을 잘 해야 함 - 너무 자주하면 오히려 비효율적
  • 데드락을 탐지했을 경우, 교착 상태를 일으킨 프로세스를 종료하거나, 할당된 자원을 해제함으로써 회복
  1. 프로세스 종료
  • 교착 상태의 프로세스를 모두 중지 - 작업했던 내용이 날라갈 수 있음
  • 교착 상태가 제거될 때까지 한 프로세스씩 중지 - 교착 상태가 제거 되었는지 주기적으로 파악하기 위해 오버헤드가 큼
  1. 자원 선점
  • 교착 상태가 제거될 때까지 프로세스가 점유한 자원을 선점해 다른 프로세스에게 할당

회복 고려 사항

  • 희생자 선택 - 보통 비용적인 측면을 고려해 희생자를 선택함. 하지만 기아 상태가 발생하기 쉬워짐
  • 후퇴 (Rollback)
  • 기아 상태 (Starbation)

무시

  • 교착 상태 자체를 무시하고, 특별한 조치를 취하지 않는 방법
  • 교착 상태의 발생 확률이 낮은 상황에서 주로 사용
  • 운영체제에서 많이 사용

https://youtu.be/Ry_gB34cvwc [10분 테코톡] 🚴‍♂️ 케빈의 Deadlock

0개의 댓글