본문 바로가기
CS/OS

Deadlock의 개념 / 해결 방법

by 나른한 사람 2021. 3. 24.

Deadlock 이란?

- 두 개 이상의 작업이 서로 상대의 작업이 끝나기만을 기다리고 있어 더 이상 다음 단계로의 진행이 불가한 상태.

- 한정된 자원을 둘 이상의 작업이 동시에 이용하려고 할 때 발생할 수 있다.

- ex)

    Process1이 Resource1을 사용하고 있고, Resource2를 필요로 하고

    Process2는 Resource2를 사용하고 있고, Resource1을 필요로 할 때,

    Process1은 Resource2를 Process2에 할당되어 있기 때문에 가져올 수 없다.

    또한, Process2 역시 같은 이유로 Resource1을 가져올 수 없다.

    그래서, 두 프로세스는 해당 자원을 받을 때 까지 무한정 대기하는 상황이 발생하는데, 이를 Deadlock이라고 한다.

 

Deadlock 발생조건

- Deadlock은 아래 4가지 조건이 모두 충족될 때 일어난다. 따라서, 하나의 조건이라도 성립하지 않으면, 혹은 성립하지 않도록 한다면 Deadlock은 발생하지 않는다.

 

 - 상호배제 (Mutual exclusion) : 하나의 자원은 하나의 프로세스만 사용할 수 있어야 한다.

 - 점유대기 (Hold and wait) : 프로세스가 할당된 자원을 가진 상태에서 다른 자원을 기다린다.

 - 비선점 (No preemption) : 다른 프로세스에 할당된 자원은 해당 프로세스에서 작업을 끝내기 전까지 뺏어올 수 없다.

 - 순환대기 (Circular wait) : 각 프로세스는 순환적으로 다음 프로세스가 요구하는 자원을 가지고 있다.

 

Deadlock 해결방법

- 각 발생조건에 대해 성립하지 않도록 한다. 일반적인 해결방법은 아직 없다고 알려져 있다.

 

   Deadlock 예방 : 자원 사용의 효율이 떨어지고, 비용이 많이 드는 문제점이 있음.

    - 상호배제 조건 제거

       하나의 자원을 여러 프로세스에서 접근 가능하도록 한다.

    - 점유대기 조건 제거

       프로세스가 실행 될 때, 필요한 모든 자원을 한번에 할당하고 더이상 해당 자원을 사용하지 않으면

       다른 프로세스에서 자원을 요구하도록 한다.

    - 비선점 조건 제거

       자원을 이미 사용하고 있는 프로세스에게 자원의 반납을 요구하고 기다리게 한다.

    - 순환대기 조건 제거

       자원에 번호를 매기고 번호에 따라 순차적으로 요구하도록 한다.

 

   Deadlock 회피 : 순환대기가 발생하지 않도록 자원 할당 상태를 검사한다. 비용이 많이 든다.

     - 은행원 알고리즘, 자원 할당 그래프 알고리즘

 

   Deadlock 무시 : Deadlock의 발생확률이 낮은 경우, 발생하더라도 무시하도록 한다.

 

   Deadlock 탐지 : Deadlock의 발생을 탐지하고 회복한다. 성능에 영향을 미칠 가능성이 있다.

 

 

'CS > OS' 카테고리의 다른 글

Semaphore와 Mutex?  (0) 2021.03.24

댓글