进程的死锁。

进程(第二部分)_死锁

只有给一个进程分配满了五个资源它才能够正常地运行完。那么系统要有多少个这样的资源才有可能不发生死锁呢?答案是13个。为什么不是15个?如果有13个就绝对不可能发生死锁了。

看一下图:

进程(第二部分)_正常运行_02

蓝色的部分就表示还未分配资源的部分。绿色是12个。倘若系统有13个资源,则把剩余的一个资源放置在任何一个蓝色块就能够满足。

进程(第二部分)_银行家算法_03


解决死锁的策略:

进程(第二部分)_银行家算法_04

如果C进程得不到它需要的5个资源,那么C进程就不会运行.所以C进程一开始就等待,一直要等到它资源配足的时候它才会运行,这样子效率就降低了.

进程(第二部分)_干货_05

判断它是不是安全序列方法非常简单.模拟这些顺序来执行这些进程就能够判断,如果说进程都能够执行完毕,那么系统就是安全的.不能够执行完毕,那系统就是不安全.做这个工作之前,我们要计算一个数据出来.现在已经分配了这么多资源出去了,系统现在剩余的资源是多少?

R1现有的资源数量:9-1-2-2-1-1=2.

进程(第二部分)_数据_06

现在需要判断一个序列是否可以执行,那么我们就需要了解每一个进程现在还需要多少资源?所以我们求一下还需资源的数量.

求出还需资源数的列表:

进程(第二部分)_干货_07

拿这个列表和系统还有的资源来比较.如果说系统现在剩余的资源个数不能够满足它还需的资源个数,那么它肯定无法完成.

进程(第二部分)_银行家算法_08

这一步可以分配给P2足够数量的资源.


C选项是不是也是安全序列呢?

由于现有的资源数量比所需的资源数量要多,所以P2能够正常运行,标记为true.系统的资源数不满足P1的要求,所以P1不能够正常运行完毕.这样就说明了这个序列不是一个安全序列.

银行家算法就讲完了.