DeadLock 이란
데드락(DeadLock) 이란?
데드락(교착상태)란 두개 이상의 작업이 서로 상대방의 작업이 끝나기 만을 기다리고 있기 때문에 결과적으로 아무것도 완료되지 못하는 상태를 가리킨다. 한정된 자원을 여러 곳에서 사용하려고 할 때 발생할 수 있다.
데드락이 발생하는 경우
두개의 프로세스가 두개의 리소스를 사용해야 한다고 할때
1. Process1 -> Resource1 사용
2. Process2 -> Resource2 사용
3. Process1 -> Resource2 사용하려는데 Process2가 사용중이라 대기상태
4. Process2 -> Resource1 사용하려는데 Process1이 사용중이라 대기상태
위의 3,4에서 서로 상대방의 작업이 끝나기 만을 기다리고 있기 때문에 교착상태(DeadLock)가 발생한다.
데드락이 발생하는 상황은 다음과 같다.
- 멀티 프로그래밍 환경에서 한정된 자원을 얻기 위해 서로 경쟁하는 상황 발생
- 한 프로세스가 자원을 요청했고 동시에 그 자원을 사용할 수 없는 상황이 발생할때 해당 프로세스는 대기 상태로 들어간다.
- 대기 상태로 들어간 프로세스들이 실행 상태로 변경될 수 없을 때의 상황을 교착상태(DeadLock)라고 한다.
데드락 발생 조건
데드락이 발생하려면 4가지 조건이 성립할때 발생한다.
- 상호배제(Mutual exclusion)
자원은 한번에 한 프로세스만 사용 가능하다. - 점유대기(Hold and wait)
최소한 하나의 자원을 점유하고 있으면서 다른 프로세스에 할당되어 사용하고 있는 자원을 추가로 점유하기 위해 대기하는 프로세스가 존재해야 한다. - 비선점(No preemption)
다른 프로세스에 할당된 자원은 사용이 끝날 때까지 강제로 빼앗을 수 없다 - 순환대기(Circular wait)
프로세스의 집합에서 순환 형태로 자원을 대기하고 있어야 한다.
데드락 해결방법
데드락을 해결하는 방법으로는 4가지 방법이 있다.
- 예방
교착상태 발생 조건 중 하나를 제거하면서 해결한다. 자원낭비가 심하다는 단점이 있다. - 회피
교착상태의 발생조건을 없애는것 보다는 애초에 발생하지 않도록 알고리즘을 적용하는 방법으로 은행원 알고리즘이 있다. - 탐지
탐지 알고리즘을 사용하여 교착상태가 발생했는지 탐지하고 교착 상태가 탐지 되었다면 복구 기법을 통해 교착상태를 복구한다. 이 방식은 지속적으로 확인하는 작업이 필요하기 때문에 성능 저하가 발생한다. - 무시
그냥 무시하는 방법이다. 해결할 때 드는 오버헤드로 인한 성능저하가 방치할 때의 성능저하보다 큰 경우 그냥 무시한다.