银行家算法例题——四步走解题

合集下载

银行家算法习题1

银行家算法习题1

银行家算法流程安全性算法流程图银行家算法例题 1.假定系统中有4个进程1P ,2P ,3P ,4P , 3种类型的资源1R ,2R ,3R ,数量分别为9,3,6, 0T 时刻的资源分配情况如表2-1所示。

表2-1 T 0时刻的资源分配情况试问:(1) T 0时刻是否安全?(2) T 0时刻以后,若进程P 2发出资源请求Request 2(1,0,1), 系统能否将资源分配给它? (3) 在进程P 2申请资源后,若P1发出资源请求Request 1(1,0,1), 系统能否将资源分配给它?(4) 在进程P 1申请资源后,若P3发出资源请求Request 3(0,0,1), 系统能否将资源分配给它?2. 在银行家算法中,出现以下资源分配情况(见表2-2)系统剩余资源数量=(3,3,2)(1) 该状态是否安全(给出详细的检查过程) (2) 如果进程依次有如下资源请求:P1:资源请求request (1,0,2) P2:资源请求request (3,3,0) P3:资源请求request (0,1,0)则系统该如何进行资源分配才能避免死锁?3.设系统中有3种类型的资源(A、B、C)和5个进程P1、P2、P3、P4、P5,A资源的数量为17,B资源的数量为5,C资源的数量为20。

在T0时刻,系统状态见表2-3。

系统采用银行家算法实现死锁避免。

(1)T0时刻是否为安全状态?若是,请给出安全序列(2)在T0时刻,若进程P2请求资源(0,3,4),是否能实施资源分配?为什么?(3)在(2)的基础上,若进程P4请求资源(2,0,1),是否能实施资源分配?(4)在(3)的基础上,若进程P1请求资源(0,2,0),是否能实施资源分配?4.某系统有R1、R2、R3共三种资源,在T0时刻P1、P2、P3、P4这四个进程对资源的占用和需求情况见表2-24,此时系统的可用资源矢量为(2,1,2)。

试问:1)将系统中各种资源总数和此刻各进程对各资源的需求数目用矢量或矩阵表示出来。

银行家算法及流程图

银行家算法及流程图
(2)如果REQUEST [cusneed] [i]<= AVAILABLE[cusneed][i],则转(3);否则,出错。
(3)系统试探分配资源,修改相关数据:
AVAILABLE[i]-=REQUEST[cusneed][i];
ALLOCATION[cusneed][i]+=REQUEST[cusneed][i];
Bank();
}
void Init() /*初始化算法*/

int i,j;
cout〈〈”请输入进程的数目:";
cin〉>m;பைடு நூலகம்
cout〈<"请输入资源的种类:”;
cin〉〉n;
cout<<"请输入每个进程最多所需的各资源数,按照"〈<m<〈"x”<<n〈〈”矩阵输入"〈〈endl;
for(i=0;i<m;i++)
}
for(i=0;i<m;i++)

if(FINISH[i]==true)

continue;

else

