어떤 process를 실행하기 위해서는 자원이 필요한데 두개 이상의 process가 각기 가지고 있는 자원을 기다리는 상태라면, 서로가 자원을 무한정 기다리게 된다.
이를 deadlock이라고 부른다.
식사하는 철학자 문제
deadlock을 표현하는 문제상황이다.
n명이 앉아있는 식탁에 n-1개의 식기가 놓여있는 경우,
각자 자신의 왼쪽, 오른쪽에 있는 식기를 모두 사용해야 음식을 먹을 수 있을 때, 모두 동시에 하나의 포크를 드는 경우 모두가 식사를 하지 못하는 상황이 된다.
이러한 deadlock을 해결하기 위해서는
1. deadlock이 발생했을 때의 상황을 정확히 확인하고
2. deadlock이 일어나는 근본적인 이유에 대해 알아야한다.
deadlock의 발생 조건
deadlock이 발생할 조건에는 4가지가 있다.
- 상호 배제
우선 근본적인 원인으로, 해당 자원을 한번의 하나의 process만 이용 가능하다는 것이 문제이다.
process가 상호 배제를 하고 있는 상황에서는 deadlock이 발생할 수 있다.
- hold and wait
식사하는 철핮가 문제에서 누구도 식사를 할 수 없는 이유는 다들 자신의 왼쪽 식기를 들고, 기다렸기 때문이다. 즉 자원을 보유한 채 다른 자원을 기다렸기 때문에 문제가 발생할 수 있는데 이를 hold and wait이라고 한다.
- 비선점
만일 누군가가 강제로 식기를 빼앗는 것이 가능했다면 deadlock을 발생하지는 않는다.
이처럼 deadlock이 발생하게되는 근본적인 문제는 process가 자원을 비선점하기 때문이다. 즉 누군가가 강제로 자원을 빼앗지 못해 deadlock이 발생한다.
- circular wait
process와 process가 요청하는 자원이 원형의 graph를 만들기 때문이다.