서로가 가진 자원을 내어놓지 않아서 발생하는 대기 현상
: 프로세스가 자신이 평생에 걸쳐 사용할 자원을 알려주면, 그래프를 활용해 데드락 발생 여부를 체크하여 회피
언제나 safe한 상태를 유지하도록 자원을 할당하는 알고리즘
: 추가 요청할 수 있는 자원을 가용 자원만으로 충족할 수 있는 지를 확인하여 상태 유지
: MAX로 자신이 평생 사용할 자원을 알려준다
: Need로 추가로 요청할 수 있는 자원을 알려준다
: 비록 자원에 여유가 있더라도, 불안정한 상황이라면 회피
: 가용자원으로 만족이 되지 않는 상황이라면 다른 프로세스로부터 자원을 받더라도 해결이 안되는 최악의 상황을 가정해야한다.
safe한 상황 : 가용 자원만 가지고 프로세스를 종료시킬 수 있는 sequence
데드락이 발생했는지 탐지한 후 회복한다
: 좌측 자원할당 그래프는 사이클이 발생했으므로 데드락 상태
: 우측은 자원할당 그래프에서 자원 지우고 프로세스 사이의 관계만 나타낸 그래프. 사이클 더 쉽게 찾을 수 있다.
프로세스들을 죽이는 방법
(1) 데드락에 연루된 모든 프로세스들을 죽인다
(2) 연루된 프로세스를 하나씩 죽여서 데드락이 사라지는지를 확인한다
자원을 빼앗는 방법
: 데드락에 연루된 프로세스에게서 자원을 빼앗는다
: 프로세스를 하나 골라서 빼앗는다
: 선정 횟수와 rollback 횟수를 고려하여 빼앗는다
현대의 범용 운영체제들은 대부분 데드락을 무시하는 방식을 채택