예지의 테크 로그포스 (Yeji's Tech Log Force)
[OS] Deadlock 없애는 방법2, 3 - Avoid Deadlock, Detect Deadlock 본문
- 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 (쓰고있는 애들+쓸 수 있는 애들=전체 자원)
'CS > OS' 카테고리의 다른 글
[OS] Process switching 과정(Change of process state) (0) | 2023.02.26 |
---|---|
[OS] Deadlock 탐지를 위한 Coffman Algorithm 사용법 (0) | 2023.02.26 |
[OS] Deadlock 없애는 방법1 - prevent deadlock (0) | 2023.02.26 |
[OS] Conditions for Deadlock (0) | 2023.02.26 |
[OS] PCB(Process Control Block (0) | 2023.02.26 |