银行家算法——软考探究(四)

2024-05-16 11:18
文章标签 算法 软考 探究 银行家

本文主要是介绍银行家算法——软考探究(四),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

    著名的银行家算法,最早是由Dijkstra提出来的。它是一种最有代表性的避免死锁的算法。在避免死锁方法中允许进程动态地申请资源,但系资源分配之前,应先计算此次分配资源的安全性,若分配不会导致系统进入不安全状态,则分配,否则等待。

    银行家算法最重要的就是判断是可用资源和仍需资源之间的关系,如果可用资源数大于人需资源数,那么我们认为这个进程就是可以执行的,也是安全的,反之,便是不安全的。所以重中之重的是找到各种资源数。

对进程的判断遵循以下步骤:

1.计算系统开始时所有的资源数,即开始的可用资源数;

2.在仍需资源数和可用资源数中作比较,找到符合条件的进程,最后修改进程执行完毕时系统的可用资源数;

3.继续比较剩余进程和可用资源数,找到下边可以执行的进程;

4.依次类推;


    下面那一个例子来解释这些晦涩的文字,一定要认真去看哦O(∩_∩)O~

【例】假设系统中有3类互斥资源R1、R2、R3,可用资源分别是9、8、5,。在T0时刻系统中有P1、P2、P3、P4和P5五个进程,这些进程对资源的最大需求量和已分配资源数如下表所示,则进程如何执行是安全的。

资源


进程  

最大需求量

已分配资源数

R1

R2

R3

R1

R2

R3

P1

6

5

2

1

2

1

P2

2

2

1

2

1

1

P3

8

0

1

2

1

0

P4

1

2

1

1

2

0

P5

3

4

4

1

1

3


这里需要强调的是,无论题目中给出何种条件,我们只要找到以下信息便可从容应对各种变化:

资源

进程

最大需求量

已分配资源数

仍需资源

可用资源

R1

R2

R3

R1

R2

R3

R1

R2

R3

R1

R2

R3

P1

6

5

2

1

2

1

5

3

1

7

7

5

P2

2

2

1

2

1

1

0

1

0

4

2

1

①    

P3

8

0

1

2

1

0

6

-1

1

9

8

5

P4

1

2

1

1

2

0

0

0

1

5

4

1

②    

P5

3

4

4

1

1

3

2

3

1

6

5

4

③    


【注】:

可用资源:表示相应的进程执行完毕(即释放该进程占用的资源)以后可用的资源,满足公式可用资源=可用资源+已分配资源,(因为已分配的资源将会在进程执行完毕以后释放,所以可用资源会不断增多,进程执行完毕便会全部释放)同时它也是下一个进程执行时可用的资源。

**需要说明的是根据进程执行情况的不同,每次填入表格中的可用资源也不会相同(因为每个进程分配的资源是有差异的),那么执行顺序也会有所差异,合理即可。

仍需资源:仍需资源数=最大需求量-已分配资源数,据此公式可以求得R1、R2、R3在不同的进程时仍需的资源数,如上表中所示。

    按照之前所讲的步骤,实现如下: 

R1已分配的总资源数为1+2+2+1+1=7

R2已分配的总资源数为2+1+1+2+1=7

R3已分配的总资源数为1+1+0+0+3=5

则R1 R2 R3可用资源数分别为9-7=2,

                          8-7=1,

                          5-5=0,

1.开始有的资源数R1 R2R3分别为2、1、0,所以从仍需资源中查找(需要说明的是查找的时候以最少资源数作为限定条件能够较快地找出结果),只有P2进程符合条件,此时可用资源变为4、2、1;

2.接下来在在其余的进程中查找符合条件的进程,只能执行P4,此时可用资源变为5、4、1,以此类推,按照以上的步骤即可找到所有进程执行的顺序P2->P4->P5->P1->P3

    以上便是有关银行家算法的计算过程,总体看来,银行家算法更多的是对概念的考察,弄清楚各个条件之间的制约关系便可迎刃而解了,希望能对大家有所帮助!




这篇关于银行家算法——软考探究(四)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/994754

相关文章

SpringBoot实现MD5加盐算法的示例代码

《SpringBoot实现MD5加盐算法的示例代码》加盐算法是一种用于增强密码安全性的技术,本文主要介绍了SpringBoot实现MD5加盐算法的示例代码,文中通过示例代码介绍的非常详细,对大家的学习... 目录一、什么是加盐算法二、如何实现加盐算法2.1 加盐算法代码实现2.2 注册页面中进行密码加盐2.

Java时间轮调度算法的代码实现

《Java时间轮调度算法的代码实现》时间轮是一种高效的定时调度算法,主要用于管理延时任务或周期性任务,它通过一个环形数组(时间轮)和指针来实现,将大量定时任务分摊到固定的时间槽中,极大地降低了时间复杂... 目录1、简述2、时间轮的原理3. 时间轮的实现步骤3.1 定义时间槽3.2 定义时间轮3.3 使用时

如何通过Golang的container/list实现LRU缓存算法

《如何通过Golang的container/list实现LRU缓存算法》文章介绍了Go语言中container/list包实现的双向链表,并探讨了如何使用链表实现LRU缓存,LRU缓存通过维护一个双向... 目录力扣:146. LRU 缓存主要结构 List 和 Element常用方法1. 初始化链表2.

golang字符串匹配算法解读

《golang字符串匹配算法解读》文章介绍了字符串匹配算法的原理,特别是Knuth-Morris-Pratt(KMP)算法,该算法通过构建模式串的前缀表来减少匹配时的不必要的字符比较,从而提高效率,在... 目录简介KMP实现代码总结简介字符串匹配算法主要用于在一个较长的文本串中查找一个较短的字符串(称为

通俗易懂的Java常见限流算法具体实现

《通俗易懂的Java常见限流算法具体实现》:本文主要介绍Java常见限流算法具体实现的相关资料,包括漏桶算法、令牌桶算法、Nginx限流和Redis+Lua限流的实现原理和具体步骤,并比较了它们的... 目录一、漏桶算法1.漏桶算法的思想和原理2.具体实现二、令牌桶算法1.令牌桶算法流程:2.具体实现2.1

Python中的随机森林算法与实战

《Python中的随机森林算法与实战》本文详细介绍了随机森林算法,包括其原理、实现步骤、分类和回归案例,并讨论了其优点和缺点,通过面向对象编程实现了一个简单的随机森林模型,并应用于鸢尾花分类和波士顿房... 目录1、随机森林算法概述2、随机森林的原理3、实现步骤4、分类案例:使用随机森林预测鸢尾花品种4.1

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

康拓展开(hash算法中会用到)

康拓展开是一个全排列到一个自然数的双射(也就是某个全排列与某个自然数一一对应) 公式: X=a[n]*(n-1)!+a[n-1]*(n-2)!+...+a[i]*(i-1)!+...+a[1]*0! 其中,a[i]为整数,并且0<=a[i]<i,1<=i<=n。(a[i]在不同应用中的含义不同); 典型应用: 计算当前排列在所有由小到大全排列中的顺序,也就是说求当前排列是第

csu 1446 Problem J Modified LCS (扩展欧几里得算法的简单应用)

这是一道扩展欧几里得算法的简单应用题,这题是在湖南多校训练赛中队友ac的一道题,在比赛之后请教了队友,然后自己把它a掉 这也是自己独自做扩展欧几里得算法的题目 题意:把题意转变下就变成了:求d1*x - d2*y = f2 - f1的解,很明显用exgcd来解 下面介绍一下exgcd的一些知识点:求ax + by = c的解 一、首先求ax + by = gcd(a,b)的解 这个

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