银行家算法

✍ dations ◷ 2025-06-29 19:40:30 #操作系统技术,荷兰发明

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

相关

  • Jori, Alberto阿尔贝托·约里(意大利语:Alberto Jori,1965年7月2日-),意大利历史学家、哲学家,目前是德国杜宾根大学哲学系的教授。他同时也是亚里斯多德哲学的专家,在2003年,他借由关于亚里斯多德
  • 沙里亚伊斯兰教法,音译为沙里亚(阿拉伯语:شريعة‎,Šarīʿa,.mw-parser-output .IPA{font-family:"Charis SIL","Doulos SIL","Linux Libertine","Segoe UI","Lucida Sans Unicod
  • 第一次王子之乱第一次王子之乱,是朝鲜王朝太祖八年(明太祖洪武三十一年,公元1398年)发生的政变,又称戊寅靖社。朝鲜王朝开国君主李成桂有两个王妃。元配是承仁顺圣神懿王后安边韩氏,于恭让王二年
  • WEST欧洲西部夏令时间(Western European Summer Time,缩写WEST),是欧洲西部时间的夏令时,比世界标准时间早一个小时。它被以下国家和地区采用:在英国,欧洲西部夏令时间也被称作为英国标
  • 小凌河小凌河,中国辽宁省西部河流,又名锦川,辽朝时称小灵河,元朝后改为现称,与大凌河对称。小凌河发源于朝阳县,北流至朝阳县折而向东,流经锦州市市区后折而向南,注入辽东湾。小凌河全长20
  • 朗德罗克朗德罗克(Round Rock)也称为圆石城,是美国德克萨斯州的一座城市。位于德克萨斯州威廉森县,一小部分位于特拉维斯县,临近德克萨斯州的首府奥斯汀。朗德罗克有德克萨斯州体育之都之
  • 青莱片青莱片,旧称青州片,是汉语官话方言胶辽官话的一片区,主要分布于山东省的山东半岛胶莱平原地区及江苏省赣榆县,此外在黑龙江省抚远县二屯还有方言岛。内分青岛小片、青朐小片、莱
  • 山原猫(L. jacobita)山原猫(学名:Leopardus jacobita),又名南美山猫或安第斯山猫,是一种细小的野生猫科。它们是传统上两种没有亚种的猫科之一。它们的数量估计少于2500只,但却只有有限的保育工作。山
  • 兔,又称兔子,在汉语中是哺乳类兔形目兔科(学名:Leporidae)物种的总称。 兔子过去认为是草食动物,偶尔吃肉补充蛋白质,近年研究发现多种野兔可能长期食用肉类。正在吃牧草的兔子一只
  • 胡叶宝玉胡叶宝玉(1918年-2016年6月7日),因难产被救而立志成为助产师,长期在台湾花东地区服务,第十八届医疗奉献奖得主。胡叶宝玉在宜兰头城生长子时难产,请到宜兰市有名的助产士郑李秋兰才