Deadlock(교착상태)
두개 이상의 프로세스 혹은 스레드가 서로가 가진 리소스를 기다리는 상태를 말한다.
데드락을 만드는 조건
- Mutual exclusion : 리소스를 공유해서 사용할 수 없다
- Hold and wait : 프로세스가 이미 하나 이상의 리소스를 취득한 상태에서 (hold) 다른 프로세스가 사용하고 있는 리소스를 추가로 기다린다 (wait)
- No preemption : 리소스 반환(release)은 오직 그 리소스를 취득한 프로세스만 할 수 있다
- Circular wait : 프로세스들이 순환(circilar) 형태로 서로의 리소스를 기다린다.
OS의 데드락 해결방법
데드락 방지(Deadlock prevention)
- 위 네 가지 조건 중 하나가 충족되지 않게 시스템을 디자인 한다
hold and wait
- 사용할 리소스들을 모두 획득한 뒤에 시작
- 리소스를 전혀 가지지 않은 상태에서만 리소스 요청
no preemption
- 추가적인 리소스를 기다려야 한다면 이미 획득한 리소스를 다른 프로세스가 선점 가능하도록 한다
circular wait (가장 많이 사용하는 방식)
- 모든 리소스에 순서 체계를 부여해서 오름차순으로 리소스를 요청
데드락 회피(Deadlock avoidance)
- 실행 환경에서 추가적인 정보를 활용해서 데드락이 발생할 것 같은 상황을 회피하는 것
Banker algorithm : 리소스 요청을 허락해줬을 때 데드락이 발생할 가능성이 있으면 리소스를
할당해도 안전할 떄 까지 계속 요청을 거절하는 알고리즘
데드락 감지와 복구
- 데드락을 허용하고 데드락이 발생하면 복구하는 전략
데드락 감지와 복구 전략
1 . 프로세스를 종료한다
2 . 리소스의 일시적인 선점을 허용한다