for(j=0;j〈n;j++)
{
if(NEED[i][j]>Work[j])
{
break;


if(j==n)

FINISH[i]=true;
for(k=0;k〈n;k++)
{
Work[k]+=ALLOCATION[i][k];
NEED[cusneed][i]-=REQUEST[cusneed][i];

银行家算法例题详解算法设计题详解

银行家算法例题详解算法设计题详解

银行家算法例题详解算法设计题详解算法设计的特征:有穷性,确定性,输入和输出,可行性运行算法的时间:硬件的速度。

书写程序的语言。

问题的规模,编译生成程序的代码质量算法复杂度: 时间复杂度和空间复杂度1.迭代法迭代法又称为辗转法,是用计算机解决问题的一种基本方法,为一种不断用变量的旧值递推新值的过程,与直接法相对应,一次性解决问题。

迭代法分为精确迭代和近似迭代,“二分法”和“牛顿迭代法”属于近似迭代法。

迭代法利用计算机运算速度快、适合做重复性操作的特点,让计算机对一组指令(或一定步骤)进行重复执行,在每次执行这组指令(或这些步骤)时,都从变量的原值推出它的一个新值。

利用迭代算法解决问题,需要做好以下三个方面的工作:1. 确定迭代变量(在可以用迭代算法解决的问题中,至少存在一个直接或间接地不断由旧值递推出新值的变量,这个变量就是迭代变量。

)2. 建立迭代关系式(所谓迭代关系式,指如何从变量的前一个值推出其下一个值的公式(或关系)。

迭代关系式的建立是解决迭代问题的关键,通常可以顺推或倒推的方法来完成。

)3. 对迭代过程进行控制(在什么时候结束迭代过程?这是编写迭代程序必须考虑的问题。

不能让迭代过程无休止地重复执行下去。

迭代过程的控制通常可分为两种情况:一种是所需的迭代次数是个确定的值,可以计算出来;另一种是所需的迭代次数无法确定。

对于前一种情况,可以构建一个固定次数的循环来实现对迭代过程的控制;对于后一种情况,需要进一步分析出用来结束迭代过程的条件。

)2.穷举搜索法穷举搜索法是对可能是解的众多候选解按某种顺序进行逐一枚举和检验,并从众找出那些符合要求的候选解作为问题的解。

即本方法使用可以理解为暴力循环方法,穷举所有可能性,一般这种方法的时间效率太低,不易使用。

但是方法简单,易理解。

3.递推法递推是计算机数值计算中的一个重要算法,思路是通过数学推导,将复杂的运算化解为若干重复的简单运算,以充分发挥计算机长于重复处理的特点。

银行家算法基本步骤

银行家算法基本步骤

银行家算法基本步骤银行家算法是一种用于避免死锁的算法,它可以判断系统中是否存在安全序列,从而决定是否分配资源。

本文将详细介绍银行家算法的基本步骤。

一、银行家算法概述银行家算法是由荷兰计算机科学家埃德加·迪科斯彻(Edsger Dijkstra)于1965年提出的。

它是一种避免死锁的算法,主要用于操作系统中进程管理和资源分配。

银行家算法通过计算当前系统中可用资源和各进程所需资源,来判断是否存在安全序列,从而决定是否分配资源。

二、银行家算法基本概念1. 资源:指系统中可供进程使用的资源,如内存、CPU等。

2. 进程:指正在运行的程序,在操作系统中被视为一个独立的实体。

3. 最大需求矩阵:指每个进程所需要的最大资源数量矩阵。

4. 分配矩阵:指当前已经分配给每个进程的资源数量矩阵。

5. 需求矩阵:指每个进程还需要的资源数量矩阵。

6. 可利用资源向量:指当前系统中可供使用的各类资源数量。

7. 安全序列:指一组进程的执行顺序,使得每个进程都能够获得它所需要的资源,从而顺利完成任务。

三、银行家算法基本步骤1. 初始化:在系统启动时,需要对各类资源数量进行初始化,并建立最大需求矩阵、分配矩阵和需求矩阵。

2. 请求资源:当一个进程请求资源时,需要判断该请求是否合法。

如果该请求的资源数量小于等于当前系统中可用的相应资源数量,并且加上该进程已经分配到的资源数量不超过该进程所需的最大资源数量,则该请求是合法的。

3. 分配资源:如果一个请求是合法的,则可以将相应的资源分配给该进程,并更新分配矩阵和需求矩阵。

同时,也需要更新可利用资源向量。

4. 判断安全性:在每次分配资源后,都需要判断当前系统是否存在安全序列。

具体做法是通过模拟各个进程对各类资源的请求和释放过程,来判断是否存在一组安全序列。

如果存在安全序列,则说明当前系统是安全的;否则就不能再分配资源了。

5. 回收资源:当一个进程完成任务后,需要释放已经占用的所有资源,并更新可利用资源向量、分配矩阵和需求矩阵。

银行家算法

银行家算法

银行家算法设计思路:为了使进程并发执行,就需要用到避免死锁的方法,在这种方法中,允许进程动态地申请资源,但系统在进行资源分配之前,应先计算此次资源分配的安全性,若此次分配不会导致系统进入不安全状态,则将资源分配给进程;否则,令进程等待。

所谓安全状态,是指系统能按某种进程顺序(P1,P2,…,Pn)(称<P1,P2,…,Pn>序列为安全序列),来为每个进程Pi分配其所需资源,直至满足每个进程对资源的最大需求,使每个进程都可以顺利的完成。

如果系统取法找到一个这样的安全序列,则成系统处于不安全状态。

虽然并非所有的不安全状态都必然会转为死锁状态,但当系统进入不安全状态后,便有可能进而进入死锁状态;反之,只要系统处于安全状态,系统便可避免进入死锁状态。

因此,避免死锁的实质在于:系统在进行资源分配时,如何使系统不进入不安全状态。

在避免死锁的方法中,银行家算法是最具有代表性的算法。

算法设计:银行家算法中的数据结构:1.可利用资源Avaliable[ ]。

这是一个含有M个元素的数组,其中的每一个元素代表一类可利用的资源数目,其初始值是系统中所配置的该类全部可用资源的数目,其数值随该类资源的分配和回收而动态地改变。

如果Avaliable[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个。

实验四银行家算法

实验四银行家算法

操作系统实验实验四银行家算法学号 1115102002姓名蔡凤武班级 11电子A华侨大学电子工程系实验目的1、理解银行家算法。

2、掌握进程安全性检查的方法与资源分配的方法。

实验内容与基本要求编制模拟银行家算法的程序,并以下面给出的例子验证所编写的程序的正确性。

现在系统中A、B、C、D 4类资源分别还剩1、5、2、0个,请按银行家算法回答:1、现在系统是否处于安全状态?2、如果现在进程P1提出需要(0、4、2、0)个资源的请求,系统能否满足它的请求?1、银行家算法和安全性检查算法原理。

操作系统的银行家算法:当进程首次申请资源时,要测试该进程对资源的最大需求量,如果系统现存的资源可以满足它的最大需求量则按当前的申请量分配资源,否则就推迟分配。

当进程在执行中继续申请资源时,先测试该进程本次申请的资源数是否超过了该资源所剩余的总量。

若超过则拒绝分配资源,若能满足则按当前的申请量分配资源,否则也要推迟分配。

1、程序流程描述。

银行家算法:(1) 步骤:1如果Request [j]<=Need[i],转向步骤(2),否则认为出错,因为他所需要的资源数已经超过它所宣布的最大值。

(2) 步骤2;如果:Request [i]<=Available[i],转向步骤(3),否则提示尚无足够资源,进程i需等待。

(3) 步骤3:系统试探分配相关资源,并修改下面数据:Available[i]= Available[i]- Request [j];Allocation[i]= Allocat ion[i]+ Request [i];Need[i]= Need[i]- Request [i];(4) 步骤4:执行安全性检查,如安全,则分配成立;否则本次试探分配作废,恢复原来的资源分配状态,让该进程等待。

安全性检查算法:安全性检查算法主要是根据银行家算法进行资源分配后,检查资源分配后的系统状态之中。

具体算法如下:(1) 步骤1:设置两个向量: Work= Available,Finish[i]=false;说明:Finish(它表示系统是否有足够的资源分配给进程)Work(它表示系统可提供给进程继续运行所需的各类资源数目)(2) 步骤2:在进程中查找符合以下条件的进程:Finish[i]=false,need<=Work 若能找到,则执行步骤(3),否则,执行步骤(4)(3) 步骤3:当进程获得资源后,可顺利执行,直至完成,从而释放资源:Work= Work+ Allocation; Finish=true; goto step (2);(4) 步骤4:如果所有进程的Finish=true都满足,则表示系统处于安全状态,否则,系统不安全状态。

实验四 银行家算法

实验四 银行家算法

银行家算法的模拟实现一.实验目的1.了解进程产生死锁原因,了解为什么要防止死锁。

2.掌握银行家算法的数据结构,了解算法的执行过程,加深对银行家算法的理解。

二.实验内容:采用银行家算法来实现一个n 个并发进程共享m 个系统资源的系统。

进程可以申请和释放资源,系统可以按照各进程的申请计算是否可以分配给其资源。

三.实验原理1.银行家算法的思路先对用户提出的请求进行合法性检查,即检查请求的是不大于需要的,是否不大于可利用的。

假设请求合法,那么进行试分配。

最后对试分配后的状态调用平安性检查算法进行平安性检查。

假设平安,那么分配,否那么,不分配,恢复原来状态,拒绝申请。

2.银行家算法中用到的主要数据结构可利用资源向量int Available[j] j为资源的种类。

最大需求矩阵 int Max[i][j] i为进程的数量。

分配矩阵 int Allocation[i][j]需求矩阵 int need[i][j]= Max[i][j]- Allocation[i][j]申请各类资源数量int Request i[j] i进程申请j资源的数量工作向量int Work[x]int Finish[y]3.银行家算法bank()进程i发出请求申请k个j资源,Request i[j]=k(1)检查申请量是否不大于需求量:Request i[j]<=need[i,j],假设条件不符重新输入,不允许申请大于需求量。

(2)检查申请量是否小于系统中的可利用资源数量:Request i[j]<=available[i,j],假设条件不符就申请失败,阻塞该进程,用goto语句跳转到重新申请资源。

(3)假设以上两个条件都满足,那么系统试探着将资源分配给申请的进程,并修改下面数据结构中的数值:Available[i,j]= Available[i,j]- Request i[j];Allocation[i][j]= Allocation[i][j]+ Request i[j];need[i][j]= need[i][j]- Request i[j];(4)试分配后,执行平安性检查,调用safe()函数检查此次资源分配后系统是否处于平安状态。

操作系统大作业 银行家算法

操作系统大作业 银行家算法

编程验证银行家算法一、实验目的银行家算法是避免死锁的一种重要方法,本设计要求编程实现银行家算法程序。

了解银行家算法运行的规律币,加深对银行家算法的了解。

二、实验原理银行家算法的思路:1)、进程一开始向系统提出最大需求量.2)、进程每次提出新的需求(分期贷款)都统计是否超出它事先提出的最大需求量.3)、若正常,则判断该进程所需剩余剩余量(包括本次申请)是否超出系统所掌握的剩余资源量,若不超出,则分配,否则等待.银行家算法的数据结构.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资源尚需的数目.银行家算法流程:当某时刻,某进程时,提出新的资源申请,系统作以下操作:1)、判定E[n]是否大于D[j][n],若大于,表示出错.2)、判定E[n]是否大于系统剩余量A[n],若大于,则该进程等待.3)、若以上两步没有问题,尝试分配,即各变量作调整.4)、按照安全性推测算法,判断,分配过后,系统是否安全,若安全,则实际分配,否则,撤消分配,让进程等待."安全性检测"算法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(在推算过程中,所有进程均可以完成),则表示(分配过后)系统是安全的,否则系统是不安全的.三、实验内容在codeblock编译器下编写代码首先现编写一个库文件‘s.h’,定义一个结构体:typedef struct {int A;int B;int C;}RESOURCE;结构体里面的三个域分别表示三种资源的数量。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

