美文网首页
避免死锁-银行家算法

避免死锁-银行家算法

作者: ju7ran | 来源:发表于2020-01-13 18:51 被阅读0次

[背景知识]

一个银行家如何将一定数目的资金安全地借给若干个客户,使这些客户既能借到钱完成要干的事,同时银行家又能收回全部资金而不至于破产,这就是银行家问题。这个问题同操作系统中资源分配问题十分相似:银行家就像一个操作系统,客户就像运行的进程,银行家的资金就是系统的资源。

[问题的描述]

一个银行家拥有一定数量的资金,有若干个客户要贷款。每个客户须在一开始就声明他所需贷款的总额。若该客户贷款总额不超过银行家的资金总数,银行家可以接收客户的要求。客户贷款是以每次一个资金单位(如1万RMB等)的方式进行的,客户在借满所需的全部单位款额之前可能会等待,但银行家须保证这种等待是有限的,可完成的。

例如:有三个客户C1,C2,C3,向银行家借款,该银行家的资金总额为10个资金单位,其中C1客户要借9各资金单位,C2客户要借3个资金单位,C3客户要借8个资金单位,总计20个资金单位。某一时刻的状态如图所示。

Snip20170319_9.png

对于a图的状态,按照安全序列的要求,我们选的第一个客户应满足该客户所需的贷款小于等于银行家当前所剩余的钱款,可以看出只有C2客户能被满足:C2客户需1个资金单位,小银行家手中的2个资金单位,于是银行家把1个资金单位借给C2客户,使之完成工作并归还所借的3个资金单位的钱,进入b图。同理,银行家把4个资金单位借给C3客户,使其完成工作,在c图中,只剩一个客户C1,它需7个资金单位,这时银行家有8个资金单位,所以C1也能顺利借到钱并完成工作。最后(见图d)银行家收回全部10个资金单位,保证不赔本。那麽客户序列{C1,C2,C3}就是个安全序列,按照这个序列贷款,银行家才是安全的。否则的话,若在图b状态时,银行家把手中的4个资金单位借给了C1,则出现不安全状态:这时C1,C3均不能完成工作,而银行家手中又没有钱了,系统陷入僵持局面,银行家也不能收回投资。

综上所述,银行家算法是从当前状态出发,逐个按安全序列检查各客户谁能完成其工作,然后假定其完成工作且归还全部贷款,再进而检查下一个能完成工作的客户,......。如果所有客户都能完成工作,则找到一个安全序列,银行家才是安全的。

相关文章

  • 银行家实现C++算法网络爬虫无死锁调度!

    一、银行家算法与死锁 银行家算法是一种最有代表性的避免死锁的算法。在避免死锁方法中允许进程动态地申请资源,但系统在...

  • 死锁的预防算法

    银行家算法银行家算法是一种最有代表性的避免[死锁]的算法。在避免死锁方法中允许进程动态地申请资源,但系统在进行资源...

  • 银行家算法笔记

    死锁 在了解银行家算法前,有必要了解一下死锁。因为银行家算法是用于避免死锁的。 什么是死锁? 死锁是指两个或两个以...

  • 银行家算法

    Dijkstra(1965)提出了一种能够避免死锁的调度算法,称为银行家算法(banker's algorithm...

  • 第二章 数据查找与资源分配算法——银行家算法

    2.4 银行家算法 银行家算法时一种资源分配算法,在操作系统理论中它是一个避免死锁的算法,是以银行借贷系统的分配策...

  • 银行家算法

    银行家算法是避免进程死锁的方法之一。那什么是银行家算法呢? 银行家,他们想的是我把钱贷出去,能不能收的回来,能不能...

  • 避免死锁-银行家算法

    [背景知识] 一个银行家如何将一定数目的资金安全地借给若干个客户,使这些客户既能借到钱完成要干的事,同时银行家又能...

  • 死锁 & 银行家算法

    死锁是多线程环境中由于对资源竞争分配不合理而产生的阻塞行为,银行家算法是一种动态避免死锁的策略。 I、死锁 1.1...

  • 死锁的避免

    死锁的避免主要包含安全性检查算法和银行家算法两个部分,在书上介绍的较为清晰了 【实验目的】 为了解系统的资源分配情...

  • 银行家算法简短总结

    银行家算法其实是在多进程中避免死锁的一种算法策略。关于概念等就不贴了。 简短总结如下: 1.操作系统在为多个进程分...

网友评论

      本文标题:避免死锁-银行家算法

      本文链接:https://www.haomeiwen.com/subject/wjenactx.html