교착상태 (Deadlocks)

Woosung Kim·2022년 1월 16일
0

정의

둘 이상의 프로세스나 스레드가 자원을 점유한 상태에서 서로 다른 프로세스나 스레드가 점유하고 있는 자원을 요구하며 무한정 기다리는 현상

발생 조건

  • 상호 배제(Mutual Exclusion) : 한번에 하나의 프로세스나 스레드만이 자원에 접근할 수 있음
  • 비선점(No Preemption) : 다른 프로세스나 스레드의 자원을 뺏을 수 없음
  • 점유와 대기(Hold and Wait) : 자원을 가진 상태에서 다른 자원을 기다림
  • 순환 대기(Circular Wait) : 순환 형태로 자원을 대기

위의 4가지 조건이 모두 성립되는 경우에만 교착상태가 발생할 가능성이 있으며 4가지 조건 중 하나라도 성립하지 않는다면 교착상태가 발생하지 않는다.


자원

자원의 사용

요청(Request) -> 사용(Use) -> 반납(Release)

자원 할당도 (Resource Allocation Graph)

  • 어떤 자원이 어떤 프로세스에게 할당되었는가?
  • 어떤 프로세스가 어떤 자원을 할당 받으려고 기다리고 있는가?
  • 자원 : 사각형 / 프로세스 : 원 / 할당 : 화살표


교착상태 처리

🐾 교착상태 방지 (Deadlock Prevention)

교착상태의 4가지 필요조건 중 한 가지 이상 불만족하도록 한다.

  • 상호 배제(Mutual Exclusion)
    - 자원을 공유 가능하게
  • 비선점(No Preemption)
    - 자원을 가지고 있으면서 다른 자원을 기다리지 않게
    - 단점 : 자원 활용률 저하, 기아(Starvation)
  • 점유와 대기(Hold and Wait)
    - 자원을 선점 가능하게
  • 순환 대기(Circular Wait)
    - ex) 자원에 번호 부여 후 오름차순으로 자원 요청
    - 단점 : 자원 활용률 저하

🐾 교착상태 회피 (Deadlock Avoidance)

교착상태가 발생하지 않도록 한다. (ex. 안전한 할당)

  • 은행원 알고리즘 : 어떤 자원을 할당하기 전에 할당 후에도 안정 상태로 있을 수 있는지 검사 후 할당
  • 은행원 알고리즘의 한계
    - 할당할 수 있는 자원수가 일정 해야함
    - 항상 불안전 상태를 방지해야 하므로 자원 이용도가 낮다
    - 최대 자원 요구량을 미리 알아야 한다.
    - 프로세스들은 유한한 시간 안에 자원을 반납해야 한다.

🐾 교착상태 검출 및 복구 (Deadlock Detection & Recovery)

  • 교착상태가 일어나는 것을 허용
  • 주기적 검사
  • 교착상태 발생 시 복구

검출

  • 검사에 따른 추가 부담 (Overhead) : 계산, 메모리

복구

프로세스 종료 방법

  • 교착 상태의 프로세스를 모두 중지
  • 교착 상태가 제거될 때까지 하나씩 프로세스 중지

자원 선점 방법

  • 교착 상태의 프로세스가 점유하고 있는 자원을 선점해 다른 프로세스에게 할당 (해당 프로세스 일시정지 시킴)
  • 우선 순위가 낮은 프로세스나 수행 횟수 적은 프로세스 위주로 프로세스 자원 선점

🐾 교착상태 무시 (Don't Care)

profile
개발하는 강아지

0개의 댓글