银行家算法例题
系统中原有三类资源A、B、C和五个进程P1、P2、P3、P4、P5,A资源17,B资源5,C资源20。

当前(T0时刻)系统资源分配和进程最大需求如下表。

1、现在系统T0时刻是否处于安全状态?
2、是否可以允许以下请求?
(1)T1时刻:P2 Request2=(0,3,4)
(2)T2时刻:P4 Request4=(2,0,1)
(3)T3时刻:P1 Request1=(0,2,0)
注:T0 T1 T2 T3时刻是前后顺序,后一时刻是建立在前一时刻的基础上。

解:由题设可知Need=Max-Allocation
AvailableA=17-(2+4+4+2+3)=2(原有-分配)
同理AvailableB=3,AvailableC=3
可得T0时刻资源分配表如下所示(表中数据顺序均为A B C):
1、判断T0时刻是否安全,需要执行安全算法找安全序列,过程如下表:
T0时刻能找到一个安全序列{P4,P3,P2,P5,P1},故T0时刻系统处于安全状态。

2、判断T1 T2 T3时刻是否满足进程请求进行资源分配。

(1)T1时刻,P2 Request2=(0,3,4)
//第一步判断条件
①满足Request2=(0,3,4)<=Need2(1,3,4)
②不满足Request2=(0,3,4)<=Available(2,3,3)
故系统不能将资源分配给它,此时P2必须等待。

