操作系统 - 《银行家算法》

news2024/10/7 14:30:14

(一)安全序列

你是一位成功的商人,手里掌握着 100 个w的资金
有三个企业想找你贷款,分别是 企业 B 、企业 A 、企业 T ,为描述方便,简称 BAT
B 表示:“咱们的项目很有前景,大哥,我最多会跟你借 70w
A 表示:“大哥,你真是义薄云天的好大哥,我最多会跟你借 40w
T 表示:“大哥,我,我我最多会跟你借 50w
        然而…在哥谭的 江湖中有个不成文的规矩:如果你借给企业的钱总数达不到企业提出的最 大要求,那么不管你之前给企业借了多少钱,那些钱都拿不回来了
  情景1:刚开始, BAT 三个企业分别从你这儿借了 20 10 30 w, 手里还有:40w,此时… A 还想借 20 w,你敢借吗?
    假如答应了A的请求…… 之后按T  ==> B==> A的顺序借钱是OK的,因为此时借走之后手里还有:20w,可以先把20w全部借给T,等T把钱全部 还回来了,手里就会有20+30=50w,再把这些钱全借给B,B还钱后总共有 50+20=70w,最后再借给A。(完全实现资金的自由流动,But投资有风险,需谨慎)
最大需求
已借走
最多还会
B702050
4010+20=3040-30=10
T503020

情景2:刚开始,BAT三个企业分别从你这儿借了 201030 w,手里还有:40w,此时… B 还想借 30 w,你敢借吗?

   给B借30亿是不安全的…之后手里只剩10w,如果BAT都提出再借20w的请求,那么任何一个企业的需要都得不到满足。
最大需求
已借走
最多还会
B7020+3070-50=20
401030
T503020

安全序列:

        所谓 安全序列 ,就是指如果系统按照这种序列分配资源,则每个进程都能顺利完成。只要能找出一个安全序列,系统就是 安全状态 。当然, 安全序列可能有多个
        如果分配了资源之后,系统中找不出任何一个安全序列,系统就进入了 不安全状态 。这就意味着之后 可能 所有进程都无法顺利的执行下去。当然,如果有进程提前归还了一些资源,那 系统也有可能重新回到安全状态 ,不过我们在分配资源之前总是要考虑到最坏的情况。
        如果系统处于 安全状态 ,就 一定不会 发生 死锁 。如果系统进入 不安全状态 ,就 可能 发生 死锁
(处于不 安全状态未必就是发生了死锁,但发生死锁时一定是在不安全状态)
        因此可以 在资源分配之前预先判断这次分配是否会导致系统进入不安全状态 ,以此决定是否答应资源分配请求。这也是“ 银行家算法 ”的核心思想。

(二)银行家理论入门

概念:

        银行家算法(Banker’s Algorithm)是一个避免死锁(Deadlock)的著名算法,是由艾兹格·迪杰斯特拉在1965年为T.H.E系统设计的一种避免死锁产生的算法。它以银行借贷系统的分配策略为基础,判断并保证系统的安全运行。
  在银行中,客户申请贷款的数量是有限的,每个客户在第一次申请贷款时要声明完成该项目所需的最大资金量,在满足所有贷款要求时,客户应及时归还。银行家在客户申请的贷款数量不超过自己拥有的最大值时,都应尽量满足客户的需要。在操作系统中,银行家就好比操作系统,资金就是资源,客户就相当于要申请资源的进程。
  银行家算法是一种最有代表性的避免死锁的算法。在避免死锁方法中允许进程动态地申请资源,但系统在进行资源分配之前,应先计算此次分配资源的安全性,若分配不会导致系统进入不安全状态,则分配,否则等待。为实现银行家算法,系统必须设置若干数据结构。
  

进一步阐述:

        当进程申请资源时,银行家算法通过模拟分配资源给该进程,然后判断这种模拟分配后的系统是否安全。若不安全,则撤销模拟分配,并让该进程继续等待。

要确定系统是否安全,我们需要参考以下组件:

以下组件:

进程Pi

  MAX:进程Pi的最大需求资源数量。
  Allocation:已经分配给该进程的资源数量。
  Need:进程还需要的资源数量,即`Need = MAX - Allocation`。

