银行家算法

✍ dations ◷ 2025-11-17 15:08:46 #操作系统技术,荷兰发明

银行家算法(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 - 当前可用的资源

相关

  • 林奈卡尔·冯·林奈(英语:Carl Linnaeus,瑞典语:Carl von Linné,1707年5月23日-1778年1月10日),也译为林内,受封贵族前名为卡尔·林奈乌斯(Carl Linnaeus),由于瑞典学者阶层的姓常拉丁化,又
  • 羊角号羊角号(挪威语:Bukkehorn)或羊号角,是挪威民俗乐器。具指孔可吹出旋律不同一般公羊号角(Billy Goat Horn),因此又称羊角喇叭。制造材质通常取自五至七岁公羊羊角,原是高山夏季牧场的
  • 碳燃烧过程碳聚变过程是一种核聚变反应,发生在质量较重的恒星(诞生时至少4 MSun以上)耗尽了核心内较轻的元素之后。它需要高温(6×108 K)和高密度(大约2×108 kg/m3),主要过程是:另一类为:在氦的
  • 制冷剂制冷剂,又称冷媒、致冷剂、雪种,是各种热机中借以完成能量转化的媒介物质。这些物质通常以可逆的相变(如气-液相变)来增大功率。如蒸汽引擎中的蒸汽、制冷机中的雪种等等。一般
  • 汽化汽化是指物质状态从液体向气体转换的一种相变,过程进行中需要吸热。汽化有两种形式,蒸发、沸腾。蒸发是只在液体表面发生,并且液体温度低于某一压力时的沸点。而沸腾是一种剧烈
  • 流域流域是以分水岭为界的一个河流、湖泊或海洋等的所有水系所覆盖的区域,以及由水系构成的集水区。地面上以分水岭为界之区域称为流域。流域内之径流集中于最低点而流出。最低点
  • 耿仲明耿仲明(1604年-1649年),明末辽东盖州(今辽宁盖州)人,字云台。崇祯初年为登州参将。清初三藩之一。原籍山东,矿工出身,当过辽东海盗,后投靠毛文龙,初与孔有德、尚可喜同为总兵毛文龙部属
  • 晋江县晋江县,中国旧县名。唐朝开元八年(720年)析泉州南安县置,治所在今福建省泉州市鲤城区,以城中多刺桐树,又称瑞桐,以泉安乡知名,故亦称泉安,属泉州。自唐代至清代为泉州、泉州路、泉州
  • 淡水公司田溪桥遗迹公司田桥遗址是位于台湾北部新北市淡水区的新制古迹,属于三级古迹,邻近三芝区,该桥建于1812年(清嘉庆12年),道光年间损毁,1862年(清同治元年)重建。2001年时成为当时台北县县定古迹(今
  • 臭鼬属臭鼬鼠(学名:Mephitis)是食肉目臭鼬科的一属,包括两种。