본문 바로가기
프로그래밍 기초/운영체제

교착상태(Deadlock) 발생 조건 및 해결 방법

by junsday 2017. 6. 9.

지난 포스팅에서 프로세스 동기화와 더불어 교착상태에 대해 다뤘었다. 교착상태가 무엇인지 아직 헷갈리시는 분들은 이전 포스팅을 보고 오시길 바란다. 이번에는 교착상태의 발생 조건과 해결 방법에 대해서 알아보자.



교착상태(Deadlock) 발생 조건


교착상태는 아래의 네 가지 조건을 모두 동시에 충족할 때 발생한다.


1. 상호배제 (Mutual Exclusion)

한 자원에 대한 여러 프로세스의 동시 접근 불가


2. 점유와 대기 (Hold and Wait)

자원을 가지고 있는 상태에서 다른 프로세스가 사용하고 있는 자원의 반납을 기다리는 것


3. 비선점 (Non Preemptive)

다른 프로세스의 자원을 강제로 가져올 수 없음


4. 환형대기(Circle wait)

각 프로세스가 순환적으로 다음 프로세스가 요구하는 자원을 가지고 있는 것



교착상태(Deadlock) 해결 방법


교착상태 해결 방법에는 예방, 회피, 회복, 무시의 4가지가 있다.


1. 예방 (Prevention)

교착상태 발생 조건은 위의 네 가지 경우를 모두 만족시켰어야 했다. 교착상태를 해결하기 위해서는 네 가지 조건 중 하나만 해결을 하면 된다. 


2. 회피 (Avoidance)

교착상태의 발생조건을 없애기보다는 발생하지 않도록 알고리즘을 적용하는 방법으로, 자원할당 그래프 알고리즘과 은행원 알고리즘이 있다.


3. 회복 (Recovery)

교착상태가 발생하는 것을 아예 막지 않고, 만약 교착상태가 발생하면 발생 이후에 문제를 해결하는 방법


4. 무시 (Ignore)

교착상태를 해결할때에도 문맥교환에 의한 오버헤드로 성능 저하가 생긴다. 교착상태에 의한 성능 저하보다 이를 해결할 때의 성능저하가 큰 경우 그냥 무시한다.



댓글