Available:当前的空闲资源数量。系统中的总资源量等于资源池的剩余资源量加上已经分配给所有进程的资源。

        当资源P1申请资源时,银行家算法首先模拟分配资源给它。只有当申请的资源数量小于或等于Available时,这种模拟分配才会进行。然后,算法会检查分配给P1后的剩余资源是否能够满足至少一个进程的需求。如果没有一个进程可以完成并释放资源,那么系统将处于不安全状态,因为随着时间的推移,所有的进程都可能被阻塞,导致死锁。

        但是,如果有一个或多个进程可以使用剩余的资源完成,我们可以模拟地回收这些进程的资源并继续检查其他进程。这种模拟过程的目的是找到一个可能的进程执行序列,这些进程可以依次完成并释放它们的资源,使得其他进程也能够完成。

        通过上述模拟分配和回收过程,我们可以生成一个安全的进程序列,例如{P0, P3, P2, P1}。这表示我们首先满足P0的需求,然后从P0回收资源,接着满足P3的需求,依此类推。这样的序列表明我们可以安全地分配资源而不会导致死锁。

 

总结: 

        银行家算法以及如何使用该算法判断系统是否处于安全状态,从而避免死锁。简要地说,当进程请求资源时,银行家算法会尝试为该进程分配资源。但在正式分配之前,算法会先判断,如果现在为该进程分配资源,系统是否仍然处于一个“安全”的状态。

        "安全"的状态意味着即使为某个进程分配了资源,也仍有足够的资源满足其他进程的最大需求,这样就不会因为某个进程霸占资源而导致其他进程无法完成。如果所有进程都能够完成,并且按照某种顺序释放它们的资源,这样其他等待的进程就能继续完成,那么系统就被认为是“安全”的。反之,如果存在任何一个进程不能完成,那么系统就可能进入死锁状态。

        为了确定系统是否处于安全状态,银行家算法使用了一个简单的测试。算法首先检查是否有一个进程其所需的资源小于等于可用资源。如果有,算法就会假定资源被该进程请求,并将该进程标记为完成。然后,假设该进程在完成后释放了它所有的资源。这个过程将继续,直到所有进程都被标记为完成,或者没有进程可以被标记为完成。

        如果所有进程都被标记为完成,那么系统就处于安全状态。否则,系统就可能会死锁。

        总之,银行家算法的关键思想是,通过模拟进程请求和释放资源的情况来预测是否可能发生死锁。如果模拟过程中发现可能会有死锁,那么算法就不会为请求的进程分配资源。

(三)银行家算法经典习题(***)

解答:

(1)计算Need矩阵,对应相减:Max-Allocation

(2)根据题意,计算出对应的Available

(3)找安全序列,一个就行了

(4)其他(可不写)

2.

答:

(1)

肯定是安全的,安全序列:P0 ,3 ,4,1,2

或者  0   ,3    ,1 ,   2,   4

或者0   ,3    ,1 ,   2,   4

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

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

相关文章

中枢听觉处理障碍的行为干预方法

作者:听觉健康 在数十年前,中枢听觉处理障碍(CAPD)的研究已经引起了多学科的关注。1937年,Samuel Orton提出某些儿童的学习障碍与不能有效利用听觉有关。Myklebust是提出“中枢性听力障碍”引起儿童语言学习障碍的先驱者之一。二十世纪五十年…

【lesson13】进程控制初识

文章目录 进程创建 进程创建 请你描述一下,fork创建子进程操作系统都做了什么? fork创建子进程,系统里多了一个进程,进程 内核数据结构 进程代码数据,内核数据结构由OS维护,进程代码数据一般由磁盘维护。…

C++类和对象(1)

C类和对象(1) C新关键字及语法引用引用的底层原理引用使用的注意事项 auto范围for C结构体新特性C类的特性C类与结构体区别构造函数定义调用 析构函数调用 C新关键字及语法 引用 引用是C加入的新类型,引用是变量的别名,在整体上…

