데드락(Deadlock)

A Code AM·2020년 5월 6일
0

수업(20200212~)

목록 보기
9/12

데드락(Deadlock)

: 교착상태

1. 개념

  • 프로세스가 자원을 얻지 못해 다음 처리를 하지 못하는 상태(= 교착상태) 시스템적으로 한정된 자원을 여러 곳에서 사용하려고 할 때 발생 (운영체제에서도 일어날 수 있음)
  • 두 프로세스가 리소스 A, B를 둘 다 얻어야 한다고 가정할 때 1P가 리소스 A를 얻고 P2가 리소스 B를 얻으면 P1은 리소스 B를, P2는 리소스 A를 기다리게 되는데 각 리소스가 상대방에게 할당되어 있어 두 프로세스가 무한 대기상태에 빠지는데 이 상태가 바로 Deadlock이다.

2. 발생 조건

  • 교착상태는 한 시스템 내에서 다음 4가지 조건이 동시에 성립할 때 발생

    1) 상호 배제(Mutual exclusion)
    : 자원은 한 번에 한 프로세스만이 사용할 수 있어야 한다
    2) 점유 대기(Hold and wait)
    : 최소한 하나의 자원을 점유하고 있으면서 다른 프로세스에 할당되어 사용하고 있는 자원을 추가로 점유하기 위해 대기하는 프로세스가 있어야 한다.
    3) 선점 불가(No preemption)
    : 다른 프로세스에 할당된 자원은 사용이 끝날 때까지 강제로 빼앗아 올 수 없어야 한다.
    4) 순환 대기(Circular wait)
    : 프로세스의 집합 (P0,P1 ... Pn)에서 P0이 P1이 점유한 자원을 대기하고 P1은 P2가 점유한 자원을 대기하고 P2 ... Pn-1은 Pn이 점유한 자원을 대기해 Pn은 P0이 점유한 자원을 요구해야 한다.

3. 처리

< 예방법 >

1) 상호 배제 부정
: 여러 개의 프로세스가 공유 자원 사용할 수 있도록 한다
-> 하지만 프린터 등의 일부 입출력 장치나 연산 결과를 저장하는 변수와 같이 동시에 건드리면 위험한 자원들이 있어, 상호 배제 그 자체를 없애는 것은 불가능 하다.
2) 점유 대기 부정
: 프로세스가 실행되기 전 필요한 모든 자원 할당
-> 점유 상태로 대기하는 일이 없으면 기다리고 있는 프로세스는 다른 자원을 갖고 있지 않으므로 순환 대기가 발생할 수 없게 된다. 여러 자원을 땡겨받게 만들거나 기다려야 하는 자원을 할당받으려면 다른 자원을 반환하도록 만들어서 문제를 해결할 수 있다.
3) 선점 불가 부정
: 자원 점유하고 있는 프로세스가 다른 자원 요구할 때 점유하고 있는 자원을 반납하고 요구하는 자원을 사용하기 위해 기다리게 한다
-> 프린터처럼 중간에 뺏었다가 큰일이 나는 자원이 있기 때문에 무턱대고 없앨 수 있는 속성이 아니고 우선 순위 선점이 가능해지면 된다.
4) 순환 대기 부정
: 자원에 고유한 번호 할당하고, 번호 순서대로 자원 요구하도록 한다.
-> 자원에 우선순위를 매기는 등의 방식으로 해결이 가능하다.

< 회피법 >

1) 은행원 알고리즈(Banker's Algorithm)

E.J.Dijkstra가 제안한 방법으로 은행에서 모든 고객의 요구가 충족되도록 현금을 할당한 데서 유래

  • 프로세스가 자원을 요구할 때 시스템은 자원을 할당한 후에도 안정상태로 남아있게 되는지를 사전에 검사해 교착상태를 회피하는 기법.
  • 안정상태에 있으면 자원 할당하고 그렇지 않으면 다른 프로세스들이 자원을 해지할 때까지 대기
  • 교착 상태가 되지 않도록 보장하기 위해 교착 상태 예방하거나 회피하는 프로토콜 이용하는 방법

2) 교착 상태 탐지 및 회복

교착 상태 탐지

  • 자원 할당 그래프를 통해 교착 상태 탐지
  • 프로세스 Pi로부터 자원 Rj로의 방향 간선은 Pi->Rj로 표현하고 이것은 프로세스 Pi가 자원Rj를 요청하는 것으로 현재 이 자원을 기다리는 상태
  • 자원 Rj로부터 프로세스 Pi로의 방향 간선은 Rj->Pi로 표현하고 이것은 자원이 프로세스 Pi에 이미 할당된 것을 의미한다.
  • 자원을 요청할 때마다 탐지 알고리즘을 실행하면 그에 대한 오버헤드가 발생한다.

교착 상태로부터 회복

  • 교착 상태를 일으킨 프로세스 종료하거나 할당된 자원 해제함으로써 회복하는 것을 의미.

< 프로세스 종료하는 법 >
1. 교착 상태의 프로세스 모두 중지
2. 교착 상태가 제거될 때까지 한 프로세스씩 중지

< 자원 선점 방법 >
1. 교착 상태의 프로세스가 점유하고 있는 자원을 선점해서 다른 프로세스에게 할당하고 해당 프로세스를 정지시킴
2. 우선 순위가 낮은 프로세스, 수행된 횟수가 적은 프로세스 등을 위주로 프로세스의 자원 선점

profile
배움기록

0개의 댓글