CS/운영체제
데드락 문제 (Deadlock Problem)
sangjin98
2024. 1. 26. 14:34
반응형
Deadlock (교착상태)
두 개 이상의 프로세스나 스레드가 서로가 가진 자원을 기다리며 다음 일을 처리하지 못하는 상태를 말합니다.

프로세스 A와 B는 1번 자원과 2번 자원을 모두 획득해야 일을 끝낼 수 있는데
A는 1번을 B는 2번 자원을 각자 획득하고 상대방에게 할당된 자원을 무한정 기다리고 있다.
Deadlock 발생의 4가지 조건
데드락은 아래의 4가지 조건이 모두 성립해야 발생한다.
따라서 아래 조건 중 하나라도 해결한다면 데드락 문제를 해결할 수 있다.
- Mutual Exclusion (상호배제)
- 자원은 한번에 하나의 프로세스만 사용할 수 있다.
- No preemption (비선점)
- 다른 프로세스에 할당된 자원은 사용이 끝날 때까지 강제로 뺏을 수 없다.
- Hold and wait (점유 대기)
- 자원을 가진 프로세스가 다른 자원을 기다릴 때 보유 자원을 놓지않고 계속 갖고 있다.
- Circular wait (순환 대기)
- 자원을 기다리는 프로세스간에 사이클이 형성되어 있다.
Deadlock 해결 방법
1. Prevention (예방)
Deadlock 발생의 4가지 조건 중 하나라도 제거하여 문제를 해결하는 방법이다.
- Mutul exclusion 을 방지할 수 없다. 만약 공유해서 사용할 수 있는 자원이 었다면 데드락 문제가 발생하지 않았을 것이다.
- Hold and Wait 를 방지하기 위해서는 프로세스가 필요한 자원을 모두 획득 했을 때만 자원을 할당받고 획득하지 못하면 자원을 모두 내려 놓는 방식을 해결할 수 있지만 너무 자원이 낭비된다는 단점이 있다.
- No Preemption : 자원을 빼앗는 것을 허용하게 된다면 CPU나 메모리 같은 경우에는 상태를 쉽게 save하고 resotre 할 수 있지만 모든 자원이 그렇지 않기 때문에 해결하기 어렵다.
- Circular Wait 은 모든 자원에 할당 순서를 정해놓고 순서대로만 할당하는 방식을 사용할 수 있다.
2. Avoidance (회피)
자원 요청에 대한 부가정보를 이용해서 자원 할당이 deadlock으로 부터 안전한 지 조사 후 안전할 경우에만 할당한다.
은행원 알고리즘
- 각 프로세스에게 자원을 할당하여 교착상태가 발생하지 않으며 모든 프로세스가 완료될 수 있는 상태를 안전상태, 교착상태가 발생할 수 있는 상태를 불안전 상태라고 한다.
- 은행원 알고리즘을 적용하기 위해서는 자원의 양과 사용자 수가 일정해야 한다.
- 은행원 알고리즘은 프로세스의 모든 요구를 유한한 시간안에 할당하는 것을 보장한다.
3. Detection and recovery ( 탐지 및 회복)
deadlock이 발생하도록 놔두고 발생시 찾아내서 해결하는 방법이다.
탐지
자원 할당 그래프를 이용하여 시스템에 deadlock이 발생했는지 점검한다.
자원을 요청할 때마다 탐지 알고리즘을 실행하는 것은 큰 오버헤드가 발생한다.
회복
deadlock을 탐지했다면 deadlock을 일으킨 프로세스를 종료하거나 할당된 자원을 뺏어 회복시킨다.
출처
https://chanhuiseok.github.io/posts/cs-2/
https://velog.io/@ejung803/%EA%B5%90%EC%B0%A9%EC%83%81%ED%83%9C%EC%99%80-%EA%B5%90%EC%B0%A9%EC%83%81%ED%83%9C-%ED%95%B4%EA%B2%B0%EB%B0%A9%EB%B2%95
반응형