华为OD机试 - TLV格式 - 逻辑分析(Java 2023 B卷 100分)

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路五、Java算法源码六、效果展示1、输入2、输出3、说明 华为OD机试 2023B卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试(JAVA)真题(A卷B卷&#…

LeetCode:2316. 统计无向图中无法互相到达点对数(C++)

目录 2316. 统计无向图中无法互相到达点对数 题目描述: 实现代码与解析: 并查集 原理思路: 2316. 统计无向图中无法互相到达点对数 题目描述: 给你一个整数 n ,表示一张 无向图 中有 n 个节点,编号为…

stable diffusion如何解决gradio外链无法开启的问题

问题确认 为了确认gradio开启不了是gradio库的问题还是stable diffusion的问题,可以先执行这样一段demo代码 import gradio as grdef greet(name):return "Hello " name "!"demo gr.Interface(fngreet, inputs"text", outputs&q…

Spring Cloud 之 Sentinel简介与GATEWAY整合实现

简介 随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel 是面向分布式服务架构的流量控制组件,主要以流量为切入点,从限流、流量整形、熔断降级、系统负载保护、热点防护等多个维度来帮助开发者保障微服务的稳定性。 熔断 …

Damask使用指南-Hcp结构(镁(考虑孪晶))孪晶如何加入

1,首先利用geom布种子,种子数为40,模型空间尺寸为64*64*1(表示二维平面问题)代码: 2,根据布种区域生成voronoi镶嵌的晶体结构 代码: 3 检查结构是否正确生成 4,利用dama…

61 不同路径

不同路径 重点:从左上角移动到右下角,m-1次向右,n-1次向下题解1 DP降维——滚动数组 题解2 求解组合 C m n − 2 m − 1 C^{m-1}_{mn-2} Cmn−2m−1​的值 一个机器人位于一个 m x n 网格的 左上角 (起始点在下图中标记为 “St…

自己动手写编译器:c 语言模板中的输入模块设计

使用过“框架”的同学都能感受到“框架”带来的方便。所谓”框架“本质上就是一系列代码安排帮助我们完成脏活累活,或者复杂的工作流程后,把处理结果交给我们提供的代码。本节我们要完成的 c 语言模板也是一个框架,它也需要做一系列脏活累活&…

鲲鹏+麒麟V10 mysql8.0适配

检查是否已安装数据库服务 for i in rpm -qa | grep mysql;do rpm -e --nodeps $i;done yum源地址: http://repo.mysql.com/yum/mysql-8.0-community/el/8/aarch64/ 配置yum源: 将mysql相关的rpm包都下载到指定文件里,留作以后考用 yum reins…

UE4 距离场

在项目设置的渲染模块可打开距离场 把该节点连上,该节点的意思是,距离表面越近,材质显示值为0 不接近表面时: 接近表面时 可勾选该值即可看到距离场具体效果: 未接触表面时: 接触表面时: 产生…

2024年仁爱学院专升本招生专业对应范围专业目录更新的通知

天津仁爱学院2024年高职升本科招生专业对应范围专业目录 为了更好的进行天津仁爱学院专升本工作,动画专业不分文理进行录取。为了进一步提升录取专业的培养需要,请同学们复习专业课时加强专业课学习,请同学们在报考时关注天津仁爱学院招生章…

DLP是如何防止数据泄露的?

根据相关调查数据,未来五年全球企业数据泄露防护(DLP)市场预计将以21.03%的复合年增长率高速增长,到2026年市场规模将达到62.65亿美元。 PC访问地址:获取详细资料 https://isite.baidu.com/site/wjz012xr/2eae091d-1b…

2023年金九银十面经,假的今年没有金九银十

24岁的我选择了裸辞 前言 说实话选择裸辞后很迷茫,但是又不想在原本的公司上班,目前处于昏昏沉沉的状态,工作也是混一天是一天,没有了什么明确的目标,不知道屏幕前的你们有没有这种感觉,目前想着休息一段时间&#xff…

基础框架 Spring

引言 我们常说,Java 程序员不会 Spring,那还叫 Java 程序员吗?由此可见Spring在Java领域的重要性,本章我们就来谈谈 Spring 到底是何方神圣? 一、Spring 核心概念(重要) 1、Spring 是什么&am…

RGB彩色图、Depth深度图

💦彩色图,深度图——》信息缺乏。如,颜色相近导致位置信息丢失 💦深度图——》相近深度的物体,因为颜色或纹理的丢失,导致难区分 深度图并不可以直接使用, 因为深度图只能反映出了物体在三维空…

Oracle数据库完整卸载的完整步骤

时间:2023-03-15来源:系统城装机大师作者:佚名 1、停止所有Oracle服务 进入计算机管理,在服务中,找到oracle开头的所有服务,右击选择停止。 快捷键:ctrlshiftesc打开任务管理器 文章来源 Or…

PACS(Picture Archiving and Communications System)图像存储与传输系统源码

PACS(Picture Archiving and Communications System)——图像存储与传输系统,和医院信息化及数字化的目标紧密关联,它是专门为现代化医院的影像管理而设计的包括数字化医学图像信息的采集、显示、处理、存储、诊断、输出、管理、查…

蓝牙资讯|AirPods Pro 2推送新固件,苹果Find My功能受到好评

苹果公司今天面向采用 Lightning 端口和 USB-C 端口的 AirPods Pro 2 耳机,更新推出了内部编号为 6A305 的全新固件,高于 10 月 10 日发布的 6A303 更新。 苹果官方并没有公布固件的更新日志,目前尚不清楚具体引入了哪些新功能、新特性。苹…