银行家算法实例

原创 2015年07月09日 19:18:25

最近开始备考计算机四级,基本没有遇到什么问题,感觉计算机四级就是考理解型记忆力,银行家算法的题算是在计算机四级里少有的计算题。

例1.设系统中有三种类型的资源(A,B,C)和五个进程(P1,P2,P3,P4,P5),A资源的数量是17,B资源的数量是6,C资源的数量为19。在T0时刻系统的状态如下表:

 

最大资源需求量

已分配资源量

 

A,B,C

A,B,C

P1

4,0,11

4,0,5

P2

5,3,6

4,0,2

P3

4,2,5

2,1,4

P4

5,5,9

2,1,2

P5

4,2,4

3,1,3

系统采用银行家算法实施死锁避免策略,若当前系统剩余资源(A,B,C)分别为(2,3,3),下列哪一个序列是安全序列?

A.P3,P1,P4,P2,P5

B.P1,P3,P5,P2,P4

C.P4,P2,P3,P5,P1

D.P2,P3,P1,P4,P5

几乎所有关于银行家算法的单选题的数据都差不多,在解这道题之前先来解释一下什么是安全序列。安全序列是指一个进程序列{P1,…,Pn}是安全的,即对于每一个进程Pi(1≤i≤n),它以后尚需要的资源量不超过系统当前剩余资源量与所有进程Pj (j < i )当前占有资源量之和。这句话说得比较抽象,在解析过程中我们进行理解。

解析:我们首先算出各个进程尚需要的资源量,尚需要的资源量=最大资源需求量-已分配资源量,由此可得各进程尚需要的资源量为

  P1 P2 P3 P4 P5
A,B,C 0,0,6 1,3,4 2,1,1 3,4,7 1,1,1
接下来,我们分析选项A,P3需要的资源量为(2,1,1),而系统剩余资源为(2,3,3),因此进程P3进程得以完成,并且释放它占有的资源量,即已分配资源量,此时系统剩余资源量为(2+2,3+1,3+4)=(4,4,7),(4,4,7)大于(或等于)其它所有进程(即P1,P1,P2,P4,P5)尚需要的资源量(注意,这里的“大于”指的是A,B,C三类分别大于),因此选项A的序列是安全序列

选项B:P1需要的资源为(0,0,6),显然系统剩余资源不满足条件,B为不安全序列。

选项C:P4需要的资源为(3,4,7),显然系统剩余资源不满足条件,C为不安全序列。

选项D:P2需要的资源为(1,3,4),显然系统剩余资源部满足条件,D为不安全序列。

几乎所有银行家算法的单选题都可以用上述方法一眼秒杀,当然这只是计算机四级的前奏,在单选题中,我们可以通过排除法轻松地选出答案,但是计算机四级是有多选题的,多选题的银行家算法可能就得花上一分多钟去判断出正确选项,一定要仔细再仔细,脑袋转不过来极有可能出错。以下是一道关于银行家算法的多选题,自己感受一下吧,也是so easy的。

例2.某操作系统的当前资源分配如下表所示。

进程

最大资源需求

已分配资源数量

 

R1 R2 R3

R1 R2 R3

P1

7 5 3

0 1 0

P2

3 2 2

2 0 0

P3

9 0 2

3 0 2

P4

2 2 2

2 1 1

P5

4 3 3

0 0 2

假设当前系统可用资源R1、R2和R3的数量为(3,3,2),且该系统目前处于安全状态,那么下列哪些是安全序列?

A.P2P4P5P1P3

B.P2P4P5P3P1

C.P4P1P2P3P5

D.P3P2P5P4P1

E.P4P2P3P5P1

解析:方法参见例1.

答案:ABE

关于银行家算法的拓展说明:(以下内容为《全国计算机等级考试四级教程——操作系统原理》原文)

银行家算法是通过动态地检测系统中资源分配情况和进程对资源的需求情况来决定如何分配资源的,在能确保系统处于安全状态时才把资源分配给申请者,从而避免系统发生死锁。由于银行家算法是在系统运行期间实施的,要花费相当多的时间,该算法需要m×n²操作。银行家算法要求每类资源的数量是固定不变的,而且必须事先知道资源的最大需求量,这难以做到。不安全状态并非一定是死锁状态,如果一个进程申请的资源当前是可用的,但该进程必须等待,这样资源利用率会下降。

参考资料:

【1】全国计算机等级考试四级教程——操作系统原理

【2】全国计算机等级考试四级网络工程师未来教育题库

                                                                                       

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

银行家算法

银行家算法是资源和死锁避免的算法,由艾兹格·迪杰斯特拉(Edsger Dijkstra) 设计的算法用于测已确定总数量的资源分配的安全性,在决定是否该分配应该被允许并进行下去之前,通过“s-state...

C++应用程序性能优化——程序的启动过程

1. 重定位: 目标文件一般由多个节组成,编译器在编译每个目标文件时一般都是从0地址开始生成代码。当多个代码节合成一个代码段时,需要根据其在最终代码段中的位置做出调整。同时,连接器需要对已经解析的符号...

银行家算法vc++模拟实现

操作系统在对资源进行分配的时候会出现一种资源的争抢,为了避免在资源争抢的时候出现死锁现象引入了银行家算法。

java线程等待/通知机制及中断

一、等待/通知机制  在线程交互中经常需要对其进行一些控制,希望人为地能够让线程按理想路线发展,在满足某条件时进行执行操作而发生变化时,停止等待。 1、 使用sleep  在 if ( ) { } e...

Acyivity和Intent

Intent基本作用

找工作知识储备(2)---数组字符串那些经典算法:最大子序列和,最长递增子序列,最长公共子串,最长公共子序列,字符串编辑距离,最长不重复子串,最长回文子串

0、前言         这一部分的内容原本是打算在之后的字符串或者数组专题里面写的,但看着目前火热进行的各家互联网公司笔试面试中,出现了其中的一两个内容,就随即将这些经典问题整理整理,单写一篇发...

银行家算法简述解析

背景简介: 在银行中,客户申请贷款的数量是有限的,每个客户在第一次申请贷款时要声明完成该项目所需的最大资金量,在满足所有贷款要求时,客户应及时归还。银行家在客户申请的贷款数量不超过自己拥有的最大值时...
  • only06
  • only06
  • 2016-11-28 17:38
  • 10556

为什么新生代内存需要有两个Survivor区

堆内存分为新生代和老年代,其中新生代分为Eden和两块Survivor,本文探讨了为什么要设置两块Survivor区

秒杀多线程第六篇 经典线程同步 事件Event

阅读本篇之前推荐阅读以下姊妹篇:《秒杀多线程第四篇 一个经典的多线程同步问题》《秒杀多线程第五篇 经典线程同步关键段CS》 上一篇中使用关键段来解决经典的多线程同步互斥问题,由于关键段的“线程所有权”...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)