Prevention Avoidance

데드락 예방/회피

예방은 네 조건 중 하나를 구조적으로 깨고, 회피는 현재 할당이 미래에 안전한 완료 순서를 남기는지 검사한다. 둘은 비용과 정보 요구가 다르다.

01

깨뜨릴 조건 선택

자원 순서 부여는 circular wait를 줄이고, 한꺼번에 요청은 hold-and-wait를 줄인다.

02

안전 순서를 시뮬레이션한다

Banker는 남은 자원으로 모든 프로세스가 끝날 수 있는 순서가 있는지 확인한다.

03

현실 비용을 평가한다

너무 보수적인 정책은 자원 이용률을 낮추고, 최대 요구량을 모르면 회피가 어렵다.

Ordering
순환 대기 차단 모든 프로세스가 자원을 같은 순서로 요청하게 한다.
가장 실용적인 예방 중 하나다.
All-at-once
보유 후 대기 차단 필요 자원을 처음에 모두 요청하게 한다.
자원 이용률이 떨어진다.
Preemption
빼앗기 허용 일부 자원은 회수 후 재시작할 수 있다.
파일 lock 같은 자원에는 어렵다.
Safe state
완료 가능 순서 어떤 순서로든 모두 끝낼 수 있으면 unsafe가 아니다.
unsafe가 곧 deadlock은 아니다.

전략 · 안전성 · 비용 점검

전략 예방인지 회피인지, 어떤 정보를 필요로 하는지 구분하는가.
안전성 현재 자원 상태에서 완료 가능한 순서를 찾을 수 있는가.
비용 정책이 자원 이용률과 응답성에 주는 손해를 설명할 수 있는가.

안전 검사

while exists process whose Need <= Work:
  Work += Allocation[process]
  mark process finished