操作系统第三章:银行家算法

银行家算法

银行家算法是最有代表性的避免死锁的算法。
由于该算法能用于银行系统现金贷款的发放而得名的。


1. 银行家算法中的数据结构 (必须要懂)

设系统中有m类资源,n个进程
(1)可利用资源向量Available。含有m个元素的一维数组,每个元素代表一类可利用的资源数目。
      如: Available[j]=k,表示系统中现有Rj类资源k个

(2)最大需求矩阵Max, 是一个n*m的矩阵,定义了系统中n个进程中的每一个进程对m类资源的最大需求。
      如: Max[i,j]=k,则表示进程i,需要Rj类资源的最大数目为k

(3)分配矩阵Allocation。为n*m的矩阵,它定义了系统中每类资源当前已分配给每个进程的资源数。
      如:Allocation[i,j]=K,表示进程i当前已分得Rj类资源的数目为K。

(4)需求矩阵Need。为n*m的矩阵,表示每个进程尚需的各类资源数。
      如:Need[i,j]=K, 表示进程i还需要Rj类资源K个,方能完成其任务。

 

三个矩阵间的关系:Need[i,j] = Max[i,j] - Allocation[i,j]


2. 银行家算法的处理步骤

设Requesti[j]=k,表示进程Pi需要k个Rj类型的资源
(1)如果Requesti[j]<= Need[i,j],便转向步骤2;否则认为出错,因为它所请求的资源数已超过它所需要的最大值。
(2)如果Requesti[j]<= Available[j],便转向步骤3;否则,表示尚无足够资源,Pi需等待。
(3)系统试探着把资源分配给进程Pi ,并修改下面数据结构中数值 :
                                    Available[j]:= Available[j]- Requesti[j];
                                    Allocation[i,j]:=Allocation[i,j]+Requesti[j];
                                    Need[i,j]:=Need[i,j]-Requesti[j];

(4)系统执行安全性算法,检查此次资源分配后系统是否处于安全状态以决定是否完成本次分配。
         若安全,则正式分配资源给进程Pi;否则,不分配资源,让进程Pi等待。


3. 安全性算法

(1)设置两个向量:

  • 工作向量work:表示系统可提供给进程继续运行所需的各类资源数目,含有m个元素的一维数组,初始时,work:=Available;

  • Finish: 含n个元素的一维数组,表示系统是否有足够的资源分配给n个进程,使之运行完成。

    开始时先令Finish[i]:=false (i=1…n);

    当有足够资源分配给进程i时,再令Finish[i]:=true。

 

(2)从进程集合中找到一个能满足下述条件的进程:Finish[i]=false;Need[i,j]<=work[j];
        若找到,执行步骤(3),否则执行步骤(4)

 

(3)当进程Pi获得资源后,可顺利执行,直至完成,并释放出分配给它的资源,故应执行:
                                    work[j]:= work[j]+ Allocation[i,j] ;
                                    Finish[i]:=true;
                                    goto step (2);

 

(4)如果所有进程的Finish[i]=true都满足,则表示系统处于安全状态;否则,系统处于不安全状态。


4.举例

假定系统中有五个进程{P0,P1,P2,P3,P4} 和 三类资源{A,B,C}
各种资源的数量分别为10、5、7。
系统中T0时刻的资源分配情况:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5u3k7zRm-1630658483772)(C:\Users\Song2\AppData\Roaming\Typora\typora-user-images\image-20210903103306622.png)]
(1)考察系统在T0时刻的安全性?
(2)P1请求资源Request(1,0,2)?
(3)P4请求资源Request4(3,3,0)?
(4)P0请求资源Request(0,2,0)?

(1) 判断T0时刻的安全性(根据3.6.3.2 安全性算法)

在这里插入图片描述

1、初始时:work=Available=【3,3,2】,finish=false。
2、进程集合中找到一个能够满足下列条件的进程:Finish[i]=false,need[i,j]<=work
(1)则P1,P3满足,设让P1先执行,从【3,3,2】中拿出【1,2,2】分配给P1,那么P1就可以执行了,执行完以后,释放资源,则work=【2,0,0】+【3,3,2】=【5,3,2】,且finish[1]=true.

