操作系统 您所在的位置:网站首页 银行家算法课程设计目录 操作系统

操作系统

2024-06-26 12:20| 来源: 网络整理| 查看: 265

操作系统——银行家算法

什么是银行家算法

    银行家算法(Banker's Algorithm)是一个避免死锁(Deadlock)的著名算法,是由艾兹格·迪杰斯特拉在1965年为T.H.E系统设计的一种避免死锁产生的算法。它以银行借贷系统的分配策略为基础,判断并保证系统的安全运行。

银行家算法的产生背景

    在银行中,客户申请贷款的数量是有限的,每个客户在第一次申请贷款时要声明完成该项目所需的最大资金量,在满足所有贷款要求时,客户应及时归还。银行家在客户申请的贷款数量不超过自己拥有的最大值时,都应尽量满足客户的需要。在这样的描述中,银行家就好比操作系统,资金就是资源,客户就相当于要申请资源的进程。

银行家算法的通俗解释

    银行家算法就是一种为了避免死锁的发生而设计出的一种资源分配的方法,这种算法通过预先假设分配资源来尽可能的满足需求,一步一步的推倒,最后判断分配完后系统是否处于一个安全状态,如果最后处于安全状态,则假设的分配方案成立,可以立即执行,否则,系统处于一个不安全的状态,应该拒绝资源的请求。

    就好比有一个银行家开了一家小银行,有几个房地产商需要向银行家借贷一部分资金用来建房子,待他们把房子建成之后,就会立即把钱归还给银行家,而对于银行家来说,如何最大化的利用自己手上的资金去借贷给房地产商,并且不会使得发生死锁的现象(即银行家手头上剩下的资金无法满足任何一个房地产商的借贷需求,这样会造成没有任何一个房地产商能够成功的把房子建成,也就无法把借贷的资金归还给银行家了,而不归还资金,银行家又没有收回足够的资金,也无法继续提供借贷服务,这样就形成了银行家和房地产商两难的现象),这这就需要一种优质的算法来解决这个问题,就是我们现在讲的银行家算法。

现实生活中,房地产开发商也会掉入这种“死锁”现象,可能的原因有如下几种:

1. **房企违规挪用预售资金**:一些房企可能会将预售资金用于其他项目投资或偿还债务,而不是专款专用于预售房屋的建设 2. **高杠杆经营模式**:房企为了追求快速发展,可能会过度借贷,增加财务杠杆,一旦市场环境变化,高杠杆带来的风险就会显现,导致资金链出现问题 3. **市场销售下滑**:房地产市场需求下降,导致房屋销售不畅,房企无法通过销售回笼资金,影响资金链的正常运转 4. **融资环境收紧**:金融机构对房地产市场的风险评估上升,导致房企融资难度增加,资金来源受限 5. **政策调控影响**:政府为了控制房地产市场过热,可能会出台一系列调控政策,如限购、限贷等,这些政策可能会影响房企的销售和融资,进而影响资金链 6. **预售资金监管不力**:如果监管机构对预售资金的监管不到位,房企可能会违规使用这些资金,增加了资金链断裂的风险 7. **项目进度延误**:由于施工过程中可能遇到的各种问题,如工程质量、供应链问题等,可能导致项目延期,进而影响资金回流和债务偿还 8. **经济环境变化**:宏观经济环境的变化,如经济增长放缓、利率上升等,都可能对房企的资金链造成压力

银行家算法涉及到的数据结构

    为了更加通俗的去解释银行家算法,我们假设每个房地产商建房子需要请不同国家的设计师来建设,不同国家的设计师需要支付不同种类的钱币,因此我们把5个进程分别比作房地产商P0,房地产商P1,房地产商P2,房地产商P3......把A,B,C三类资源看做是三种不同的钱币,例如人民币,美元和英镑。则n是房地产商的数目(此时n为 5),m是钱币的种类(此时m为3)。

    还有一些其他重要的数据结构如下如所示,请务必仔细阅读并理解下图:

                              点击图片可放大观看!!!

                             

    

    上面是一些银行家算法利用到的数据结构,其中和银行家有关系的数据结构是:【Available】【Work】【Finish】

分别代表的意思是:

【Available】银行家手头可以用来借贷的数量

【Work】与上面的【Available】同样的功能,但是请注意!!!【Available】代表最开始银行家手头所拥有的钱数,而【Work】代表此时银行家手头所拥有的钱数,即【Available】是初始值,变化后的值都用【Work】来表示

【Finish】表示房地产商是否完成了最后的借贷

其中和房地产商有关的数据结构是:【Finish】【Need】【Allocation】【Max】,

分别代表的意思是:

【Finish】表示房地产商是否完成了借贷

【Need】表示房地产商仍然需要借贷的金额数

【Allocation】表示房地产商手头已经拥有的钱款

【Max】表示房地产商建完房子所需要花费的总金额

银行家算法的组成

   

     银行家算法是由两种算法组成而来的,分为①安全状态判定算法和②资源请求算法。其中资源请求算法时建立在安全状态判定算法的基础上的。

①安全状态判定算法

    

    假设你就是这个银行家,为了成功的经营这家银行,你需要实时的对银行目前的资金状况作出一个安全风险评估,那么怎样才能认为银行目前所处于的状态是一个安全的状态呢?我们只需要使用安全状态判定算法,如果能够得出任意一个安全序列的话,那么就能保证此时银行是处于一个安全的状态的,既不会发生死锁现象(银行家和房地产商都无法完成任务),否则,此时银行就处于一个危险的状态,很有可能会发生死锁的现象。

【安全序列】:房地产商向银行借贷的顺序。

安全状态判定算法的步骤如下:

1.初始化Work[]数组的值为Available[]数组(该数组只用一次,表示最开始的状况)的值。

    把所有的Finish[i]都设置为False,表示此时所有的房地产商都没有完成借贷。

2.找到一个i同时满足下面两个条件:

    ①Finish[i]=false(房地产i未完成借贷任务)

    ②Need[i]



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有