교착 상태란?
교착 상태란?
일어나지 않을 (점유된 자원을 점유하는) 사건 을 기다리면서 진행이 멈추어 버림
식사하는 철학자 (Dining Philosopher) 문제
- 계속 생각하다 왼쪽 포크가 사용 가능하면 집어든다.
- 계속 생각하다 오른쪽 포크가 사용 가능하면 집어든다.
- 양쪽 포크를 모드 집어들면 정해진 시간동안 식사를 한다.
- 식사 시간이 끝나면 오른쪽 포크를 내려놓는다.
- 오른쪽 포크를 내려놓은 뒤 왼쪽 포크를 내려놓는다.
- 다시 1번부터 반복한다.
모든 철학자가 왼쪽 포크를 쥔 채, 오른쪽 포크를 기다리고 있는 상황에서 무한히 생각(대기)한다.
교착 상태를 해결하기 위해서는…
- 첫째, 교착 상태가 발생했을 때의 상황을 정확히 표현
- 둘째, 교착 상태가 일어나는 근본적인 이유 이해
자원 할당 그래프
- 어떤 프로세스가 어떤 자원을 할당 받아 사용 중인지 확인 가능
- 어떤 프로세스가 어떤 자원을 기다리고 있는지 확인 가능
- 프로세스는 원, 자원은 사각형
- 자원의 개수는 자원 사각형 내에 점으로 표현 (ex, A[ * * ])
- 자원을 할당 받았다면, 자원에서 프로세스로 화살표
- 자원을 기다리고 있다면, 프로세스에서 자원으로 화살표
교착 상태가 발생한 자원 할당 그래프는
원
의 형태를 띄고 있다.교착 상태가 발생할 조건
- 상호 배제 : 한 프로세스가 사용하는 자원을 다른 프로세스가 사용할 수 없는 상태
- 점유와 대기 : 자원을 할당 받은 상태에서 다른 자원을 기다리는 상태
- 비선점 : 어떤 프로세스도 다른 프로세스의 자원을 강제로 뺏지 못하는 상태
- 원형 대기 : 프로세스들이 원의 형태로 자원을 대기하는 상태 (자원 할당 그래프가 원의 형태를 띄고 있다.)
- 위 네 가지 조건 중 하나라도 만족하지 않으면 교착 상태가 발생하지 않음
- 위 네 가지 조건을 모두 만족하면 교착 상태가 발생할 수 있음