교착상태(데드락)이란?
둘 이상의 프로세스들이 다른 프로세스가 차지하고 있는 자원을 서로 무한정 기다리고 있어 프로세스의 진행이 중단된 상태를 의미한다.
교착상태의 발생조건
- 상호 배제
- 한 번에 프로세스 하나만 해당 자원을 사용할 수 있다.
- 점유 대기
- 자원을 최소 하나 보유하고 다른 프로세스에 할당된 자원을 점유하기 위해 대기하는 프로세스가 존재해야 한다.
- 비선점
- 순환 대기
- 대기 프로세스의 집합이 순환 형태로 자원을 대기하기 있어야 한다.
교착상태의 해결 방법
1. 예방
- 상호배제 제거 : 모든 자원에 대해서 공유를 허용한다.
- 점유와 대기 제거 : 필요한 자원을 한 번에 모두 할당한다. (자원 낭비가 발생하고 무한 대기가 발생할 가능성이 있다.)
- 비선점 제거 : 모든 자원에 대해 선점을 허용한다.
- 환형대기 제거 : 자원들에게 순서를 부여하고 프로세스는 순서의 증가 방향으로만 자원 요청이 가능하게 한다.
(예방 방법은 심각한 자원 낭비의 발생으로 주로 회피, 발견, 회복을 이용한다.)
2. 회피
시스템의 상태를 지속적으로 감시하고 교착상태가 될 가능성이 있는 자원 요청은 보류한다. 시스템을 안전상태로 유지하는 것이다.
대표적인 알고리즘으로 은행원 알고리즘이 있다.
3. 탐지, 회복
교착상태 방지를 위한 사전 작업은 하지 않고 주기적으로 교착 상태 발생을 확인하고 회복시킨다.
- 회복 방법
- 프로세스 종료 : 교착 상태에 있는 프로세스를 종료시킨다.(이후 재시작된다.)
- 자원 선점 : 선점할 자원을 선택하고 선정된 자원을 가지고 있는 프로세스에서 자원을 가져온다.
- 복귀 : 프로세스를 강제 종료한 후, 가장 최근의 체크포인트에서 시작한다.
참고
https://chanhuiseok.github.io/posts/cs-2/
https://yj-something.tistory.com/32
https://dev-coco.tistory.com/162