DeadLock 이란?
DeadLock
이 포스트는 190813에 정리한 내용을 블로그에 옮겼습니다.
Dead Lock 의 개념
- 프로세스가 자원을 얻지 못해 다음 처리를 하지 못하는 상태
- ‘교착 상태’ 라고도 한다
- 시스템적으로 한정된 자원을 여러 곳에서 사용하려 할 때 발생한다
-
그림으로 보는 Dead Lock이 발생 할 수 있는 경우
프로세스1과 프로세스2가(이하 P1과 P2라 명시) 리소스1과 리소스2(이하 R1과 R2라 명시)
둘 다를 얻어야 한다고 가정,
첫번째 타임에 P1이 R1을 얻고 P2가 R2를 얻었다면
두번째 타임에 P1이 R2를 P2는 R1을 기다리게 된다
하지만 서로 원하는 리소스들이 상대방에게 할당되어 있기 때문에 이 두 프로세스는 무한정으로 기다리게 된다
이러한 상태를 DeadLock 상태 라고 한다
언제 DeadLock이 발생 ??
-
멀티스레드 프로그래밍 환경에서 한정된 자원을 사용하려 할 때
-
한 프로세스가 자원을 요청 했을 때 그 타임에 그 자원을 사용 할 수 없는 상황이 발생, 그 때는 프로세스가 대기 상태로 들어가게 됨
-
대기 상태로 들어간 프로세스들이 실행 상태로 변경 될 수 없을 때
Dead Lock 발생 조건
교착 상태는 한 시스템 내에서 다음의 네 가지 조건이 동시에 만족 할 때 발생,
그러므로 네 가지 조건 중 하나라도 만족하지 않도록 만들면 교착 상태를 해결 할 수 있다.
-
- 상호 배제(Mutual exclusion) 자원은 한번에 한 프로세스만이 사용 할 수 있어야 한다.
-
- 점유 대기 (Hold and wait) 최소한 하나의 자원을 점유하고 있으면서 다른 프로세스에 할당되어 사용하고 있는 자원을 추가로 점유하기 위해 대기하는 프로세스가 있어야 한다.
-
- 비선점 (No Preemption) 다른 프로세스에 할당된 자원은 사용이 끝날 때까지 강제로 빼앗을 수 없어야 한다.
-
- 순환 대기 (Circular wait) 프로세스의 집합 {P0, P1, P2, … , Pn}에서 P0는 P1이 점유한 자원을 점유하기 위해 대기하고 P1은 P2가 점유한 자원을 점유하기 위해 대기하고 Pn-1은 Pn이 점유한 자원을 점유하기 위해 대기하며 Pn은 P0가 점유한 자원을 요구해야 한다