操作系统之银行家算法

目录

前言

银行家算法

定义

举例

策略

思路

结束语


前言

今天是坚持写博客的第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&…

MATLAB中扩展卡尔曼滤波误差估计的关键点

在MATLAB中&#xff0c;对于扩展卡尔曼滤波&#xff08;EKF&#xff09;的误差估计&#xff0c;主要涉及对系统状态估计的准确性和精度的评估。EKF是一种适用于非线性系统的状态估计方法&#xff0c;它通过递归的方式&#xff0c;结合系统的动态模型和观测模型&#xff0c;来预…

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

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

2024年BCSP-X小学高年级组初赛真题

一、单项选择题(共15题,每题2分,共计30分) 计算机在工作过程中突然停电,() 中的信息不会丢失。 A. 缓存 B. 寄存器 C. RAM D. ROM中级表达式a*(b+c)-d的后缀形式是( )。 A. a b c d * + - B. a b c + * d - C. a b c * + d - D. - + *a b c d设栈S的初始状态为空,元素a,b,c,d,e…

云计算-云基础设施的配置 (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;我有幸为大家带来一…

测试计划中都包含哪些内容

测试目的和范围&#xff1a;要明确测试的目的&#xff0c;需要测试哪个功能&#xff1f;要测试哪个软件系统&#xff1f;测试的类型是什么&#xff0c;功能测试、性能测试还是接口测试&#xff0c;测试的阶段是什么&#xff1f;单元测试、集成测试还是系统测试&#xff0c;以及…

Harmony os Next——Retrofit网络库的使用和封装

这里写目录标题 Harmony os Next——Retrofit网络库的使用和封装描述Retrofit的使用BaseService部分功能使用GETPOST 创建拦截器创建实例全局封装 Harmony os Next——Retrofit网络库的使用和封装 描述 Retrofit作为Android平台最为常用的一个第三方网络库&#xff0c;搭配Ko…

【TensorFlow深度学习】循环神经网络RNN的基本结构与功能

循环神经网络RNN的基本结构与功能 循环神经网络&#xff08;RNN&#xff09;的基本结构与功能&#xff1a;时间序列数据的深度解析RNN的基本结构功能与应用场景代码示例&#xff1a;TensorFlow实现简单RNN结语 循环神经网络&#xff08;RNN&#xff09;的基本结构与功能&#x…

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、正向代理和反向代理 正向代…

MySQL学习——查询示例(三)

1 计算每天的访问 以下示例显示了如何使用位组函数来计算用户每月访问网页的天数。 CREATE TABLE t1 (year YEAR, month INT UNSIGNED, day INT UNSIGNED); INSERT INTO t1 VALUES(2000,1,1),(2000,1,20),(2000,1,30),(2000,2,2), (2000,2,23),(2000,2,23); 示例表包含表示用…

CMU FAR Planner 在已知和未知环境中进行高效的导航任务算法详解

FAR Planner: Fast, Attemptable Route Planner using Dynamic Visibility Update 本文将介绍一种基于可视图的路径规划框架FAR Planner,它能够在已知和未知环境中进行高效的导航任务。 摘要 论文提出了一种能够处理已知和未知环境中导航任务的基于可视图的规划框架。该规划…

easyocr.Reader().readtext()说明

easyocr.Reader().readtext() 是 EasyOCR 库中的一个方法&#xff0c;用于从图像中提取文本。 该方法的作用是从给定的图像中读取文本&#xff0c;并返回一个包含检测到的文本及其对应位置的列表。 以下是该方法的参数和返回值&#xff1a; readtext(image, decodergreedy, …

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

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

R语言 | 安装ggpubr R包时编译语句中出现 WARNING: ignoring environment value of R_HOME 而报错

在安装 ggpubr 时&#xff0c;出现报错。 1. 环境介绍 系统&#xff1a;CentOS7.9 $ R --version R version 4.3.2 (2023-10-31) – “Eye Holes” $ gcc --version gcc (GCC) 12.3.0 2. 缺少cmake $ sudo yum install cmake3> system("/usr/bin/cmake3 --versio…

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

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