[操作系统] 银行家算法

这篇具有很好参考价值的文章主要介绍了[操作系统] 银行家算法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

安全序列

如果系统按照这种序列分配资源,则每个进程都能顺利完成。只要能找出一个安全序列,系统就是安全状态。

当然,安全序列可能有多个

通俗理解模型

此时你是一位成功的银行家,手里有100亿资金…

此时有三个企业想找你贷款,分别是企业B,企业A,企业T

B:“大哥,我最多要借70亿”

A:“大哥,我最多要借40亿”

T:“大哥,我最多要借50亿”

有个规矩:借给企业的钱达不到企业提出的最大要求,那么你借的钱就打水漂了

当然你也不想你的钱打水漂,那么就要考虑 怎么借才能保证自己的100亿不打水漂

初始借完钱

最大要求 已经借走 最多再借
B 70 20 50
A 40 10 30
T 50 30 20

此时你手里还有40亿

分析借钱的安全序列

  1. 此时B想跟你借30亿,你敢借吗?

    1. 假如你答应了:借给了B 30亿,那么你的手里还有10亿,上面的图稍作修改,如下图:

    2. 最大要求 已经借走 最多再借
      B 70 20+30=50 50-30=20
      A 40 10 30
      T 50 30 20
    3. 如果其他企业再提出借20亿,那你巴比Q了,显然你借不了,你的钱打水漂了,所以这个钱不能借。不安全

  2. 此时A想跟你借20亿,你敢借吗?

    1. 假如你答应了:借给了A 20亿,那么你的手里还有20亿,上面的图稍作修改,如下图:

    2. 最大要求 已经借走 最多再借
      B 70 20 50
      A 40 10+20=30 30-20=10
      T 50 30 20
    3. 接下来你可以把这20亿都借给T企业。等他把钱全部还回来了,手里就有50亿,再把这些钱借给B企业。等他把钱全部还回来了,手里就有70亿,最后再借给A企业。这样你的钱就全回来了。

    4. 所以此借钱序列(安全序列):T->B->A

    5. 根据上述思路自行验证这个序列:A->T->B

银行家算法

核心思想

在进程提出资源申请时, 先预判此次分配是否会导致系统进入不安全状态。 如果会进入不安全状态, 就暂时不答应这次请求, 让该进程先阻塞等待。

核心是:安全性算法

资源表示

把单维的数字拓展为多维的向量。 比如: 系统中有5个进程 P0~P4, 3种资源 R0~R2, 初始数量为 (10, 5, 7)

进程 最大需求 已经分配 最多需要
P0 (7,5,3) (0,1,0) (7,4,3)
P1 (3,2,2) (2,0,0) (1,2,2)
P2 (9,0,2) (3,0,2) (6,0,0)
P3 (2,2,2) (2,1,1) (0,1,1)
P4 (4,3,3) (0,0,2) (4,3,1)

此时已经分配了(7,2,5),还剩余(3,3,2)

安全性算法分析系统状态

  1. 此时系统是否处于一种安全状态?若是,则找出一条安全序列。

    1. 首先,检查剩余的资源是否满足各个进程的需求

    2. 我们发现能满足P1、P3的需求。那先分配给P1(将P1加入安全序列),等待他结束,那么剩余资源将变为(5,3,2);再分配给P3(将P3加入安全序列),等他结束,剩余资源将变为(7,4,3)。如下图:

    3. 进程 最大需求 已经分配 最多需要
      P0 (7,5,3) (0,1,0) (7,4,3)
      P2 (9,0,2) (3,0,2) (6,0,0)
      P4 (4,3,3) (0,0,2) (4,3,1)
    4. 将P4、P2、P0(他们最多需要的资源数小于剩余资源)加入安全序列,最终可得到一个安全序列。安全性算法

  2. 实际做题(手算)的情况下可用更快速的方法找到一个安全序列

    1. (3, 3, 2) 可满足 P1、 P3, 说明无论如何, 这两个进程的资源需求一定是可以依次被满足的, 因此P1、 P3 一定可以顺利的执行完, 并归还资源。 可把 P1、 P3 先加入安全序列。(2, 0, 0) + (2, 1, 1) + (3, 3, 2) = (7, 4, 3)
      剩下的 P0、 P2、 P4 都可被满足。 同理, 这些进程都可以加入安全序列 。于是, 5个进程全部加入安全序列, 说明此时系统处于安全状态, 暂不可能发生死锁
  3. 特殊:找不到安全序列的列子

    1. 进程 最大需求 已经分配 最多需要
      P0 (8, 5, 3) (0, 1, 0) (8, 4, 3)
      P1 (3,2,2) (2,0,0) (1,2,2)
      P2 (9, 5 ,2) (3, 0, 2) (6, 5, 0)
      P3 (2,2,2) (2,1,1) (0,1,1)
      P4 (4, 3, 6) (0, 0, 2) (4, 3, 4)
    2. 资源总数(10,5,7),剩余可用资源(3,3,2)

    3. (3, 3, 2) 可满足 P1、 P3,可把 P1、 P3 先加入安全序列,剩余可用资源(7, 4, 3)

    4. 进程 最大需求 已分配 最多还需要
      P0 (8, 5, 3) (0, 1, 0) (8, 4, 3)
      P2 (9, 5 ,2) (3, 0, 2) (6, 5, 0)
      P4 (4, 3, 6) (0, 0, 2) (4, 3, 4)
    5. 剩下的无法满足,每一位对比。剩下的 P0 需要 (8, 4, 3)(7, 4, 3) P2 需要 (6, 5, 0)(7, 4, 3) P4 需要 (4, 3, 4)

    6. 无法找到任何一个安全序列, 说明此时系统处于不安全状态, 有可能发生死锁

