操作系统之银行家算法

目录

前言

银行家算法

定义

举例

策略

思路

结束语


前言

今天是坚持写博客的第16天,已经超过半个月了,希望可以继续坚持,不断积累与回顾,夯实基础知识体系的基础。我们今天来讲讲操作系统当中的另一个重要知识点——银行家算法,希望对大家有所帮助。


银行家算法

定义

银行家算法是一种经典的用于避免操作系统中死锁问题的资源分配算法。它模拟了银行贷款管理的思路策略,确保系统在分配资源时能够维持在一个安全状态,从而防止死锁的发生。

银行家算法通过预测系统未来的资源分配情况,确保每次资源分配后系统仍能保持在安全状态,即存在一种资源分配序列,使得每个进程都能顺利完成,最终释放其占用的资源。

举例

我们仍然通过一道例题来解释银行家算法的解题策略和思路,并最终得出答案,带大家用最少的时间有最大的收获。

某系统有R1、R2、R3、R4四种资源,在T1时刻P1,P2,P3,P4,P5这五个进程对资源的占用和需求情况如下。现在已知系统中R1到R4的资源数量分别为15,9,12,11,那么请回答下列问题:

  1. 当前系统是否处于安全状态?写出它的安全序列。
  2. 如果P1发出资源请求(0,0,1,0),为了保证系统安全,能否分配资源这个进程?如果可以,请写出它的安全序列,反之请说明原因。


灵魂画手今天画的还行吧


策略

接下来是最重要的一步,我们介绍解题策略。求解银行家算法主要有以下几个重要步骤,我们记住后就能解决大部分问题:

  1. 用题目中R1-R4的数量减去Allocation中R1-R4的重量求得R1-R4的可用资源Available。
  2. 用Max中的R1-R4减去Allocation中的R1-R4求得需要的数量Need。
  3. 画出Work、Allocation、Need、Work+Allocation、Finish五个量组成的表。(内容先不填)
  4. 将第一步中求得的Available放在第一行的work当中,找到P1-P5当中的need的R1-R4值每一个都小于等于它的,将该进程的编号、allocation、need抄入第一行的对应位置。
  5. 根据刚刚抄入的数据求的work+allocation,并把finish置为true。
  6. 把第五步的数据抄到第二行的work处。
  7. 重复4、5、6步,直到所有进程都比较完。
  8. 第二小问是否可以分配,我们只需要将P1的请求写为request(0 0 1 0),并把request和P1的need、available比较,如果request同时小于等于他们两个,那么就可以分配,反之只要有一个大于,就不可以分配。

思路

根据解题策略,我们可以有下面的解题思路,最终的表格我们将放在思路的最后:

  1. 求出available和P1-P5的need,available为(1 0 0 4),need分别为(1 0 0 3)(0 2 1 0)(1 2 0 8)(1 1 1 2)(0 2 3 0)。
  2. 把available放入第一行的work,与P1-P5的need的R1-R4比较,发现进程P1的need的每一项都比它小(1 0 0 3)和(1 0 0 4)。
  3. 求出work+allocation(3 1 1 4)。finish置为true。
  4. 把第三步的work+allocation写到第二行,继续与P2-P5比较,发现P4的need每一项都比它小(1 1 1 2)和(3 1 1 4)。
  5. 求出work+allocation(6 2 2 7)。finish置为true。
  6. 把第五步的work+allocation写到地上喊,继续与P2P3P5比较,发现P2的need每一项都比它小(0 2 1 0)和(6 2 2 7)。
  7. 求出work+allocation。finish置为true。
  8. 同理,比较P3和P5,最终我们可以得出这样的结果:

 其中安全序列就是在比较完成后的Process的顺序:P1 P4 P2 P5 P3。

第二小问是否可以分配,P1的request(0 0 1 0)比need(1 0 0 3)大,因此不能分配。

至此,这道就完成了。


结束语

今天对操作系统当中的银行家算法的讲解就到这里,希望对大家有所帮助,如果对您有帮助,希望您可以留下点赞、收藏或关注,这对我真的很重要,谢谢!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/21400.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue2组件传参方法

