데드락이란 둘 이상의 프로세스나 스레드가 한정된 자원을 얻지 못해 다음 상태를 진행하지 못하는 상황입니다.
즉 둘 이상의 프로세스가 점유하고 있는 자원을 서로 기다릴 때 무한 대기에 빠지는 상황을 말합니다.
ex) DB에서 상호 거래 패턴
한 번에 프로세스 하나만 해당 자원을 사용할 수 있다. 사용 중인 자원을 다른 프로세스가 사용하려면 요청한 자원이 해제될 때까지 기다려야 한다.
자원을 최소한 하나 보유하고, 다른 프로세스에 할당된 자원을 점유하기 위해 대기하는 프로세스가 존재해야 한다.
프로세스에 이미 할당된 자원을 강제로 빼앗을 수 없다.
대기 프로세스의 집합이 순환 형태로 자원을 대기하고 있어야 한다.
회피 과정
1. 프로세스가 자원 요청시. 자원을 할당한 후에도 안정 상태로 남아 있는지 사전 검사
2. 안정 상태라면 자원을 할당
3. 불안정 상태라면 다른 프로세스가 자원을 해지할 때까지 대기
또한 회피는 자원을 요청할 때 마다 시스템의 상태를 판단하고 회피하는 전략이므로 오버헤드가 심하게 발생하고 은행원 알고리즘의 경우 전제 조건이 많습니다.
데드락이 자주 발생하는 시스템에서 일반적으로 사용하는 방법으로 데드락을 허용하지만 상태를 탐지하고 회복하는 방식입니다.
알고리즘을 주기적으로 실행함으로써, 시스템에 발생한 데드락을 체크하고 회복합니다.
데드락이 드물게 발생하는 시스템에서 일반적으로 사용하는 방법입니다. (윈도우, 유닉스)
데드락 해결 비용 문제가 더 비효율적이라서 만약 데드락이 발생한다면 사용자가 프로세스를 강제로 종료하거나 시스템을 재부팅하는 방법을 택합니다.
피드백 및 개선점은 댓글을 통해 알려주세요😊