프로세스 교착상태(Deadlock), 둘 이상의 프로세스가 서로의 작업이 끝나기를 기다리면서 무한히 멈춰 있는 상태를 의미합니다. 이러한 상태에서는 어떤 프로세스도 실행을 지속할 수 없으며, 시스템 전체가 정체될 수 있습니다.
교착상태의 예시
-
두 개의 기차 문제: 두 개의 기차가 한 개의 철도 선로에서 서로 마주 보고 서 있는 상황.
-
식사하는 철학자 문제: 여러 철학자가 한정된 포크를 사용하려고 시도하면서 발생하는 문제.
-
컴퓨터 시스템의 자원 할당 문제: 두 개 이상의 프로세스가 특정 자원을 서로 점유하고 있어 서로 해제되지 않는 상황.
교착상태가 발생하는 조건 (Coffman의 조건)
교착상태는 네 가지 조건이 동시에 만족될 때 발생합니다.
-
상호 배제(Mutual Exclusion): 한 번에 하나의 프로세스만 특정 자원을 사용할 수 있어야 합니다.
-
점유와 대기(Hold and Wait): 최소한 하나의 자원을 점유한 상태에서 추가적인 자원을 기다리는 상태여야 합니다.
-
비선점(No Preemption): 다른 프로세스가 점유한 자원을 강제로 빼앗을 수 없습니다.
-
순환 대기(Circular Wait): 프로세스 간에 자원을 기다리는 사이클이 형성되어야 합니다.
이 네 가지 조건이 동시에 성립할 경우 교착상태가 발생할 수 있습니다.
교착상태 해결 방법
교착상태를 해결하는 방법은 예방, 회피, 발견 및 회복 네 가지 방식으로 나눌 수 있습니다.
예방(Prevention)
교착상태 발생 조건 중 하나 이상을 제거하여 문제를 원천적으로 방지하는 방법입니다.
-
상호 배제 제거: 공유 가능한 자원을 사용하도록 변경.
-
점유와 대기 방지: 모든 자원을 한 번에 할당하는 방법.
-
비선점 보장: 자원을 강제로 빼앗을 수 있도록 허용.
-
순환 대기 방지: 자원을 순차적으로 할당하여 사이클이 발생하지 않도록 설정.
회피(Avoidance)
시스템이 교착상태로 진입하지 않도록 알고리즘을 통해 예방하는 방식입니다.
-
은행가 알고리즘(Banker’s Algorithm): 프로세스가 요청한 자원을 할당했을 때 시스템이 안전한 상태인지 검사 후 결정하는 알고리즘.
-
자원 할당 그래프(Resource Allocation Graph): 사이클이 발생하지 않는 경우에만 자원을 할당하는 방식.
발견(Detection)
교착상태가 발생했는지 감지하는 기법입니다.
-
자원 할당 그래프 분석: 시스템 내 프로세스와 자원 간의 관계를 그래프로 표현하여 순환이 있는지 확인합니다.
-
탐색 알고리즘 사용: 특정 알고리즘을 통해 교착상태의 발생 여부를 검사합니다.
회복(Recovery)
교착상태가 발생한 후 이를 해결하는 방법입니다.
-
프로세스 종료: 교착상태에 있는 프로세스 중 일부를 종료하여 순환 대기를 제거합니다.
-
자원 강제 회수: 일부 프로세스에서 자원을 강제로 회수하여 다른 프로세스가 실행될 수 있도록 합니다.
결론
교착상태는 여러 프로세스가 자원을 요청하면서 발생하는 심각한 문제 중 하나입니다. 이를 방지하거나 해결하기 위해서는 예방, 회피, 발견, 회복의 방법을 고려하여 시스템을 설계해야 합니다.
[…] 프로세스 교착상태(Deadlock) […]