3월 22일 - Deadlock

Yullgiii·2024년 3월 22일
0
post-thumbnail

Deadlock?

Deadlock은 멀티프로세스 환경에서 발생하는 문제로, 두 개 이상의 프로세스가 서로의 작업이 끝나기를 무한정 기다리는 상태. 이 상태에서는 어떤 프로세스도 자신의 실행을 계속 진행할 수 없게 된다. Deadlock이 발생하면, 해당 프로세스들은 자원을 점유하고 있으면서도 다음 단계로 진행할 수 없으므로, 시스템의 효율성이 크게 저하된다.

Deadlock 설명 및 4가지 필수 조건

Deadlock은 여러 프로세스가 서로가 점유하고 있는 자원을 요구하며, 그 결과 모든 프로세스가 실행을 계속할 수 없는 상태에 빠지는 현상이다.

Deadlock 발생의 4가지 조건

Deadlock이 발생하기 위해선 다음 네 가지 조건이 모두 충족되어야 한다:

  1. 상호 배제(Mutual Exclusion)

    • 각 자원은 한 번에 하나의 프로세스만이 사용할 수 있다.
    • 자원은 공유할 수 없다.
  2. 점유 대기(Hold and Wait)

    • 최소한 하나의 자원을 점유한 채, 다른 프로세스가 점유한 자원을 추가로 대기하는 프로세스가 존재한다.
  3. 비선점(No Preemption)

    • 프로세스가 점유하고 있는 자원은 그 프로세스가 자발적으로 내놓기 전까지 다른 프로세스가 강제로 빼앗을 수 없다.
  4. 순환 대기(Circular Wait)

    • 프로세스의 집합에서 {P0, P1, ..., Pn}의 각 프로세스 Pi가 자원 Ri를 점유하고 있고, 다음 프로세스 Pi+1(마지막 프로세스의 경우 P0)이 그 자원을 대기하는 순환 체인이 존재한다.

3가지 조건만 충족될 경우 Deadlock이 발생하지 않는 이유

네 가지 조건 중 하나라도 충족되지 않으면 Deadlock은 발생하지 않는다. 예를 들어:

  • 비선점 가능: 만약 시스템이 비선점을 허용한다면, 프로세스가 다른 자원을 기다리는 동안 현재 점유하고 있는 자원을 강제로 회수하여 다른 프로세스에 할당할 수 있다. 이는 순환 대기 상태를 깨트리고 Deadlock을 방지할 수 있다.

  • 순환 대기가 없는 경우: 자원 할당 순서를 정해 순환 대기를 방지할 수 있다. 예를 들어, 모든 프로세스가 점유하려는 자원을 일정한 순서로만 요구하도록 할 수 있다. 이 경우, 순환 대기 조건을 만족시키지 않으므로 Deadlock이 발생하지 않는다.

결국 Deadlock을 예방하거나 해결하기 위해서는 이 네 가지 조건 중 최소한 하나를 만족시키지 않도록 하는 전략을 취해야 한다.

profile
개발이란 무엇인가..를 공부하는 거북이의 성장일기 🐢

0개의 댓글