(2)从P0、P2、P3、P4 中找满足 finish=false,并need<=work=【5,3,2】,所以P3,P4满足,设让p3执行,则从【5,3,2】中拿出【0,1,1】给P3就可以,那么P3就可以顺利执行完,执行完以后.Finish[3]=true,且work=【5,3,2】+【2,1,1】=【7,4,3】。
重复以上过程

因为所有进程的finish=true,说明系统是处于安全状态的.
存在一个安全执行推进的进程序列{P1-P3-P4-PO-P2}所以系统在T0时候是安全的。

(2) T0时刻时,P1请求资源发出请求向量Requset1(1,0,2),系统能否分配给它?

利用3.6.3.3 银行家算法的处理步骤:
① Requset1 (1,0,2) <=Need1 (1,2,2)
② Requset1 (1,0,2) <=Available(3,3,2)
③ 试探分配,修改相关值
Avaliable= (3,3,2)-(1,0,2)=(2,3,0)
Allocation1=(2,0,0)+(1,0,2)=(3,0,2)
Need1=(1,2,2)-(1,0,2)=(0,2,0)
则资源变化为如下表。

在这里插入图片描述

④ 再利用3.6.3.2 安全性算法检查此时系统是否安全。

在这里插入图片描述

在这里插入图片描述
存在安全队列{P1,P3,P4,P0,P2},所以该时刻安全,可以立即将P1所申请的资源分配给它。

(3) 此时,P4请求资源发出请求向量Requset4(3,3,0),系统能否分配给它?

利用银行家算法:
① Requset4 (3,3,0) <=Need4 (4,3,1)
② Requset4(3,3,0)>Available(2,3,0)
此时P4等待。

(4) 此时,P0请求资源发出请求向量Requset0(0,2,0),系统能否分配给它?

利用银行家算法:
① Requset0(0,2,0)<=Need0 (7,4,3)
② Requset0(0,2,0)<=Available(2,3,0)
③ 试探分配,修改相关值
Avaliable= (2,3,0)-(0,2,0)=(2,1,0)
Allocation0=(0,1,0)+(0,2,0)=(0,3,0)
Need0=(7,4,3)-(0,2,0)=(7,2,3)
④ 再利用安全性算法检查此时系统是否安全。很容易看出,可用资源Available(2,1,0)已无法满足任一进程的需求,试探作废,不分给P0资源,P0等待。



