Post

운영체제 - 반효경 7강

Deadlock

image

  • 각자 리소스를 가지고 있으면서 상대방이 가지고 있는 리소스를 필요로함 -> 근데 각 프로세스는 리소스를 내어 놓지 않아 진행이 되지 않는 상태
  • Deadlock : 일련의 프로세스들이 서로가 가진 자원을 기다리며 block된 상태
  • Resource
    • 하드웨어, 소프트웨어 등을 포함하는 개념(I/O device, CPU cycle 등)
    • 프로세스가 자원을 사용하는 절차 : Request -> Allocate -> Use -> Release

Deadlock 발생의 4가지 조건

  • Mutual exclusion : 매 순간 하나의 프로세스만이 자원을 사용 가능
  • No preemption : 프로세스는 자원을 스스로 내어놓을 뿐 강제로 빼앗기지 않음
  • Hold and wait : 자원을 가진 프로세스가 다른 자원을 기다릴 때 보유 자원을 놓지 않고 계속 가지고 있음
  • Cicrular wait : 자원을 기다리는 프로세스간에 사이클이 형성되어야 함

Resource-Allocation Graph

image

  • 그래프에서 cycle이 없으면 deadlock 아님
  • 있으면 그 다음 조건을 확인
    • 하나의 자원 당 인스턴스가 하나면 deadlock
    • 하나 이상이면 직접 확인 필요
  • 1번 그림은 deadlock, 2번은 deadlock 아님

Deadlock의 처리 방법

  • Deadlock을 미연에 방지

    • Deadlock Prevention : Deadlock의 4가지 필요 조건 중 어느 하나가 만족되 지 않도록 하는 것

    • Deadlock Avoidance : deadlock이 발생할 가능성이 없는 경우에만 자원을 할당

  • Deadlock 생긴 후 처리

    • Deadlock Detection and recovery : 프로그램에 문제가 있을 때 Deadlock이 발생했는지 검사해서 있다면 복구하는 전략
    • recovery
      • Process termination : deadlock 연관 프로세스 모두 termination 혹은 해결될 때 까지 하나씩 termination 하기
      • Resource Preemption : 자원을 뺏어 Deadlock 해결 -> safe state로 rollback한 뒤 restart(Starvation 문제)
  • Deadlock에 대해 신경 X

    • Deadlock Ignorance
  • 현대에서는 Dealock Ingnorance를 사용 -> 다른 방법들은 오버헤드가 큼

Deadlock Prevention

  • Mutual Exclusion

    • 공유해서는 안되는 자원은 반드시 mutual exclusion이 성립해야 함
  • Hold and Wait

    • 프로세스가 자원을 요청할 때 다른 어떤 자원도 가지고 있어서는 안됨

      • 프로세스 시작 시 모든 필요 자원들을 할당하게 하는 방법

      • 자원이 필요한 경우 보유 자원을 모두 놓고 다시 요청

  • No preemption

    • 프로세스가 어떤 자원을 기다려야 하는 경우 이미 보유한 자원을 빼앗음
    • 모든 필요한 자원을 얻을 수 있을 때 그 프로세스는 다시 시작
    • state를 쉽게 save하고 restore 할 수 있는 자원에서 주로 사용(CPU, memory)
  • Circular Wait

    • 모든 자원 유형에 할당 순서를 정하여 정해진 순서대로만 자원 할당
  • 하지만 Deadlock Prevention은 Utilization 저하, throughput 감소, starvation 문제 등이 발생한다(비효율적)

Deadlock Avoidance

  • 자원 요청에 대한 부가 정보를 이용해 자원 할당이 deadlock으로부터 안전한지 동적으로 조사해 안전한 경우에만 할당
  • 인스턴스당 하나의 자원일 때 : Resource Allocation Graph Algorithm 사용 -> DFS, BFS와 같은 알고리즘 사용해서 cycle 여부 확인(O(n^2) 걸림)
  • 인스턴스당 하나 이상일 때 : Banker’s Algorithm 사용

출처)

[운영체제 - 이화여자대학교KOCW 공개 강의](http://www.kocw.net/home/cview.do?cid=3646706b4347ef09)
This post is licensed under CC BY 4.0 by the author.