银行家算法

✍ dations ◷ 2025-12-08 14:28:11 #操作系统技术,荷兰发明

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

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

      Allocation   Max   Available    ABCD    ABCD  ABCD P1   0014    0656  1520  P2  1432    1942  P3  1354    1356 P4  1000    1750

我们会看到一个资源分配表,要判断是否为安全状态,首先先找出它的Need,Need即Max(最多需要多少资源)减去Allocation(原本已经分配出去的资源),计算结果如下:

   NEED ABCD 0642  0510 0002 0750

然后加一个全都为false的字段

 FINISH false false false false

接下来找出need比available小的(千万不能把它当成4位数 他是4个不同的数)

   NEED    Available ABCD  ABCD 0642  1520 0510<- 0002 0750

P2的需求小于能用的,所以配置给他再回收

  NEED     Available ABCD  ABCD 0642  1520 0000 +1432 0002------- 0750  2952

此时P2 FINISH的false要改成true(己完成)

 FINISH false true false false

接下来继续往下找,发现P3的需求为0002,小于能用的2952,所以资源配置给他再回收

  NEED      Available ABCD  A B C D 0642  2 9 5 2 0000 +1 3 5 4 0000---------- 0750  3 12 10 6


依此类推,做完P4→P1,当全部的FINISH都变成true时,就是安全状态。

如果所有过程有可能完成执行(终止),则一个状态(如上述范例)被认为是安全的。由于系统无法知道什么时候一个过程将终止,或者之后它需要多少资源,系统假定所有进程将最终试图获取其声明的最大资源并在不久之后终止。在大多数情况下,这是一个合理的假设,因为系统不是特别关注每个进程运行了多久(至少不是从避免死锁的角度)。此外,如果一个进程终止前没有获取其它能获取的最多的资源,它只是让系统更容易处理。

基于这一假设,该算法通过尝试寻找允许每个进程获得的最大资源并结束(把资源返还给系统)的进程请求的一个理想集合,来决定一个状态是否是安全的。不存在这个集合的状态都是不安全的。

P - 进程的集合

Mp - 进程p的最大的请求数目

Cp - 进程p当前被分配的资源

A - 当前可用的资源

相关

  • 黄老道道家系列条目黄老是早期道家思想的一种,把传统的归隐而居的道家的哲学用于治国以实现富国强兵,因推崇黄帝和老子而得名。黄老道家后来也变为道教的开端。老子之门人,托言黄帝,并
  • 术语术语又称技术名词、科学术语、科技术语或技术术语,是在特定专业领域中一般概念的词语指称,一个术语表示一个概念。研究术语的学科有术语学。由于文化差异,不同语种间的翻译也常
  • 肠胃穿孔肠胃穿孔(Gastrointestinal perforation)又称为肠道破裂(Ruptured bowel),为部分消化道管壁(英语:Gastrointestinal wall)破洞。消化道包含食道、胃、小肠与大肠。。其症状包含严重
  • 肯定推得否定肯定前提推得否定结论(英文:negative conclusion from affirmative premises)是一种形式谬误,是因三段论中前提皆为肯定,而结论为否定,导致论证无效。例句:推理规则:例句分析结果:有
  • 精神卫生心理健康(Mental health)也称为精神卫生,是指心理幸福安宁的状态,或指没有精神疾病的状态。是指“一个情绪及行为调整都运作相当良好的人,当时的心理状态”。若以正面心理学或是
  • 火耗归公耗羡归公又称火耗归公,中国历史上,地方官向民众征收税金时,会以运送与镕铸等耗损为由,多征银两,更称为火耗或耗羡,但耗羡的范围大于火耗,耗羡还包含雀鼠耗等。征纳运京的米谷,被雀鼠
  • 宣州宣州区是中国安徽省宣城市下辖的一个区。面积2533平方千米,人口84万。邮政编码242000。区人民政府驻叠嶂中路。西汉时,在境内开始置宛陵县,西晋为宣城郡郡治。隋朝时,改为宣城县
  • 硝石硝石,也称消石、火硝、牙硝(古书上又称茫消或北帝玄珠,焰硝等),是一种天然矿物,主要成分为硝酸钾。其他来源的硝酸钾,以及其他的硝酸盐矿物如智利硝石(硝酸钠)、挪威硝石(硝酸钙)有的时
  • 富冈渔港富冈渔港是一座小型规模的渔港,位于台湾台东县台东市的富冈里,东临太平洋。富冈渔港是台东县内第二大之渔港,仅次于成功渔港。渔港位于台东县海岸线中点,位在卑南溪出海口北方,距
  • 卡波瓦莱卡波瓦莱(意大利语:Capovalle),是意大利布雷西亚省的一个市镇。总面积23平方公里,人口404人,人口密度17.6人/平方公里(2009年)。国家统计(ISTAT)代码为017036。