一、父传子 1、$refs方法 <template><div class"father"><h1>我是父亲</h1><button click"getHeight">获取身高</button><ChildView ref"childRef"></ChildView></div> </template&…

第4章:车辆的横向优化控制

4.1 车辆动力学模型 注1&#xff1a;运动学模型和动力学模型最大的不同点在于 运动学模型是在我们不考虑车辆的受力情况下建立的&#xff08;回顾我们推导出运动学模型的过程&#xff0c;我们没有使用到任何车辆所受的外力作为公式中的已知量&#xff0c;而是直接通过 “ 车速…

云计算-云基础设施的配置 (Provisioning Cloud Infrastructure)

AWS CloudFormation (AWS CloudFormation) 它是一项服务&#xff0c;允许我们自动建模和配置所需的AWS资源。可以使用模板来实现这一目的。这个模板基本上是用JSON或YAML格式编写的。AWS CloudFormation会根据模板描述的内容来实施资源的配置和管理。我们可以成组配置和管理一组…

华为交换机的基本配置

实验拓扑&#xff1a; 实验目的&#xff1a;认识二层交换机和二层交换技术的工作原理&#xff1b;认识三层交换和三层交换技术。 三层功能简而言之就是了具有路由的功能&#xff0c;设备可以充当网关和路由器。 实验要求&#xff1a;公司的两个部门用vlan进行划分&#xff0c…

vs中.\ 与 ..\ 区别

100编程书屋_孔夫子旧书网 在 Visual Studio 中&#xff0c;. 和 .. 是表示相对路径的两个特殊符号。 . 表示当前目录&#xff0c;例如&#xff1a;.\file.txt 表示当前目录下的文件 "file.txt"。 .. 表示上一级目录&#xff0c;例如&#xff1a;..\file.txt 表示上…

喵星人必备!福派斯三文鱼猫粮,营养满分!

猫粮品牌&#xff1a;福派斯三文鱼猫粮测评体验 在快节奏的都市生活中&#xff0c;我们的宠物猫也需要适应当下的生活环境&#xff0c;并保持健康和活力。作为一名合格的铲屎官&#xff0c;我们总是关心如何为猫咪提供既健康又美味的饮食。今天&#xff0c;我有幸为大家带来一…

QT 如何在 QListWidget 的选项中插入自定义组件

有时我们需要 QListWidget 完成更复杂的操作&#xff0c;而不仅限于添加文本或者图标&#xff0c;那么就会使用到 setItemWidget 函数&#xff0c;但是这也会伴生一个问题&#xff0c;插入自定义组件后&#xff0c;QListWidget 对选项点击事件的获取会收到阻塞&#xff0c;因…

Docker安装启动Mysql

1、安装Docker&#xff08;省略&#xff09; 网上教程很多 2、下载Mysql5.7版本 docker pull mysql:5.7 3、查看镜像是够下载成功 docker images 4、启动镜像&#xff0c;生成容器 docker run --name mysql5.7 -p 13306:3306 -e MYSQL_ROOT_PASSWORD123456 -d mysql:5.7 5…

内网-2(代理)

一、代理概述 1、代理服务器(proxy server)&#xff1a;代理网络用户去取得网络信息&#xff0c;介于浏览器与web服务器之间的一条服务器。 注&#xff1a;为了方便&#xff0c;以下用B来代表浏览器的主机&#xff0c;S来代表服务器的主机。 2、正向代理和反向代理 正向代…

PolarCTF 2024夏季个人挑战赛 个人WP

【WEB】审计 直接给源码&#xff0c;php特性 秒了&#xff0c;有个特殊的东西 0e215962017&#xff0c;他md5后的值是本身 【WEB】扫扫看 敏感目录flag.php 【WEB】debudao 查看网页源码&#xff08;里面的flag是错的&#xff09; 查看网络 【WEB】ExX? 开题 扫一下&#…

法国工程师数电练习题——有限状态机

