기본 콘텐츠로 건너뛰기

[OS] Deadlock

모든 Proceess가 다른 process에 의해 야기될수 있는 event를 기다리고 있을때 발생

*필수조건

1) Mutual Exclusion : 최소 하나의 자원이 비공유 모드로 지원되어야 함

2) hold and wait : process는 최소하나의 자원을 점유한 상태로, 다른 process에 의해 점유된 자원을 얻기 위해 대기해야함

3) No preemption : 자원들은 선점이 될 수 없고, 자발적으로만 방출될수 있다.

4) circular wait : waiting process들이 순환적 대기를 해야한다.


* Solution

1) system이 deadlock state에 들어가지 않도록 하는 protocol이 사용(deadlock prevention, deadlock avoidance)

2) system이 deadlock에 들어가도록 허용하되, detect해서 recover하도록 하는 방법

3) 어차피 자주 발생하지 않으므로 무시하는 방법(most popular)

deadlock prevention,avoidance 방법은 비용이 너무 크므로 발생하면 재부팅


*Deadlock Prevention : deeadlock 발생 4가지 조건중 하나라도 안되도록 하는 방법

1) mutual exclusion : resource를 sharable하게 만듬

2) hold and wait : 실행전에 필요한 resource들을 모두 요청하게 한다.

3) No preemption : process가 자원들을 점유하다가 즉시 할당할수 없는 자원을 요청하면 현재 점유되고 있는 자원들이 released

4) circular wait : 모든 자원 타입들에 전체적인 순서를 부여하여 각 process가 열거된 순서대로 자원을 요청하도록 요구.


*Deadlock Avoidance : 자원이 어떻게 요청될지에 대한 추가 정보를 요구, 프로세스의 요청과 방출에 대한 완전한 순서를 파악함으로써 교착상태를 피하기 위해서 process의 대기여부 결정

safe state : 시스팀이 어떤 순서로든지 요청하는 자원을 교착상태 없이 모두 할당해줄수 있는 상태(safe sequence를 찾을 수 있는 상태)

unsafe state : deadlock state가 발생가능 (항상 발생하는것은 아님)

댓글