목차
데드락
데드락은 두 개 이상의 프로세스나 스레드가 서로가 다른 프로세스나 스레드에 의해 점유된 자원을 요청하며, 그 결과 모두가 영원히 대기 상태에 빠지게 되는 상황을 말합니다.
이 상태에서는 어떤 프로세스도 실행을 계속할 수 없으며, 이를 해결하지 않으면 시스템의 일부 또는 전체가 멈춰버리는 결과를 초래할 수 있습니다.
데드락 발생 원인
1.
상호 배제 : 자원은 한 번에 한 프로세스만이 사용할 수 있어야 합니다.
상호 배제는 여러 프로세스가 동시에 접근할 수 있는 자원에 대해서도, 발생할 수 있습니다.
예를 들어
1. P1 프로세스는 A,B를 보유하고 있고, C를 요청합니다.
2. P2는 A,C를 보유하고 있고, B를 요청합니다.
3. P3는 이미 B를 보유하고 있고 작업 중입니다. 마지막으로 A를 요청합니다.
A,B,C는 각각 두 개의 프로세스에게만 자원을 할당할 수 있을 때, 위와 같은 상황이 벌어졌을 경우 상호 배제가 발생할 수 있습니다.
즉, 자원이 여러 프로세스에 의해 공유될 수 있더라도, 특정 시점에서 사용 가능한 인스턴스의 수가 제한되어 있을 경우 상호 배제의 한 형태로 볼 수 있습니다.
이 경우, 제한된 자원을 동시에 요청하는 여러 프로세스 사이에서도 데드락이 발생할 수 있습니다.
2.
점유 대기 : 자원을 가진 프로세스가 추가 자원을 대기하는 동안 기존 자원을 점유하고 있어야 합니다.
3.
비선점 : 자원은 점유하고 있는 프로세스가 스스로 놓을 때까지 다른 프로세스가 강제로 뺏을 수 없어야 합니다.
4.
순환 대기 : 대기 중인 프로세스의 집합 {P0, P1, ..., Pn}에서 P0는 P1이 점유한 자원을 대기하고, P1은 P2가 점유한 자원을 대기하며, ..., Pn은 P0가 점유한 자원을 대기하는 순환 형태의 대기가 발생해야 합니다.