1. 有限状态机 1.1 问题背景描述 给定的有限状态机由其状态图表示&#xff0c;具有两个输入E1和E2以及一个输出S。状态机为下图。请为以下输入序列绘制这个Moore机的时序图&#xff1a; 1) 在t50纳秒时&#xff0c;E1E211 2) 在t150纳秒时&#xff0c;E1E200 …

1.盒模型及其应用(溢出、外边距塌陷)

一、盒模型 盒模型详解-CSDN博客 CSS学习笔记3&#xff1a;CSS三大特性、盒子模型-CSDN博客 1.盒模型组成 &#xff08;1&#xff09;padding padding和border都会撑大盒子&#xff0c;margin不会. 如果没有指定盒子的width/height&#xff0c;那么padding不会撑大盒子。 &am…

Nvidia Jetson/Orin +FPGA+AI大算力边缘计算盒子:公路智能巡检解决方案

项目背景 中国公路网络庞大&#xff0c;总里程超过535万公里&#xff0c;高速公路里程位居世界前列。面对基础设施存量的不断增长&#xff0c;公路养护管理已迈入“建管养并重”的新时代。随着养护支出的逐年攀升&#xff0c;如何提升养护效率、降低管理成本&#xff0c;成为亟…

YOLOv10:实时端到端目标检测的新突破

目标检测作为计算机视觉领域的一个核心问题&#xff0c;其关键在于能够在图像中准确识别并定位对象。随着深度学习技术的发展&#xff0c;基于深度神经网络的目标检测方法不断涌现&#xff0c;其中YOLO&#xff08;You Only Look Once&#xff09;系列算法以其优异的实时性和准…

C++类和对象下篇

&#x1f407; &#x1f525;博客主页&#xff1a; 云曦 &#x1f4cb;系列专栏&#xff1a;[C] &#x1f4a8;路漫漫其修远兮 吾将而求索 &#x1f49b; 感谢大家&#x1f44d;点赞 &#x1f60b;关注&#x1f4dd;评论 文章目录 &#x1f4d4;1、再谈构造函数&#x1f4f0;…

【C++】类和对象——构造和析构函数

目录 前言类的六个默认构造函数构造函数1.构造函数的概念2.构造函数的特性 初始化列表1.构造函数整体赋值2.初始化列表 析构函数1.析构函数的概念2.析构函数的特性 前言 类和对象相关博客&#xff1a;【C】类和对象   我们前面一个内容已经讲了关于类好对象的初步的一些知识&…

Python量化交易学习——Part5:通过相关系数选择对收益率影响比重大的因子(1)

上一节中我们学习了如何通过单因子策略进行股票交易,在实际的股市中,因子(也就是指标)数量往往非常之多,比如市盈率/市净率/净资产收益率等,在使用这些因子的过程中,我们会发现有的因子与收益率为正相关,有的因子为负相关,而有些因子几乎完全无关。 所以我们可以通过计…

JS-10-es6常用知识-对象扩展

目录 1 Object.assign&#xff1a;实现拷贝继承 2 扩展运算符(...) 1&#xff09;介绍 2&#xff09;数组中的扩展运算符 3&#xff09;对象中的扩展运算符 1 Object.assign&#xff1a;实现拷贝继承 1&#xff09;目的&#xff1a;Object.assign()方法在 JavaScript 中被…

Flutter开发效率提升1000%,Flutter Quick教程之定义构造参数和State成员变量

一个Flutter页面&#xff0c;可以定义页面构造参数和State成员变量。所谓页面构造参数&#xff0c;就是当前页面构造函数里面的参数。 比如下面代码&#xff0c;a就是构造参数&#xff0c;a1就是State成员变量。 class Testpage extends StatefulWidget {String a;const Test…

Python的文件管理

读取文件 首先我们可以先创建一个工程项目&#xff0c;如图所示&#xff1a; 打开我们名为1.读取文件.py的python文件&#xff0c;然后我们可以写下读取Python文件的代码&#xff0c;代码如下&#xff1a; f open("1.txt", "r") print(f.read()) f.clos…