银行家算法(死锁避免)

注意死锁避免是在进程发出请求时进行判断,而死锁检测和死锁恢复是允许进入死锁状态,在运行时进行判断。 

银行家算法(死锁避免)_第1张图片

银行家算法(死锁避免)_第2张图片

 

银行家算法(死锁避免)_第3张图片

 

银行家算法具体步骤:

银行家算法(死锁避免)_第4张图片

 

但若是finish[i]存在false,且找不到满足true的状态了,就处于unsafe状态。

银行家算法(死锁避免)_第5张图片

两个例子:如下图,当四个进程P1,P2,P3,P4都没结束,即finish[i]都为false,这时我们响应p2。

银行家算法(死锁避免)_第6张图片

如上图,根据available矩阵,首先选择p2进程,如下图

银行家算法(死锁避免)_第7张图片

p2结束后,将p2的allocation加到available里,如上图,此时仍为safe状态,并且下个进程执行可以有多种选择,但我们在这里选择p1,然后如下图

银行家算法(死锁避免)_第8张图片

然后我们再选p3

银行家算法(死锁避免)_第9张图片

 同理p4。这时我们就找到了一个序列:p2,p1,p3,p4,按照这个序列来,我们就可以实现所有进程都安全的执行并结束。

另一个例子,把这个数值调整一下,如下图,仍然选择p2:

银行家算法(死锁避免)_第10张图片

当p2在运行中时,如下面状态,这时若p1发出请求,会响应吗?答案是不会。

银行家算法(死锁避免)_第11张图片

 

你可能感兴趣的:(操作系统)