(2)T2时刻,P4 Request4=(2,0,1)
//第一步判断条件①满足Request4=(2,0,1)<=Need4(2,2,1)
②满足Request4=(2,0,1)<=Available(2,3,3)
//第二步修改Need、Available、Allocation的值
Available=Available-Request4= (0,3,2)
Allocation4=Allocation4+Request4=(4,0,5)
Need4=Need4-Request4=(0,2,0)
//第三步执行安全算法,找安全序列
(注解:先写上work,其初值是系统当前进行试分配后的Available(0,3,2) ,找五个进程中Need小于work的进程,比如Need4<=Work满足,则将P4写在第一行的最前面,同时写出P4的Need和Allocation,以此类推)
//第四步在此时刻(T2时刻)存在安全序列{P4,P2,P3,P5,P1},则满足Request4请求,将Request4=(2,0,1)分配给P4。

(3)T3时刻,P1 Request1=(0,2,0)
//第一步判断条件①满足Request1=(0,2,0)<=Need1(3,4,7)
②满足Request1=(0,2,0)<=Available(2,3,3)
//第二步修改Need、Available、Allocation的值
Available=Available-Request1= (0,1,2) (T2时刻基础上)
Allocation=Allocation1+Request1=(2,3,0)
Need1=Need1-Request1=(3,2,7)
//第三步执行安全算法,找安全序列
对于所有Need i均不小于Work(初值是Available (0,1,2)),找不到安全序列,故系统不能将资源分配给它,P1必须等待。

归纳总结——银行家算法解题总结为四步走:
第一步:判断银行家算法中的条件,看是否满足,如果满足跳转第二步(判断条件)
①Request i<=Need i
②Request i<=Available
第二步:试图分配,修改Need、Available、Allocation的值(修改NAA)Available=Available-Request i
Allocation i=Allocation i+Request i
Need i=Need i-Request i
第三步:执行安全算法,找安全序列(找安全序列)
第四步:找到了安全序列,说明此时系统满足进程P i的请求Request i。

(真分配)系统不会进入不安全状态,可以将Request i分配给进程P
i
修改NAA找安全序列
判断条件真分配。

相关文档
最新文档