5.银行家算法总结

  • (1) 首先判断当前时刻的安全性;(安全性算法)

  • (2) 若安全,当某进程提出资源申请Requesti时,尝试进行预分配(两个比较,并修改相关值);

  • (3) 判断预分配后的安全性;(安全性算法)

  • (4) 若仍安全,则实施预分配;否则,该进程等待。

  • 43
    点赞
  • 260
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
5 银行家算法实现 5.1 实验类型 设计型(4学时)。 5.2 实验目的 1) 理解死锁避免相关内容; 2) 掌握银行家算法主要流程; 3) 掌握安全性检查流程。 5.3 实验描述 本实验主要对操作系统中的死锁预防部分的理论进行实验。要求实验者设计一个程序,该程序可对每一次资源申请采用银行家算法进行分配。 5.4 实验内容 1) 设计多个资源(≥3); 2) 设计多个进程(≥3); 3) 设计银行家算法相关的数据结构; 4) 动态进行资源申请、分配、安全性检测并给出分配结果。 5.5 实验要求 1) 编写程序完成实验内容; 2) 画出安全性检测函数流程图; 3) 撰写实验报告。 5.6 测试要求 1) 进行Request请求,输入参数为进程号、资源号和资源数; 2) 进行3次以上的Request请求; 3) 至少进行1次资源数目少于可用资源数,但不安全的请求。 5.7 相关知识 5.7.1 银行家算法的数据结构 1) 可利用资源向量Available。其中每个元素代表每类资源的数目。 2) 最大需求矩阵Max。其中每个元素代表每个进程对于每类资源的最大需求量。Max[i,j]=K表示i进程对于j类资源的最大需求量为K。 3) 分配矩阵Allocation。其中每个元素代表每个进程已得到的每类资源的数目。 4) 需求矩阵Need。其中每个元素代表每个进程还需要的每类资源的数目。 5.7.2 银行家算法 Request i [j]=K表示进程Pi需要K个j类资源。 1) 如果Request i [j]≤Need[i , j],便转向步骤2,否则认为出错。 2) 如果Request i [j]≤Available[j],便转向步骤3,否则表示无足够资源,Pi需等待; 3) 系统尝试分配资源给Pi; 4) 系统进行安全性检查,检查此次资源分配后,系统是否安全。如果安全,则正式分配资源,否则撤销此次分配。 5.7.3 安全性算法 1) 设置两个向量:工作向量Work和Finish。算法开始时Work=Available;Finish表示系统是否有足够的资源分配给进程,使之运行完成,开始时,令Finish[i]=False;如果有足够的资源分配给进程,则令Finish[i]=True。 2) 从进程集合中找到一个能满足下列条件的进程:Finish[i]=False;Need[i,j] ≤ Work[j],若找到,执行步骤3),否则,执行步骤4); 3) Pi获得所需资源后,可顺利执行指导完成,并释放它占有的资源。并执行: Work[j]=Work[j]+Allocation[i , j]; Finish[i] = True; 到第2)步。 4) 直到所有Finish[i]=True,表示系统处于安全状态;否则系统处于不安全状态。 5.8 实验设备 PC机1台,要求安装DOS7.1、Turbo C3.0、Windows2000。 5.9 实验成绩评定 实验成绩评定方式包含实验报告成绩、实验过程成绩两个部分,其中实验过程成绩占60%、实验报告成绩占40%,如果其中任何一个部分成绩不及格,则总成绩按不及格处理。 5.10 实验报告 按照实验目的、实验内容、实验要求、实验设备、测试等部分进行组织。 5.11 实验思考 1) 针对死锁有哪些可行方案? 2) 死锁解除的难点是什么?
银行家算法=-- - 1. 安全状态: 在某时刻系统中所有进程可以排列一个安全序列:{P1,P2,`````Pn},刚称此时,系统是安全的. 所谓安全序列{P1,P2,`````Pn}是指对于P2,都有它所需要剩余资源数量不大于系统掌握的剩余的空间资源与所有Pi(j<i)所占的资源之和. 2.不安全状态可能产生死锁. 目前状态 最大需求 尚需 P1 3 9 6 P2 5 10 5 P3 2 4 2 在每一次进程中申请的资源,判定一下,若实际分配的话,之后系统是否安全. 3.银行家算法的思路: 1),进程一开始向系统提出最大需求量. 2),进程每次提出新的需求(分期贷款)都统计是否超出它事先提出的最大需求量. 3),若正常,则判断该进程所需剩余剩余量(包括本次申请)是否超出系统所掌握的 剩余资源量,若不超出,则分配,否则等待. 4.银行家算法的数据结构. 1),系统剩余资源量A[n],其中A[n]表示第I类资源剩余量. 2),各进程最大需求量,B[m][n],其中B[j][i]表示进程j对i 类资源最大需求. 3),已分配资源量C[m][n],其中C[j][i]表示系统j程已得到的第i资源的数量. 4),剩余需求量.D[m][n],其中D[j][i]对第i资源尚需的数目. 5.银行家算法流程:当某时刻,某进程时,提出新的资源申请,系统作以下操作: 1),判定E[n]是否大于D[j][n],若大于,表示出错. 2),判定E[n]是否大于系统剩余量A[n],若大于,则该进程等待. 3),若以上两步没有问题,尝试分配,即各变量作调整. 4),按照安全性推测算法,判断,分配过后,系统是否安全,若安全,则实际分配,否则,撤消分配,让进程等待. 6."安全性检测"算法 1),先定义两个变量,用来表示推算过程的数据. F[n]=A[n],表示推算过程中,系统中剩余资源量的变化. J[n]=False表示推算过程中各进程是否假设"已完成" 2),流程: 在"剩余"的进程中(在推算)过程中,一些进程假设已完成,查找D[j][n]<=F[n]的进程,找到后令J[j]=True (假设该进程完成),F[n]+D[j][n](该进程所占资源释放),如此循环执行. 若最后,所有的F[n]=True(在推算过程中,所有进程均可以完成),则表示(分配过后)系统是安全的,否则系统是不安全的.

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你说的白是什么白_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值