Dead Lock

geonmyung·2020년 8월 26일
0
post-thumbnail

1. 데드락(Dead Lock)이란?

둘 이상의 서로 다른 프로세스가 자신의 자원을 할당 받아 점유하고 있으면서 상호간에 상대방에 할당되어 있는 자원을 요구하여, 결과적으로 아무것도 완료되지 못하는 상태를 가리킨다.

2. 데드락(Dead Lock) 발생 조건

4가지 조건이 모두 만족되어야 데드락이 발생할 수 있으며 하나라도 충족되지 못하면 데드락은 발생하지 않는다.

Mutual exclusion

  • 상호 배제
  • 자원은 한번에 한 프로세스만 사용할 수 있다.(=같이 사용할 수 없다.)

Hold and wait

  • 점유와 대기
  • 최소한 하나의 자원을 점유하고 있으면서 다른 프로세스에 할당되어 있는 자원을 추가로 점유하기 위해 대기하는 프로세스가 존재해야 한다.
  • 자신이 확보한 자원은 절대로 놓지 않고 먼저 추가적으로 자원을 확보하려고 한다.
    -> 욕심쟁이처럼 다른 프로세스가 자원을 먼저 놓을 때까지 기다린다.

No preemption

  • 비선점
  • 다른 프로세스에 할당된 자원은 사용이 끝날 때까지 강제로 빼앗을 수 없다.
    -> 자발적으로 내놓는 경우에만 자원을 회수할 수 있다.

Circular wait

  • 원형 대기
  • 프로세스의 집합에서, 각 프로세스가 원형 형태로 상대방의 자원을 대기하고 있어야 한다.
    -> 서로 서로가 각자의 자원을 기다리는 형태

3. 예시

  • Mutual exclusion
    • 자원 : 일차선 도로
      한 도로 위에 두 자동차가 동시에 올 수 없다.
    • 만족!
  • Hold and wait
    • 자동차 입장에서 자기가 위치한 공간은 잡고 있으면서 트럭이 확보한 공간을 요구한다.
    • 만족!
  • No preemption
    • 강제로 자동차를 들어서 도로를 확보할 수 없다.
    • 만족!
  • Circular wait
    • 서로서로가 비켜주기를 원한다.
    • 만족!

4가지 조건을 다 충족해서 데드락의 예시라고 볼 수 있다!

참고자료

profile
옹골찬 개발자가 되기 위한 험난한 일대기

0개의 댓글