银行家算法(死锁避免)
注意死锁避免是在进程发出请求时进行判断,而死锁检测和死锁恢复是允许进入死锁状态,在运行时进行判断。
银行家算法具体步骤:
但若是finish[i]存在false,且找不到满足true的状态了,就处于unsafe状态。
两个例子:如下图,当四个进程P1,P2,P3,P4都没结束,即finish[i]都为false,这时我们响应p2。
如上图,根据available矩阵,首先选择p2进程,如下图
p2结束后,将p2的allocation加到available里,如上图,此时仍为safe状态,并且下个进程执行可以有多种选择,但我们在这里选择p1,然后如下图
然后我们再选p3
同理p4。这时我们就找到了一个序列:p2,p1,p3,p4,按照这个序列来,我们就可以实现所有进程都安全的执行并结束。
另一个例子,把这个数值调整一下,如下图,仍然选择p2:
当p2在运行中时,如下面状态,这时若p1发出请求,会响应吗?答案是不会。