데드락(Deadlock) 은 멀티태스킹 시스템에서 발생하는 주요 문제 중 하나. 데드락이 발생하면 여러 프로세스들이 서로 필요로 하는 자원을 가지고 있어서 상호간에 무한히 기다리는 상황이 발생. 데드락을 이해하고 해결하기 위해서는 먼저 그 원인과 특성을 파악하는 것이 중요.
데드락은 다음 네 가지 기본적인 조건이 모두 충족될 때 발생:
데드락을 처리하는 방법은 크게 세 가지로 나뉨: 예방(Prevention), 회피(Avoidance), 탐지 및 복구(Detection and Recovery).
데드락이 발생하지 않도록 시스템 설계 단계에서부터 조치를 취하는 방법. 상기 네 가지 필요 조건 중 하나 이상을 제거함으로써 데드락을 예방할 수 있음.
시스템 상태를 지속적으로 체크하면서 자원 할당이 데드락을 유발할 수 있는 상태로 가지 않도록 관리하는 방법. 가장 유명한 데드락 회피 알고리즘 중 하나는 '은행원 알고리즘(Banker's Algorithm)'.
데드락이 발생한 후에 이를 탐지하고 해결하는 방법. 자원 할당 그래프를 사용하여 데드락을 탐지하고, 이후 프로세스를 종료하거나 자원을 선점하여 문제를 해결.
일부 운영 시스템은 데드락을 무시하는 전략을 사용. 이는 데드락이 드물게 발생하고, 데드락에 대한 대처가 더 큰 오버헤드를 유발할 수 있기 때문. 이 경우, 사용자가 시스템의 비정상적인 동작을 감지하고 직접 프로세스를 종료하는 방식으로 대처.
자원 종류와 인스턴스 수: 시스템에서 관리해야 하는 자원의 종류와 각 자원별 인스턴스 수도 데드락 처리 전략을 선택하는 데 중요한 요소. 예를 들어, 한 자원 유형당 단일 인스턴스만 있는 경우와 여러 인스턴스가 있는 경우에는 데드락 회피 전략이 달라질 수 있음.
시스템 성능과 자원 활용: 데드락 예방 및 회피 전략은 시스템 성능과 자원 활용에 영향을 줄 수 있음. 예방 전략은 일반적으로 자원 활용도를 낮출 수 있고, 회피 전략은 시스템의 복잡성을 증가시킬 수 있음.
데드락과 스타베이션(Starvation): 데드락을 처리하는 과정에서 발생할 수 있는 또 다른 문제는 스타베이션. 스타베이션은 특정 프로세스가 자원을 무기한 대기하는 상황을 의미하며, 데드락 해결 과정에서 이러한 상황이 발생하지 않도록 주의해야 함.