DeadLock (교착 상태)
DeadLock 은 두 개 이상의 프로세스들이 서로가 가진 자원을 기다려며 프로세스를 진행하지 못하고 무한 정 대기하는 상황을 말한다.
DeadLock 원인
공유 자원 시 나타나는 동시성 문제를 해결하기 위한 임계영역의 잠금(lock) 메커니즘에 의해 주로 DeadLock 문제가 발생한다. 동시성이 나타나는 문제는 다음과 같다.
- 상호배제 : 자원은 동시에 한 프로세스만 사용할 수 있다. 따라서, 한 프로세스가 자원을 사용 중이면 다른 프로세스는 그 자원을 사용할 수 없다.
- 점유대기 : 특정 프로세스가 점유한 자원을 다른 프로세스가 요청하면, 자원이 해제되기까지 요청한 프로세스는 대기하고 있어야 한다.
- 비선점 : 다른 프로세스가 현재 진행중인 프로세스를 강제적으로 종료시키고 자원을 가져올 수 없다.
- 환영대기 : A 프로세스의 자원을 B 프로세스가 가지고 있고, B 프로세스의 자원을 A 프로세스가 가지고 있어 서로의 자원을 요구하는 상황을 말한다.
해결방법
- 교착 상태 가능성이 없을 때만 자원을 할당하며, 프로세스 당 요청할 자원들의 최대치를 통해 자원 할당가능 여부를 파악하는 은행원 알고리즘을 쓴다.
- 교착 상태가 발생하면 싸이클 (환영대기) 가 존재하는지 찾아보고, 관련된 프로세스를 지운다.
- 교착 상태는 매우 드물게 일어나기 때문에, 이를 처리하는 비용이 더 크기에 사용자가 작업을 종료하도록 유도한다. 프로그램을 실행하다가 “응답 없음”이 뜨는 경우가 존재하는데, 이 경우, 교착 상태 시 이러한 일이 발생할 수 있다.