CS/OS

[OS] Deadlock 없애는 방법2, 3 - Avoid Deadlock, Detect Deadlock

Yeji Heo 2023. 2. 26. 15:43

- Avoid Deadlock

데드락이 생길 것 같으면 막는다.

데드락의 필요충분조건 4개는 존재하더라도, 프로세스의 시작을 금지하거나 자원할당을 금지하는 등 하여 데드락을 피한다.

대신, 자원을 얼마나 요청할지를 미리 알고 있어야 한다.

한 번 이상 실행을 시켰거나, 필요한 자원이 정확하게 계산 가능한 프로세스에만 적용할 수 있다.

 

1. Process Initiation denial(프로세스 실행 거부)

프로세스의 요구가 데드락으로 이어질 수 있는 경우, 프로세스를 시작하지 않는다.

즉, 프로세스의 자원 요청 개수가 자원용량을 넘겠다 싶으면 실행을 거부한다.

예) 자원a가 2개 있다.

p1에서 a를 두번 사용

p2에서 a를 두번 사용

=> 순서에 따라 두 프로세스 모두 쓸 수 있음에도 애초에 실행을 거부해버린다.

이처럼 '최악'을 고려해서 미연에 방지를 한다. (전부 다 한번에 요청한다고 가정)

 

2. Resource allocation denial(자원 요청할 때 허락할지 말지)

요청시의 할당으로 인해 데드락이 발생할 가능성이 있는 경우, 자원할당을 거부하는 방식이다.

banker's algorithm으로 불리기도 함.

- safe state: 어떤 프로세스에게 자원을 할당하면 끝낼 수 있는 상태

- unsafe state: 자원을 어떤 프로세스에게 할당하더라도 프로그램을 끝내지 못하는 상태

 

데드락 회피(Avoid)는 방지(Prevent) 기법보다 덜 제한적이다.

동시에 데드락 검출(Detect)방식처럼 프로세스를 미리 설정/롤백 할 필요가 없다.

즉, 프로세스가 독립적으로 돈다고 가정해야 한다.

그러나 용량 얼마나 필요할지 모르면 실행 불가한 방식이며, Syncronization이 없어야만 한다.

 

* Syscronization: 순서 맞춰주는 거. 프로듀서가 생성을 해야 소비를 할 수 있게 순서 맞춤

 

 

- Detect Deadlock

실행하다 발견하면 후 처리(복구)

데드락을 실행시키다가 검출되면 그 때 후처리 복구작업을 하는 방식이다.

그러므로 중요한 곳에서는 이 방식을 사용하지 않는다. (어쨌든 데드락 발생 가능성이 존재하므로)

allocation + available = resourse (쓰고있는 애들+쓸 수 있는 애들=전체 자원)