操作系统-银行家算法

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

目录

一、银行家算法

二、银行家算法的流程和数据结构

1.数据结构

2.步骤流程

3.安全性算法

三、举例

解题思路

答案


一、银行家算法

为了避免死锁,出现了银行家算法。

系统必须确保是否有足够的资源分配给一个进程,若有,再计算分配后系统是否会处于不安全状态,若安全,才会分配。

通俗来说,就是“我”是否有足够的钱来买一件衣服,并且还有判断剩余的钱是否让“我”的生活处于影响状态。如果有足够钱,并且不会对“我”的生活产生影响,“我”购买该衣服。

二、银行家算法的流程和数据结构

1.数据结构

①可利用资源向量Available        初值是系统中配置的该类全部可用资源数目,available[j]=k,代表现有类资源K个

②最大需求矩阵Max        Max[i,j]=K,代表进程i需要类资源最大数目为K 

③分配矩阵Allocation        当前已分配给每个进程的资源数

④需求矩阵Need

关系:Need[i,j]=Max[i,j]-Allocation[i,j]

2.步骤流程

是进程的请求向量。发出资源请求后, 

(1)如果,继续;否则出错,超出了所需最大值

(2)如果,继续;否则等待,无足够资源

(3)试分配,判断新时刻是否安全

操作系统-银行家算法

(4)执行安全性算法,检查是否安全

推论:

n个资源,n个并发进程共享,每个进程提出最大资源请求量x

则 n(x-1)+1<=m

当m<=n,x=1 

当m>n,x=m-1/n+1

3.安全性算法

(1)设置两个向量。①工作向量Work,开始执行安全性算法时,Work=Available;

                                  ②Finish,开始时Finsh[i]=flase;足够资源时Finish[i]=true

(2)在进程中找到一个满足以下条件的进程:找到后执行步骤3

                ①

                ②

(3)当获得资源后,顺利执行直到结束,并释放资源。返回步骤2

                操作系统-银行家算法

                

(4)当所有进程的Finish[i]=true都满足,则处于安全状态。

三、举例

在银行算法中,若出现了以下资源分配情况,试问:

Process Allocation Need Available
P0 0 0 3 2 0 0 1 2 1 6 2 2

P1

1 0 0 0 1 7 5 0
P2 1 3 5 4 2 3 5 6
P3 0 3 3 2 0 6 5 2
P4 0 0 1 4 0 6 5 6

(1)该状态是否安全;

(2)若进程P2提出请求Request(1,2,2,2)后,系统能否将资源分配给它?

解题思路

(1)我们需要找到这个状态的一个安全序列,即找到一个序列,保证所有的进程都是安全的。安全序列的顺序可以有很多,只需保证在你找到的顺序中是可执行的即可。

例如,我观察此时刻,可用资源(available)此时只能满足P0的资源请求,所以填写P0进程资源情况,P0进程结束资源得到释放,此时的可用资源available是P0的工作向量work加上已分配向量allocation。此时可用资源available变成1 6 5 4,此时可以满足P3的资源请求。等P3结束并释放可用资源变成1 9 8 6,满足P4。以此类推,可以得到此时刻的安全序列。

(2)P2发出资源请求,此时比较请求资源request和所需资源need大小,再比较请求资源request和可用资源available大小。如果request都小,则假设可以分配,修改可用资源available,需求资源need,已分配资源allocation。再分析此时修改后是否能得到安全序列。

此题中,已经修改后的可用资源available不能满足任一一个进程的需求,所以我们找不到此时的安全序列,所以假设不成立,故不能分配资源。

答案

(1)

进程\资源情况 work need allocation

work+allocation

(available)

finish
P0 1 6 2 2 0 0 1 2 0 0 3 2 1 6 5 4 TRUE
P3 1 6 5 4 0 6 5 2 0 3 3 2 1 9 8 6 TRUE
P4 1 9 8 6 0 6 5 6 0 0 1 4 1 9 9 10 TRUE
P1 1 9 9 10 1 7 5 0 1 0 0 0 2 9 9 10 TRUE
P2 2 9 9 10 2 3 5 6 1 3 5 4 3 12 14 14 TRUE

因为在T0时刻存在{P0,P3,P4,P1,P2}的安全序列,所以该状态安全。

(2)

Request(1,2,2,2)<=Need(2,3,5,6)

Request(1,2,2,2)<=Available(1,6,2,2)

所以先假定可以为P2分配资源,修改available,allocation,need

此时:

Process Allocation Need Available
P0 0 0 3 2 0 0 1 2 0 4 0 0

P1

1 0 0 0 1 7 5 0
P2 2 5 7 6 2 3 5 6
P3 0 3 3 2 0 6 5 2
P4 0 0 1 4 0 6 5 6

因为无法找到一个安全序列,所以不能将资源分配给它。文章来源地址https://www.toymoban.com/news/detail-434306.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

领红包