下面进入正题:银行家算法的实现

银行家算法实现

进程 最大需求Max 已分配Allocation 最多还需要Need
P0 (7, 5, 3) (0, 1, 0) (7, 4, 3)
P1 (3, 2, 2) (2, 0, 0) (1, 2, 2)
P2 (9, 0 ,2) (3, 0, 2) (6, 0, 0)
P3 (2, 2, 2) (2, 1, 1) (0, 1, 1)
P4 (4, 3, 3) (0, 0, 2) (4, 3, 1

数据结构:

n*m 矩阵 Max 表示各进程对资源的最大需求数

n*m 矩阵 Allocation 表示已经给各进程分配 了多少资源

Max – Allocation = Need 矩阵表示各进程最多还需要多少资源

长度为 m 的一维数组 Available 表示还有多少可用资源 [表示:Available = (3, 3, 2)]

用长度为 m 的一位数组 Requesti表示进程此次申请的各种资源数 [表示:Request0 = (2, 1, 1) ]

思路分析
  1. 如果 Requesti[j]≤Need[i, j] (0≤j≤m)便转向 2 ; 否则认为出错 :因为它所需要的资源数已超过它所宣布的最大值

  2. 如果 Requesti[j]≤Available[j] (0≤j≤m), 便转向 3 ; 否则表示尚无足够资源, Pi必须等待

  3. 系统试探着把资源分配给进程Pi, 并修改相应的数据(并非真的分配, 修改数值只是为了做预判

    Available = Available - Requesti;
    Allocation[i, j] = Allocation[i, j] + Requesti[j];
    Need[i, j] = Need[i, j]Requesti[j]  
    
  4. 操作系统执行安全性算法, 检查此次资源分配后, 系统是否处于安全状态。 若安全, 才正式分配; 否则, 恢复相
    应数据, 让进程阻塞等待

银行家算法步骤
  1. 检查此次申请是否超过了之前声明的最大需求数
  2. 检查此时系统剩余的可用资源是否还能满足这次请求\
  3. 试探着分配, 更改各数据结构
  4. 用安全性算法检查此次分配是否会导致系统进入不安全状态
安全性算法步骤

检查当前的剩余可用资源是否能满足某个进程的最大需求, 如果可以, 就把该进程加入安全序列,并把该进程持有的资源全部回收。
不断重复上述过程, 看最终是否能让所有进程都加入安全序列。

系统处于不安全状态未必死锁, 但死锁时一定处于不安全状态。 系统处于安全状态一定不会死锁

升华思维

死锁预防是保证系统不进入死锁状态的静态策略,其解决办法是破坏产生死锁的四个必要条件之一、下列方法中 破坏了“循环等待”条件的是( )。

A. 银行家算法
B. 一-次性分配策略
C. 剥夺资源法
D. 资源有序分配策略

产生死锁的四个必要条件:互斥、不剥夺、请求和保持、循环等待
资源有序分配策略可以限制循环等待条件的发生。选项A判断是否为不安全状态;选项B破坏了占有请求条件;选项C破坏了非剥夺条件。

某系统中有三个并发进程都需要四个同类资源,则该系统必然不会发生死锁的最少资源是( )。

A. 9
B. 10
C. 11
D. 12

资源数为9时,存在三个进程都占有三个资源,为死锁;资源数为10 时,必然存在一个进程能拿到4个资源,然后可以顺利执行完其他进程。

[操作系统] 银行家算法

A. Ⅱ、Ⅲ

B. Ⅰ、Ⅱ

C. Ⅰ

D. Ⅰ、Ⅲ

[操作系统] 银行家算法文章来源地址https://www.toymoban.com/news/detail-404257.html

到了这里,关于[操作系统] 银行家算法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【操作系统原理实验】银行家算法模拟实现

    选择一种高级语言如C/C++等,编写一个银行家算法的模拟实现程序。1) 设计相关数据结构;2) 实现系统资源状态查看、资源请求的输入等模块;3) 实现资源的预分配及确认或回滚程序;4) 实现系统状态安全检查程序;5) 组装各模块成一个完整的模拟系统。 (1)设计思想: 1、

    2024年02月01日
    浏览(44)
  • 【操作系统】银行家算法个人出题例题 (含答案)

    1.银行家算法是代表性的避免死锁的算法,在进程调度中具有重要作用。请结合所学知识回答以下问题:(23分——加长版) (1)银行家算法使用的四个必要的数据结构是:可用资源向量Available,____________,分配矩阵Allocation,需求矩阵Need。(1分) (2)以下是银行家算法具体实现

    2024年02月12日
    浏览(35)
  • 操作系统实验二死锁避免之银行家算法的模拟

    死锁  (1)定义  (2)死锁产生的原因  (3)死锁产生的必要条件  (4)死锁的处理策略 银行家算法  (1)核心思想  (2)数据结构  (3)算法描述    (4)  安全性检查算法 银行家算法的模拟 (1)数据结构 (2)完整代码 (3)测试 所谓死锁,是指多个进程因为竞争资

    2024年02月01日
    浏览(64)
  • 操作系统银行家算法(JAVA/Python/C#/JavaScript/C/C++)代码实现

    银行家算法是一种资源分配和死锁避免算法,它通过模拟所有资源的预定最大可能数量的分配来测试安全性,然后进行“s状态”检查以测试可能的活动,然后决定是否应该允许继续分配。 Banker’s algorithm 之所以叫“银行家算法”,是因为它在银行系统中被用来检查贷款是否

    2024年02月06日
    浏览(73)
  • 银行家算法--申请资源

    问题描述: 输入N个进程(N=100),以及M类资源(M=100),初始化各种资源的总数,T0时刻资源的分配情况。例如: 假定系统中有5个进程{P0,P1,P2,P3,P4}和三类资源{A,B,C},各种资源的数量分别为10、5、7,在T0时刻的资源分配图如下: 输入申请资源的进程以及申请各类资源的数

    2024年02月03日
    浏览(59)
  • 银行家算法

    银行家算法(Banker’s Algorithm)是一个避免死锁(Deadlock)的著名算法,是由艾兹格·迪杰斯特拉在1965年为T.H.E系统设计的一种避免死锁产生的算法。它以银行借贷系统的分配策略为基础,判断并保证系统的安全运行。 假设客户A、B、C 三人向银行贷款用于建房,分别需要贷款

    2024年02月02日
    浏览(37)
  • 银行家算法的实验报告

    一、实验内容 银行家算法是避免死锁的一种重要方法,本实验要求编写和调试一个简单的银行家算法程序。 1.设计进程对各类资源最大申请表示及初值的确定。 2.设定系统提供资源的初始状况。 3.设定每次某个进程对各类资源的申请表示。 4.编制程序,依据银行家算法

    2023年04月26日
    浏览(45)
  • 银行家算法(C++实现)

    目录 一、银行家算法概述 二、银行家算法需要的数组结构 三、算法概述 1.安全性算法 2.银行家算法 四、代码实现 五、实验结果验证 银行家算法 (Banker\\\'s Algorithm)是一个避免死锁(Deadlock)的著名算法,是由艾兹格·迪杰斯特拉在1965年为T.H.E系统设计的一种避免死锁产生的

    2024年01月24日
    浏览(30)
  • C语言实现银行家算法

    银行家算法 最初是由荷兰计算机科学家艾兹赫尔·迪杰斯特拉(Edsger W. Dijkstra)于1965年提出的。当时他正致力于解决多道程序设计中产生的死锁问题。在多道程序设计中,由于不同进程之间共享有限的系统资源,如内存、I/O设备等,因此存在一个进程等待其他进程释放资源而

    2024年02月05日
    浏览(40)
  • 银行家算法 源码+实验报告(用了自取)

    XI`AN TECHNOLOGICAL UNIVERSITY 课程设计报告 实验课程名称 操作系统—银行家算法     专    业 :计算机科学与技术          班    级 :                姓    名 :                   学    号 :          实验学时 :                     

    2024年02月09日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包