本文主要是介绍银行家算法——软考探究(四),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
著名的银行家算法,最早是由Dijkstra提出来的。它是一种最有代表性的避免死锁的算法。在避免死锁方法中允许进程动态地申请资源,但系资源分配之前,应先计算此次分配资源的安全性,若分配不会导致系统进入不安全状态,则分配,否则等待。
银行家算法最重要的就是判断是可用资源和仍需资源之间的关系,如果可用资源数大于人需资源数,那么我们认为这个进程就是可以执行的,也是安全的,反之,便是不安全的。所以重中之重的是找到各种资源数。
对进程的判断遵循以下步骤:
1.计算系统开始时所有的资源数,即开始的可用资源数;
2.在仍需资源数和可用资源数中作比较,找到符合条件的进程,最后修改进程执行完毕时系统的可用资源数;
3.继续比较剩余进程和可用资源数,找到下边可以执行的进程;
4.依次类推;
【例】假设系统中有3类互斥资源R1、R2、R3,可用资源分别是9、8、5,。在T0时刻系统中有P1、P2、P3、P4和P5五个进程,这些进程对资源的最大需求量和已分配资源数如下表所示,则进程如何执行是安全的。
资源
进程 | 最大需求量 | 已分配资源数 | ||||
R1 | R2 | R3 | R1 | R2 | R3 | |
P1 | 6 | 5 | 2 | 1 | 2 | 1 |
P2 | 2 | 2 | 1 | 2 | 1 | 1 |
P3 | 8 | 0 | 1 | 2 | 1 | 0 |
P4 | 1 | 2 | 1 | 1 | 2 | 0 |
P5 | 3 | 4 | 4 | 1 | 1 | 3 |
这里需要强调的是,无论题目中给出何种条件,我们只要找到以下信息便可从容应对各种变化:
资源 进程 | 最大需求量 | 已分配资源数 | 仍需资源 | 可用资源 | 执 行 顺 序 | ||||||||
R1 | R2 | R3 | R1 | R2 | R3 | R1 | R2 | R3 | R1 | R2 | R3 | ||
P1 | 6 | 5 | 2 | 1 | 2 | 1 | 5 | 3 | 1 | 7 | 7 | 5 | ④ |
P2 | 2 | 2 | 1 | 2 | 1 | 1 | 0 | 1 | 0 | 4 | 2 | 1 | ① |
P3 | 8 | 0 | 1 | 2 | 1 | 0 | 6 | -1 | 1 | 9 | 8 | 5 | ⑤ |
P4 | 1 | 2 | 1 | 1 | 2 | 0 | 0 | 0 | 1 | 5 | 4 | 1 | ② |
P5 | 3 | 4 | 4 | 1 | 1 | 3 | 2 | 3 | 1 | 6 | 5 | 4 | ③ |
【注】:
可用资源:表示相应的进程执行完毕(即释放该进程占用的资源)以后可用的资源,满足公式可用资源=可用资源+已分配资源,(因为已分配的资源将会在进程执行完毕以后释放,所以可用资源会不断增多,进程执行完毕便会全部释放)同时它也是下一个进程执行时可用的资源。
**需要说明的是根据进程执行情况的不同,每次填入表格中的可用资源也不会相同(因为每个进程分配的资源是有差异的),那么执行顺序也会有所差异,合理即可。
仍需资源:仍需资源数=最大需求量-已分配资源数,据此公式可以求得R1、R2、R3在不同的进程时仍需的资源数,如上表中所示。
按照之前所讲的步骤,实现如下:R1已分配的总资源数为1+2+2+1+1=7
R2已分配的总资源数为2+1+1+2+1=7
R3已分配的总资源数为1+1+0+0+3=5
则R1 R2 R3可用资源数分别为9-7=2,
8-7=1,
5-5=0,
1.开始有的资源数R1 R2R3分别为2、1、0,所以从仍需资源中查找(需要说明的是查找的时候以最少资源数作为限定条件能够较快地找出结果),只有P2进程符合条件,此时可用资源变为4、2、1;
2.接下来在在其余的进程中查找符合条件的进程,只能执行P4,此时可用资源变为5、4、1,以此类推,按照以上的步骤即可找到所有进程执行的顺序P2->P4->P5->P1->P3;
以上便是有关银行家算法的计算过程,总体看来,银行家算法更多的是对概念的考察,弄清楚各个条件之间的制约关系便可迎刃而解了,希望能对大家有所帮助!这篇关于银行家算法——软考探究(四)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!