[OS] 교착상태

정지수 JisooJung·2021년 11월 13일
2

Intro

교착상태

둘 이상의 프로세스가 각자의 자원을 보유한 채로 영원히 기다리는 현상(외부의 조치가 없는 이상) (무한 대기-starvation 와 구분 필요!)

문제점

  1. 프로세스를 종료할 수 없으므로 사용자에 응답 불가능
  2. 교착상태와 연관된 자원들은 활용되지 못함

-> 시스템 성능 저하 야기

자원

선점 가능자원 vs 선점 불가능 자원

선점 가능 자원 : 사용중이었는데 다른 프로세스에게 선점되었다가 다시 할당받아도 괜찮은 자원
선점 불가능 자원 : 선점될 경우 프로세스의 정상적 진행을 포기해야 할 정도의 불이익을 받는 자원 ex) 프린트

공유 가능 자원 vs 배타적 사용 자원(cpu, 메모리, 키보드, 모니터 등)

순차적 재사용 가능 자원(cpu, 메모리 등) vs 소모성 자원(시그널, 메세지)

프로세스의 선택지

  1. 필요 자원에 대한 요청 - 할당/대기(대기상태에서는 자원 요청/반납이 불가)
  2. 자원 반납 - (프로세스가)시스템 콜 > 운영체제가 처리 > 대기중인 자원에 할당

같은 자원을 사용하는 프로세스들이 모두 1.번 상태이며 2. 수행 불가 시 데드락 발생

데드락 원인

  1. 자원의 배타적 사용
  2. 자원의 부분 할당 - 프로세스는 실행 과정 중에 자원을 확보해 나감
  3. 자원의 선점 불가능성
  4. 자원에 대한 환형 대기 - 두개 이상의 프로세스가 자신의 자원을 보유한 채로 서로의 자원을 요청할 시

해결

  1. 예방(Prevention)

    • 자원의 배타적 사용 조건 배제 (불가능)
    • 자원의 부분 할당 배제 - 자원 낭비 및 무한 대기 야기
    • 선점 불가능성 배제 - 자원 낭비 및 무한 대기 야기 (수행중이던 프로세스가 손상되어 비정상 종류 후 다시 처음부터 수행해야 하는 경우)
    • 환형 대기 상황 배제: 모든 자원들을 프로세스 내부 사정과 관련없이 순차적으로만 소유(?) 가능 - 자원 낭비 및 무한 대기 야기
  2. 회피(Avoidance)

    • 안전 상태: 프로세스가 유한한 시간 내 정상적으로 종료될 수 있는 상태 - 자원 할당 결과 안전 상태일 경우에만 자원 할당하는 기법
      - 회피를 위한 가정 넷
      • 시스템 내 프로세스 수 고정
      • 자원의 수 고정 (불가능)
      • 프로세스가 요구할 수 있는 최대 자원의 수 존재 (불가능)
      • 프로세스는 자원 사용 후 반드시 반납
    • 불가능한 가정이 존재하므로 이론적으로만 접근되는 기법
    • 다익스트라의 은행가 알고리즘 (최대요구량 - 현재보유량(프로세스의 현재보유량 + 여유량))
  3. 탐지(Detection)

    • 교착 상태를 탐지해 해결 (교착상태 발생 허용)
    • 자원 할당 그래프(RAG) - 방향성 이분 그래프(자원->프로세스 - 할당, 프로세스 -> 자원 - 대기)
    • 그래프 제거(Graph Reduction)법
      - 싱크(대기 x 프로세스)의 자원 반납 가정 (자원 -> 싱크 에지 모두 삭제)
      • 에지 모두 제거 시 교착상태 x
      • 지워지지 않는 에지 존재 시 교착상태 o
    • 그래프 탐색(Search)법
      - 대기상황 나타내는 에지에서부터 탐색 시작
      • 싱크에 다다르면 교착 x
      • 사이클 발생 시(자기 자신으로 되돌아왔을 시) 교착 가능성 up
      • 노트(knot) 발생 시 교착상태 확정
  4. 복구(Recovery)

    • 프로세스 종료(Process Termination) 방식: 교착상태에 포함된 프로세스 중 하나를 강제 종료시킨 후 자원 할당
      - 종료 비용 발생
      • Lowest-termination-cost Process First: 교착상태가 제거되었는지 확인 필요
      • 교착상태 내 프로세스들의 부분집합 중 최소종료비용인 부분집합 한꺼번에 종료: 비용 계산 복잡
    • 자원 선점 방식: 필요 자원을 어떻게든(?) 가져와 할당
      - 프로세스 종료와 차이점 - 데드락과 관련없는 프로세스가 자원을 뺏길 수도 있음!

    프로세스 강제 종료 > 복구 비용을 키우는 낭비 요인, 보완 방안 -> 검사점 지정(Checkpointing), 재시작(Restart)

    • 검사점 지정: 프로세스 실행 중간 시점의 실행 결과 보존 및 표시
    • 재시작: 최근의 검사점(Checkpoint)으로부터 차례로 하나씩 복구

Reference

김주균, 『OS? Oh Yes!』, Human Science(2013), p107-128.

profile
Study&Work&Log

0개의 댓글