银行家算法(Banker‘s Algorithm)是一个避免死锁(Deadlock)的著名算法,是由艾兹格·迪杰斯特拉在1965年为T.H.E系统设计的一种避免死锁产生的算法。它以银行借贷系统的分配策略为基础,判断并保证系统的安全运行。
就像我们从银行贷快一样,首先银行会考虑到我们有没有偿还能力,比如说张三想通过贷款来收藏黄金,李四想搞养殖业,银行家就要考虑到黄金一直走下滑曲线,把钱贷给张三赔的话,张三十有八九赔了,直接导致张三还不起贷款,因此不能贷给张三。然而目前养殖业收益较好而且日后一定时期行情稳定,银行家就会决定把钱贷给李四。
实例:
分析:
第一次申请是给P1进程分配6个资源,总的资源就剩余16-6=10,各进程现在需要的资源分别为:8-6=2,5,9,6。剩下的10个资源无论分配给P1,P2,P3还是P4都能使4个进程顺利完成,因此第一次申请不会是系统进入不安全状态。
第二次申请给P2进程分配4个资源,剩余资源为16-6-4=6,各进程现在需要资源分别为:8-6=2,5-4=1,9,6。剩余的6个资源可以分配给P1,P2,P4。只要有进程结束就会释放其占有的资源,因此第二次申请也不会对系统造成威胁。
第三次申请给P3进程分配5个资源,剩余资源为:16-6-4-5=1,各进程现在需要资源分别为:8-6=2,5-4=1,9-5=4,6。剩余的一个资源可以分配给P2,P2进程完成过就能释放5个资源供其他进程完成。所以第三次申请也不会对系统造成威胁。
第四次申请给P4进程分配1个资源,剩余资源为:16-6-4-5-1=0,各系统现在需要资源分别为:8-6=2,5-4=1,9-4=5,6-1=5。剩余0个资源但四个进程都没得到满足,都在请求资源的同时谁都不会释放资源。所以第四次申请会使系统造成死锁。
假如不申请第四次,直接申请第五次给P1进程分配1个资源,剩余资源为:16-6-4-5-1=0,各系统现在需要资源分别为:8-6-1=1,5-4=1,9-4=5,6。同样剩余0个资源但四个进程都没得到满足,都在请求资源的同时谁都不会释放资源。所以第五次申请也会使系统造成死锁。
在第四次和第五次申请不成功的情况下,申请第六次给P2分配1个资源,剩余资源为:16-6-4-5=0,各系统现在需要资源分别为:8-6=2,5-4-1=0,9-4=5,6。但是P2进程这时候需要的资源已经能够得到满足,因此P2进程结束后可以释放5个资源供其他进程使用。所以第六次申请也不会对系统造成威胁。
答案:
操作系统按照银行家制定的规则为进程分配资源,当进程首次申请资源时,要测试该进程对资源的最大需求量,如果系统现存的资源可以满足它的最大需求量则按当前的申请量分配资源,否则就推迟分配。当进程在执行中继续申请资源时,先测试该进程本次申请的资源数是否超过了该资源所剩余的总量。若超过则拒绝分配资源,若能满足则按当前的申请量分配资源,否则也要推迟分配。
原文地址:http://blog.csdn.net/u010926964/article/details/44918229