Deadlock 이란

  • 불가능한 상황을 기다리는 것 → 무한 대기 상태가 됨
  • 확률은 희박하지만 이런 상황이 발생하기도 함

Deadlock 발생 조건

모두 만족해야 함

  • exclusive resource: 자원을 동시에 나눠 쓸 수는 없음
  • non-preemptive: 부족한 자원을 뺏어올 수 없음
  • hold and wait(partial allocation): 일단 확보 가능한 것은 확보하고 대기
  • circular waiting: 프로세스 자원 대기에 circle이 있어야 함

Deadlock방침

Deadlock Prevention

  • 위의 deadlock 발생 조건 중 하나라도 발생하지 않도록 막는다.
  • exclusive resource: 충분한 양의 resource를 확보한다 → 사용하지 않을 때는 낭비됨
  • preemptive: process 죽이고 다시 시작함 → 낭비 증가, 실제로 사용 불가능함
  • hold and wait: 모든 자원이 확보되기 전까지 대기 → 차후에 쓰일 resource가 없어도 대기하기 때문에 낭비 증가
  • circular waiting: total allocation과 비슷하게 동작하게 됨

Deadlock Avoidance

  • safe state에 있을 때만 할당한다.
  • maximum require를 알아야만 한다 → 현실적으로 불가능 하기 때문에 예측함 → overhead 발생
  • process 개수가 고정되어 있어야 한다.
  • Dijkstra, Habermanm 방식이 있다.
  • 최악의 경우를 대비하는 방식이다.

Deadlock detection & solving

  • graph를 그려서 unblocked면 실행하고 blocked이면 현재 deadlock state에 있다고 판단한다.
  • 만약 deadlock state이면 종료시킬 process를 선택한다.
    • cost가 가장 적은 것부터 종료시킴
    • cost는 지금까지 run time, resource 사용 등을 고려하여 정한다.
  • kernel이 개입하여 어떤 걸 종료시킬 지 계산하기 때문에 overhead 발생한다. 따라서 실제로는 그냥 reboot 한다.
  • graph를 그리는데 overhead 발생한다.
  • 할당 가능한 자원은 바로 할당한다.
  • 최상의 경우를 대비하는 방식이다.

이 글은 배운 내용을 정리한 것으로 오류가 있을 수 있습니다. 오류를 발견하셨다면 댓글로 알려주세요!

태그: ,

카테고리:

업데이트:

댓글남기기