Knowledge

[Knowledge] 데드락이란? 데드락 해결방안 이론...

Jeong Jeon
반응형

우선 데드락이라는 말을 많이 들어봤을거라 생각한다.

데드락이 도대체 무엇일까?

 

데드락이란.

<프로세스가 자원을 얻지 못해 다음 처리를 하지 못하는 상태>
예를 들어 A와 B가 재료 1,2,3을 각각 모두 가지고 있어야된다고 하자.

이때 A가 1을 가지고 손질하고, B는 2를 가지고 손질을 하고 끝났다고 보자.

이때 A가 2를 손질해서 가져가려고 하는데, B가 2를 점유하고 있는상태. B는 1을 손질해서 가져가려고하는데 A가 1을 점유하고 있는상태. 결국 A,B 둘은 서로 상대방이 점유하고 있는 리소스를 가지려 할때 발생한다.

서로 상대방의 리소스를 점유하려고 대기하고있는 상태를 Dead Lock 이라고 한다.

 

 

그렇다면 데드락이 어떤 상황에서 발생하는지 자세하게 알아보도록 하자.

 

데드락 발생 조건

데드락은 아래 네 가지 조건이 동시에 성립 할 때 발생한다.

그말인 즉슨 네 가지 조건 중 하나라도 성립하지 않으면 데드락을 예방할 수 있다.

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


데드락 처리방법

  • 교착 상태 예방 및 회피 : 교착 상태가 되지 않도록 보장하기 위하여 교착 상태를 예방하거나 회피하는 프로토콜을 이용하는 방법
  • 교착 상태 탐지 및 회복 : 교착 상태가 되도록 허용한 다음에 회복시키는 방법
  • 교착 상태 무시 : 대부분의 시스템은 교착 상태가 잘 발생하지 않으며, 교착 상태 예방, 회피, 탐지, 복구하는 것은 비용이 많이 든다.

 

데드락 예방방법

교착 상태 발생 조건 중 하나를 제거함으로써 해결하는 방법 자원의 낭비가 심하다.

  • 상호 배제 (Mutual exclusion) 부정 :여러 개의 프로세스가 공유 자원을 사용할 수 있도록 한다.
  • 점유 대기 (Hold and wait) 부정 : 프로세스가 실행되기 전 필요한 모든 자원을 할당한다.
  • 비선점 (No preemption) 부정 : 자원을 점유하고 있는 프로세스가 다른 자원을 요구할 때 점유하고 있는 자원을 반납하고, 요구한 자원을 사용하기 위해 기다리게 한다.
  • 순환 대기 (Circular wait) 부정 :  자원에 고유한 번호를 할당하고, 번호 순서대로 자원을 요구하도록 한다.

 

아직까지는 대면해보지 못한 상황이라.. 해당상황을 만들어보는것도 좋을것 같다.

 

반응형