[OS/운영체제] Deadlock(데드락) - 정의, 발생 조건, 해결 방법

·2021년 7월 31일
0

OS

목록 보기
10/11

1. 데드락(Deadlock) 이란?

정의

  • 서로 원하는 자원을 얻기 위해 무한정한 기다림 상태에 빠지는 것
  • 멀티 프로그래밍 환경에서 한정된 자원을 사용하려고 서로 경쟁하는 상황에서 발생
  • 데드락 == 교착 상태

발생 조건

4가지 조건이 동시에!! 성립해야 함

1) 상호배제 (Mutual Exclusion)

자원은 한 번에 한 프로세스만 사용이 가능

2) 점유와 대기 (Hold and Wait)

최소한 하나의 자원을 점유하고 있으면서 다른 프로세스에 할당되어 사용하고 있는 자원을 추가로 점유하기 위해 대기하는 프로세스가 있어야 함

3) 비선점 (Non Preemptive)

다른 프로세스에 할당된 자원은 사용이 끝날 때까지 강제로 빼앗을 수 없음

4) 순환 대기 (Circular wait)

프로세스의 집합 {p0, p1, ... , pn}이 있을 때, p0은 p1이 점유한 자원을 대기하고 p1은 p2가 점유한 자원을 대기하고 pn은 p0이 점유한 자원을 요구해야 함



2. 데드락(Deadlock) 해결 방법

예방, 회피, 탐지, 회복

1) 교착 상태 예방

교착 상태가 발생하기 전에 미리 조치를 취하는 방식으로, 교착 상태 발생 조건 중 하나를 제거함으로써 해결한다.

  • 자원의 상호배제 조건 방지
    • 모든 자원을 공유 허용
  • 점유와 대기 조건 방지
    • 모든 자원에 대해 선점 허용
  • 비선점 조건 방지
    • 필요 자원을 한 번에 모두 할당하기
  • 순환 대기 조건 방지
    • 자원에게 순서 부여를 통해 프로세스 순서의 증가 방향으로만 자원 요청
  • 단점 : 자원 낭비가 심함

2) 교착 상태 회피

프로세스가 자원을 요구할 때, 시스템은 자원을 할당한 후에도 안정 상태로 남아있는가를 확인하여 교착 상태를 회피하는 방법

  • 데드락이 발생할 위험이 있는 자원이 생기면 자원 할당 요청을 보류하여 시스템을 안전하게 유지한다.
  • 단점 : 오버헤드가 많이 발생한다.

  • 예시) Banker's Algorithm
    E.J.Dijkstra가 제안한 방법으로 은행에서 모든 고객의 요구가 충족되도록 현금을 할당하는 데에서 유래한 기법

    프로세스가 자원을 요구할 때, 시스템은 자원을 할당한 후에도 안정상태로 남아있는 지를 사전에 검사하여 교착 상태를 회피하는 기법이다. 안정 상태에 있으면 자원을 할당하고, 그렇지 않으면 다른 프로세스들이 자원을 해지할 때까지 대기한다.


3) 교착 상태 탐지

데드락이 발생하면 빠르게 발견하고 문제를 해결하는 것

graph

  • 자원 할당 그래프(Resource Allocation Graph)를 통해 교착 상태 탐지 가능
  • 단점 : 자원을 요청할 때마다 탐지 알고리즘을 실행하면, 오버헤드가 발생한다.

4) 교착 상태 회복

교착 상태를 일으킨 프로세스를 종료하거나 할당된 자원을 해제하면서 회복

1. 프로세스 종료 방법

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

2. 자원 선점 방법

  • 자원을 빼앗긴 프로세스는 강제 종류 이후 재시작
  • 교착 상태에 빠진 프로세스가 필요로 하는 자원을 강제로 가져옴


출처

https://prinha.tistory.com/entry/%EB%8D%B0%EB%93%9C%EB%9D%BD
https://github.com/haewon-park/csStudy/blob/main/OS/%EB%8D%B0%EB%93%9C%EB%9D%BD(Deadlock).md

profile
당근먹고 자라나는 개발자

0개의 댓글