Deadlock 해결방법
교착상태 예방
Deadlock 4가지 필요 조건인 상호배제, 점유대기, 비선점, 순환대기 중 하나를 성립하지 않도록 한다. 교착상태 예방의 문제점은 장치의 이용률이 저하되고 시스템 처리율이 감소된다는 것이다.
상호배제 부정
여러 개의 프로세스가 공유 자원을 사용할 수 있게 한다. 예를 들어 읽기와 같은 작업은 공유를 통해 상호배제 부정을 할 수 있다. 하지만 일반적으로 어떤 자원들은 근본적으로 공유가 불가능하기 때문에 이 조건을 인정하지 않기는 힘들다.
점유대기 부정
프로세스 실행 전 필요한 모든 자원을 할당 한다. 점유대기 부정에는 두가지 단점이 있다. 첫째는 많은 자원이 할당된 뒤 오래동안 사용되지 않아 자원의 이용률이 낮다는것이고 두번째는 기아상태이다. 여러개의 인기있는 자원을 필요로하는 프로세스는 자신이 필요로 하는 자원 중 최소한 하나가 항상 다른 프로세스에게 할당되어 있을 수 있기 때문이다.
비선점 부정
자원을 점유하고 있는 프로세스가 다른 자원을 요구할 때 점유하고 있는 자원을 반납하고 요구한 자원을 사용하기 위해 기다리게 한다. 즉 프로세스 자신이 자원을 요청했을 때 점유할 수 없다면 자신의 자원을 선점가능하게 한다.
순환대기 부정
자원에 고유한 번호를 할당하고 번호 순서대로 자원을 요구하도록 한다.
교착상태 회피
각 자원마다 최대 자원 개수를 미리 파악하여 자원을 할당하기 전 Deadlock이 발생할 가능성이 있는지 검사하여 발생할 가능성이 없다면 자원을 할당한다. 대표적으로 자원 할당 그래프 알고리즘이나 Banker’s Algorithm 을 사용한다.
교착상태 탐지 및 회복
교착상태 탐지를 지원하는 시스템에서는 교착상태 검사 알고리즘과 교착상태 회복 알고리즘을 지원해야한다. Deadlock발생을 허용하고 Deadlock발생시 자원할당 그래프를 사용해 탐지하여 회복한다. 교착상태 검사 알고리즘의 중요한 점은 언제 탐지 알고리즘을 수행시키는가이다. 자원을 요청할 때 마다 수행한다와 같이 너무 적은 간격으로 수행한다면 오버헤드가 커지게된다. 혹은 시간 간격을 너무 많이 잡게 되면 어느 프로세스가 교착상태를 발생시킨 장본인인지 탐지하기 힘들어진다.
교착상태 회복
프로세스를 종료하는 방법
프로세스를 Abort시키는 방법으로 교착상태를 회복시킬 수 있다.
- 교착상태의 프로세스 모두 중지
- 교착상태가 제거될 때 까지 프로세스를 하나씩 중지
하지만 프로세스를 중지 시킨다는것이 무조건적인 해결을 보장하지는 않는다. 파일을 갱신하는 도중에 중지된다면 해당 파일은 부정확한 상태로 남게된다. 그렇기 때문에 프로세스를 중지시키기 위해선 유발되는 비용이 최소인 프로세스를 중지시켜야 한다.
자원을 선점하는 방법
교착상태의 프로세스가 점유하고 있는 자원을 선점해 다른 프로세스에게 할당하고 해당 프로세스를 일시정지시키는 방법이다. 이 방법에는 3가지의 고려사항이 있다.
- 어떤 프로세스를 중지시킬것인가
- 중지된 프로세스는 어떻게 처리할 것인가
- 기아 상태 발생을 어떻게 보장할 것인가