1 minute read

교착 상태란?

일어나지 않을 (점유된 자원을 점유하는) 사건 을 기다리면서 진행이 멈추어 버림

식사하는 철학자 (Dining Philosopher) 문제

  1. 계속 생각하다 왼쪽 포크가 사용 가능하면 집어든다.
  2. 계속 생각하다 오른쪽 포크가 사용 가능하면 집어든다.
  3. 양쪽 포크를 모드 집어들면 정해진 시간동안 식사를 한다.
  4. 식사 시간이 끝나면 오른쪽 포크를 내려놓는다.
  5. 오른쪽 포크를 내려놓은 뒤 왼쪽 포크를 내려놓는다.
  6. 다시 1번부터 반복한다.

    모든 철학자가 왼쪽 포크를 쥔 채, 오른쪽 포크를 기다리고 있는 상황에서 무한히 생각(대기)한다.

교착 상태를 해결하기 위해서는…

  1. 첫째, 교착 상태가 발생했을 때의 상황을 정확히 표현
  2. 둘째, 교착 상태가 일어나는 근본적인 이유 이해

    자원 할당 그래프

    • 어떤 프로세스가 어떤 자원을 할당 받아 사용 중인지 확인 가능
    • 어떤 프로세스가 어떤 자원을 기다리고 있는지 확인 가능
    • 프로세스는 원, 자원은 사각형
    • 자원의 개수는 자원 사각형 내에 점으로 표현 (ex, A[ * * ])
    • 자원을 할당 받았다면, 자원에서 프로세스로 화살표
    • 자원을 기다리고 있다면, 프로세스에서 자원으로 화살표

      교착 상태가 발생한 자원 할당 그래프는 의 형태를 띄고 있다.

      교착 상태가 발생할 조건

  3. 상호 배제 : 한 프로세스가 사용하는 자원을 다른 프로세스가 사용할 수 없는 상태
  4. 점유와 대기 : 자원을 할당 받은 상태에서 다른 자원을 기다리는 상태
  5. 비선점 : 어떤 프로세스도 다른 프로세스의 자원을 강제로 뺏지 못하는 상태
  6. 원형 대기 : 프로세스들이 원의 형태로 자원을 대기하는 상태 (자원 할당 그래프가 원의 형태를 띄고 있다.)
  • 위 네 가지 조건 중 하나라도 만족하지 않으면 교착 상태가 발생하지 않음
  • 위 네 가지 조건을 모두 만족하면 교착 상태가 발생할 수 있음