DeadLock


이 포스트는 190813에 정리한 내용을 블로그에 옮겼습니다.

Dead Lock 의 개념

  • 프로세스가 자원을 얻지 못해 다음 처리를 하지 못하는 상태
    • ‘교착 상태’ 라고도 한다
    • 시스템적으로 한정된 자원을 여러 곳에서 사용하려 할 때 발생한다
  • 그림으로 보는 Dead Lock이 발생 할 수 있는 경우

    deadLock

    프로세스1과 프로세스2가(이하 P1과 P2라 명시) 리소스1과 리소스2(이하 R1과 R2라 명시)

    둘 다를 얻어야 한다고 가정,

    첫번째 타임에 P1이 R1을 얻고 P2가 R2를 얻었다면

    두번째 타임에 P1이 R2를 P2는 R1을 기다리게 된다

    하지만 서로 원하는 리소스들이 상대방에게 할당되어 있기 때문에 이 두 프로세스는 무한정으로 기다리게 된다

    이러한 상태를 DeadLock 상태 라고 한다

언제 DeadLock이 발생 ??

  • 멀티스레드 프로그래밍 환경에서 한정된 자원을 사용하려 할 때

  • 한 프로세스가 자원을 요청 했을 때 그 타임에 그 자원을 사용 할 수 없는 상황이 발생, 그 때는 프로세스가 대기 상태로 들어가게 됨

  • 대기 상태로 들어간 프로세스들이 실행 상태로 변경 될 수 없을 때

Dead Lock 발생 조건

교착 상태는 한 시스템 내에서 다음의 네 가지 조건이 동시에 만족 할 때 발생,

그러므로 네 가지 조건 중 하나라도 만족하지 않도록 만들면 교착 상태를 해결 할 수 있다.

    1. 상호 배제(Mutual exclusion) 자원은 한번에 한 프로세스만이 사용 할 수 있어야 한다.
    1. 점유 대기 (Hold and wait) 최소한 하나의 자원을 점유하고 있으면서 다른 프로세스에 할당되어 사용하고 있는 자원을 추가로 점유하기 위해 대기하는 프로세스가 있어야 한다.
    1. 비선점 (No Preemption) 다른 프로세스에 할당된 자원은 사용이 끝날 때까지 강제로 빼앗을 수 없어야 한다.
    1. 순환 대기 (Circular wait) 프로세스의 집합 {P0, P1, P2, … , Pn}에서 P0는 P1이 점유한 자원을 점유하기 위해 대기하고 P1은 P2가 점유한 자원을 점유하기 위해 대기하고 Pn-1은 Pn이 점유한 자원을 점유하기 위해 대기하며 Pn은 P0가 점유한 자원을 요구해야 한다