(아래 그림에 풀이)
a. What are the arguments for installing the deadlock-avoidance algorithm?
한 달에 실행되는 작업의 양이 일정하고, deadlock avoidance 알고리즘을 적용해도 주어진 작업을 기한 내에 모두 끝낼 수 있으므로 예기치 않은 deadlock을 아예 방지한다는 측면에서 설치를 찬성한다.
b. What are the arguments against installing the deadlock-avoidance algorithm?
현재 70%의 CPU 사용률을 가질 때 작업의 가치는 25000달러 = 1만 달러이다. 작업의 worth를 CPU 사용에 따른 비용으로 간주하면, 20%의 CPU 사용률이 증가하면 2857달러의 비용이 추가로 든다. deadlock에 의한 재실행 비용은 20.5(절반 다시 실행)*10(재실행 프로세스 개수) = 10달러이다. 재실행이나 deadlock detection에 의한 비용을 고려해도 이는 앞서 언급한 CPU 사용률 증가에 따른 비용보다 훨씬 작다. 비록 deadlock의 시점을 예상할 수 없고 리스크로 작용하지만, 산술적인 비용측면에서 이득이므로 deadlock-avoidance 알고리즘을 설치할 필요가 없다.
starving은 process가 자원을 요청했음에도 불구하고 할당받지 못해 실행이 오랫동안 멈춘 상태이다. priority 기반 자원 스케줄링에서 발생할 수 있다. starving을 완벽하게 파악할 순 없지만, 요청 대기 시간을 이용해 간접적으로 인지할 수 있다. 요청 대기시간이 길어질수록 priority를 높이는 aging 기법을 활용하여 starving을 조금이나마 해결할 수 있다.
a. deadlock의 필요조건 중 no preemption을 만족하지 않으므로 deadlock이 발생하지 않는다.
b. 자원이 CPU라고 생각하면 preemptive CPU scheduling과 동일하게 starving 문제가 발생한다. 많은 자원을 필요로 하는 프로세스가 있을 때, 할당받은 자원을 지속적으로 쌓지 못하고 계속 다른 프로세스에 뺏기게 되어 실행되는 시점을 보장받지 못한다.
(아래 그림에 풀이)
가능하다. safe algorithm에서는 allocation, need, available을 가지고 safe 상태를 파악한다. unsafe 상태는 available이 적어도 need를 충족하지 못하는 상태이다. 여기서 need를 교재의 request 혹은 문제의 waiting으로 바꾸면 deadlock detection 알고리즘이 된다. avoidance 알고리즘에서의 unsafe 상태는 detection 알고리즘의 deadlock 상태와 같은 결과이다. 단지 need와 waiting(request)의 의미에 따라 결과의 의미만 다른 것이다. 단지 need를 구하는 방법이 미리 max를 구해놓고 계산하느냐, 혹은 동적으로 waiting(request)가 바뀌느냐의 차이이다.
단일 스레드 프로세스 하나만 존재할 때는 모든 자원이 해당 프로세스에 배정되냐 되지 않느냐로만 상태가 구분된다. 따라서 해당 프로세스가 실행되면 필요한 모든 자원이 할당되고, 실행하지 않으면 모든 자원이 해제된다. 이는 hold and wait를 충족하지 않는다. 또한, 하나의 프로세스만 있을 때는 circular wait가 불가능하므로 deadlock이 발생하지 않는다.