포스트

운영체제 7장 - 교착 상태(Deadlock)

목차


  • 7.1 시스템 모델
  • 7.2 교착상태의 특징
  • 7.3 교착상태 처리 방법
  • 7.4 교착상태 예방
  • 7.5 교착상태 회피
  • 7.6 교착상태 탐지(Deadlock Detection)
  • 7.7 교착상태로 부터의 복구

7.1 시스템 모델


  • 자원
    • 유한한 개수의 자원
    • 물리적 자원(CPU 사이클, 메모리 공간, I/O 장치), 논리적 자원(파일, 세마포어, 뮤텍스 락)
  • 프로세스의 자원 이용 과정은 요청, 사용, 방출 및 해제 과정으로 이루어짐
  • 교착 상태(Deadlock)
    • 모든 프로세스가 한 자원을 점유하고, 같은 집합의 다른 프로세스가 점유한 자원의 획득을 기다리는 상태. 모든 프로세스가 진행되지 못하는 상태

7.2 교착상태의 특징


교착 상태가 발생하는 필요 조건

  1. 상호 배제(Mutual exclusion) : 한번에 한 프로세스만 사용할 수 있는 자원이 적어도 하나 이상 존재
  2. 점유 대기(Hold and Wait) : 최소 하나의 자원을 점유하고, 다른 프로세스가 점유한 자원을 대기
  3. 비선점(Non-promption) : 자원이 강제 방출 불가, 자발적으로만 방출만 가능
  4. 순환 대기(Circular wait) : 각 프로세스는 순환적으로 다음 프로세스가 요구하는 자원을 가지고 있음
    • 자원 할당 그래프
    • 교착상태 발견을 위해 프로세스와 자원과의 관계와 할당 상태를 표현하는 그래프
    • 자원 할당 그래프에 사이클이 있다면, deadlock이 발생 가능성 있음

7.3 교착상태 처리 방법


  • 교착 상태 예방(prevention)
    • 4가지 필요 조건 중, 하나 이상을 만족하지 않게 함
  • 교착 상태 회피(avoidance)
    • 부가적인 정보를 사용하여, 자원 요청을 위해 프로세스가 대기할지 여부를 결정함.
    • 자원 할당 상태의 부가 정보를 통해 자원을 할당함
  • 교착 상태 탐지(detection) 후 복구(recovery)
    • deadlock 상태 허용
    • deadlock detection 알고리즘과 deadlock recovery 알고리즘으로 구성됨
  • 교탁 상태 무시
    • deadlock이 자주 발생하지 않기 때문에, 무시해버림
    • 수작업으로 복구해야함
    • 대부분의 운영체제에 사용. 응용프로그램의 deadlock 방지는 응용 프로그래머 책임

7.4 교착상태 예방


  • 교착상태 4가지 필요 조건 중, 적어도 한개를 만족하지 않도록 한다
  1. 상호 배제 거부
    • 동시 공유 가능 자원을 상호배제 하지 않음(ex) 읽기전용 파일)
    • 동시 공유 불가능 자원은 상호배제 해야함
  2. 점유 대기 조건 거부
    • 자원을 요청할 때에 다른 자원을 점유하지 않은 상태에서 자원을 요청하도록 함
    • 자원 할당시 두가지 방법 가능
      1. 필요 자원을 한꺼번에 모두 할당 받는 방법
        • 가지고 쓰지 않을 수 있어 자원 이용율이 떨어짐
      2. 점유 자원을 반납 후, 필요한 자원을 추가 요청하는 방법
        • 쓰고 반납해야하므로 오버헤드가 발생. 기아 가능성
  3. 비선점 조건 거부
    • 어떤 자원을 점유한 프로세스가 다른 자원을 요청하여 즉시 받을 수 없다면
    • 두가지 방법이 가능
      1. 현재 모든 자원 반납 후 대기 상태로 전환
      2. 요청한 자원을 이용할 수 없거나, 다른 대기 프로세스가 점유하지 않았다면 대기 상태가 됨
  4. 순환 대기 거부
    • 모든 자원에 전체적인 순서 부여
    • 여러개의 자원이 필요한 경우 오름차순
  • 교착상태 예방의 문제점
    • 장치 이용률의 저하, 시스템 처리율 감소

7.5 교착상태 회피


  • 상황을 보고 순환대기라도 할당함
  • 자원이 어떻게 요청되는지에 대한 추가 정보가 필요함
  • 자원 할당 상태를 조사하여 순환 대기 조건이 발생하지 않도록 자원 요청을 제어함
  • 안전 상태
    • 현재 가용 자원과 점유한 자원으로 처리 가능
  • 불안정 상태 : deadlock 가능성
  • 교착 상태 회피 알고리즘 : 시스템이 불안정 상태로 진입하지 않도록 보장해야함
    • 단일 인스턴스 : 자원 할당 알고리즘
    • 다중 인스턴스 : 은행원 알고리즘 (Banker’s Alogorithm)
      • 프로세스가 시작할 때, 자원 유형마다 필요한 최대 개수를 선언
      • 자원을 요청할 때, 자원 할당이 safe 상태를 유지하지 못하면, 다른 프로세스가 끝나길 대기해야함
      • 자원을 할당받으면 유한한 시간 후에 반납해야함

7.6 교착상태 탐지(Deadlock Detection)


  • 현재 교착 상태인지 확인 후 복구
  • 탐지 알고리즘 수행빈도 결정 방법
    1. 요청이 즉시 승인되지 않을 때마다 수행
      • 교착 상태를 유발한 프로세스가 누구인지 식별 가능
      • 오버헤드가 큼
    2. 가끔식(한시간에 한번, 이용율이 저하될 때 등) 수행
      • 누가 원인 프로세스인지 확인 불가
      • 오버헤드는 작음

7.7 교착상태로 부터의 복구


  1. 프로세스 종료
    • 교착상태에 있는 모든 프로세스 중지
    • 한번에 한 프로세스 중지
      • 어떤 프로세스를 종료할 것인지 선택할 고려사항 필요
  2. 자원 선점
    • 교착상태가 제거될 때 까지 프로세스의 자원을 선점하여 다른 프로세스에게 제공
    • 희생자 선택
      • 어떤 프로세스가 희생할 것인가
    • Rollback
      • safe 상태로 되돌린 후, 그 상태에서 다시 시작하는 방법
      • total rollback : safe 상태의 결정이 어려우므로 프로세스 중지 후 다시 시작
      • 부분 rollback : 교착 상태를 제거하는데 필요한 만큼 rollback
    • 기아상태 고려
      • 같은 프로세스가 항상 victim으로 선택되는 기아 상태가 발생하지 않도록 선정
        • rollback 회수를 비용에 포함하는 방법으로 해결 가능
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.