교착상태 (Deadlock)

2020. 5. 22. 19:17Operating System

멀티프로그래밍 환경에서 여러 프로세스가 한정된 자원을 사용하려고 서로 경쟁하는 상황에서 동기화를 시키지 않으면 inconsistency가 발생한다. inconsistency를 해결하고자 동기화를 해주었을 때 2가지 문제점이 발생할 수 있다.

  1. 교착상태; 데드락(deadlock)
  2. starvation

교착상태(Deadlock)란?

멀티프로세스 환경에서 프로세스A가 자원R1을 사용하고 있고 프로세스B가 자원R2를 사용하고 있다고 하자. 이런 상황에서 프로세스A가 자원R2를 요청하고 프로세스B가 자원R1을 요청한다. 프로세스A와 B는 모두 대기상태가 된다. 자원 R1과 R2는 현재 사용중이기 때문에 lock 걸려있으므로 프로세스A와 B는 실행상태가 될 수 없다.

각 프로세스들이 대기 상태에서 실행상태가 되지 못할 때 를 의미한다.

 

 

Deadlock 가 일어나기 위해 성립해야 하는 4가지 조건

  1. 상호배제 (Mutual exclusion)
  2. 점유대기 (Hold and wait)
  3. 비선점 (No preemtion)
  4. 순환대기 (Circular wait)

 

Deadlock 해결할 수 있는 4가지 방법

  • Prevention; 예방 (사전예방)
  • Avoidance; 회피 (사전예방)
  • Detection/Recovery; 탐지 및 회복(교착상태 사후처리)
  • Ignorance; 무시 (교착상태가 잘 일어나지 않는다고 가정)