데드락이란 무엇인가?
두 프로세스가 로직을 수행하기 위해 A, B라는 락을 획득해야 할 때 1번 프로세스가 락 A를 획득한 채 B를 기다리고, 2번 프로세스가 락 B를 획득한 채 A를 기다리고 있을 때 영원히 빠져 나올 수 없는 상태가 되는데 이를 데드락이라고 한다.
두 개 이상의 작업이 서로 상대방의 작업이 끝나기만을 기다리고 있기 때문에 결과적으로 아무것도 완료 될 수 없는 상태를 말한다.
데드락의 발생조건은 무엇인가?
4개의 조건이 모두 만족해야 데드락이 발생한다. 그러나 4개의 조건이 모두 만족하여도 데드락이 일어나지 않을 수도 있다.
1) Mutual Exclusion(상호배제)
한 시점에서는 한 프로세스만 사용 가능
2) Hold and Wait(점유와 대기)
추가적인 자원을 요구하며 대기
3) Non-Preemtion(비선점)
Operation 도중 선점 불가능 ex) 프린트 작업, 파일 쓰기
4) Circular Wait(환형대기)
서로 상대방을 기다리는 사이클이 발생한다.
데드락이 발생했을 때는 어떻게 처리해야되나?
데드락의 회피조건은 무엇인가?( 데드락을 안걸리게 할려면 어떻게 해야되나?)
데드락의 발생 원인을 제거함으로써 데드락 상태를 예방한다.
1) 상호배제의 부정
크리티컬 섹션의 진입에는 상호배제가 필수적이므로 현실적으로 불가능하다.
2) 모든 자원을 실행 전에 확보한다. (필요한 락을 실행전에 모두 획득하거나 그렇지 못하면 모두 획득하지 않는다.)
당장 쓰지 않는 자원을 미리 점유해 놓으므로 리소스 낭비가 심하다.
3) 비선점의 부정(Denying non-preemption)
선점은 상태의 보존과 이의 복구가 필요
4) 환형대기를 피한다(Denying Circular-wait)
각 자원 형태에 증가하는 순서의 번호를 부여한다.
프로세스에서 자원을 증가하는 순으로만 자원을 요청하면 환형 대기 방지(즉, 사이클을 막을 수 있다)
P1 |
P2 |
P3 |
LOCK(A) |
LOCK(B) |
LOCK(C) |
LOCK(B) |
LOCK(C) |
LOCK(A) |
P1과 P2의 경우 자원의 요청이 각 자원의 할당된 번호가 증가하는 순으로 요청이 이루어져
정상적으로 처리가 되지만, P3에서 자원의 할당된 번호가 역순으로 진행되어 deadlock의 위험을 감지 할 수 있다.
생산자 소비자 문제
철학자들의 저녁식사
'OS' 카테고리의 다른 글
동기와 비동기 (0) | 2015.07.31 |
---|---|
프로세스와 스레드 차이 (0) | 2015.07.31 |
디스크 스케줄링 (0) | 2015.07.31 |
CPU 스케줄링 (0) | 2015.07.31 |
페이지 교체 알고리즘 (0) | 2015.07.31 |