银行家死锁避免算法模拟
银行家算法-- 多资源

1、银行家算法--死锁的避免(系统安全状态、银行家算法)例题:假设某系统中有4类资源(R1、R2、R3、R4),每一种资源的可用量为(10,5,7),在某个时刻系统中共有5个进程,进程P1,P2,P3,P4,P5的最大资源需求数向量和此时已经分配到的资源数向量分别如表所示:系统中当前可用资源向量为(3,3,2),问:(1)、当前系统是否安全根据当前资源分配情况,可通过Safe()检测安全性,得到安全序列:{ P2,P4,P5,P3,P1 }(2)、进程P1发出请求向量Request1(2,0,4),系统能否将资源分配给它?步骤:Request1(2,0,4)> Need1(7,4,3),所请求的资源量超过了资源的缺口数量。
系统是不能许可的——出错返回。
(3)、如果进程P3发出请求向量Request3(4,0,0),系统能否将资源分配给它?步骤:①Request3(4,0,0)<= Need3(6,0,0),所请求的资源量是许可的。
②Request3(4,0,0)> Available(3,3,2),当前可用资源不能满足它的需求,推迟此次分配并阻塞该进程。
(4)、如果此刻进程P2发出请求向量Request2(1,0,2),系统能否将资源分配给它?步骤:①Request2(1,0,2)<= Need2(1,2,2),所请求的资源量是许可的。
②Request2(1,0,2)<= Available(3,3,2),当前可用资源能满足它的需求。
③将资源试探性地分配给进程P2,使得:Allocation 2 = (3,0,2)Need2 = (0,2,0)Available = (2,3,0)系统的资源分配与占有情况如下表:资源分牌(试探性分配情况)④调用安全算法Safe()对该状态进行安全检测,系统仍然是安全的。
系统支持本次试探性分配。
(5)、如果又有进程P5发出请求向量Request5(2,2,0),系统能否将资源分配给它?步骤:①Request5(2,2,0)<= Need5(4,3,1),所请求的资源量是许可的。
银行家算法典型例题

银行家算法典型例题银行家算法是一种死锁避免策略,适用于系统中有多个进程和多种资源的情况。
在该算法中,每个进程需要预先声明其最大资源需求和当前已经分配的资源数量,同时系统也需要知道每种资源的总数量和已经分配的数量。
通过比较每个进程的资源需求和系统当前可用资源数量,可以判断系统是否处于安全状态,以及是否能够分配资源给某个进程。
在本例中,系统中有3种资源A、B、C,分别有10、5、7个。
同时有5个进程P0至P4,它们的最大资源需求和已分配资源情况如下表所示。
在T0时刻,系统状态如表所示。
根据银行家算法,我们可以回答以下问题:1) 在T0时刻,系统处于安全状态,安全序列为P1、P3、P4、P2、P0.2) 若进程P1在T0时刻发出资源请求Request(1,0,2),则可以实施资源分配。
因为该请求的资源需求小于进程P1的最大需求,且系统当前可用资源数量足够满足该请求。
3) 在P1请求资源之后,若进程P4发出资源请求Request(3,3,0),则无法实施资源分配。
因为该请求的资源需求大于进程P4的最大需求,且系统当前可用资源数量不足以满足该请求。
因此,P4需要等待其他进程释放资源后再尝试请求。
4) 在P1请求资源之后,若进程P0发出资源请求Request(0,2,0),则可以实施资源分配。
因为该请求的资源需求小于进程P0的最大需求,且系统当前可用资源数量足够满足该请求。
Process n Need AvailableP0 0 3 20 0 1 21 6 2 2P1 1 0 01 7 5 0P2 1 2 2 3 5 6P3 3 3 20 6 5 2P4 0 1 40 6 5 6n: (1) Is the system in a safe state。
(2) If process P2 requests (1,2,2,2)。
can the system allocate the resources to it?Answer: (1) Using the safety algorithm。
银行家算法iebo.pptx

12
Allocation
CNhaepetedr 3 处理机调度与死锁
P0
010
743
P1
200
122
P2
302
600
P3
211
011
P4
002
431
Work P1 3 3 2 P3 5 3 2 P0 7 4 3
Need 122 011 743
Allocation Work+Allocation Finish
100 012 300 010 210
Available r1 r2 r3
120
26
练习
试问: 1) 该状态是否安全? 2) 如果进程P2提出请求Request(0,1,0),系统
能否将资源分配给它? 3) 如果系统立即满足P2的上述请求,则系统是否
立即进入死锁状态?
27
Need 122 011 743 600
Allocation Work+Allocation Finish
2 0 0 5 3 2 true
2 1 1 7 4 3 true
010 302
7 5 3 true 10 5 5 true
14
Allocation
CNhaepetedr 3 处理机调度与死锁
P0
19
银行家算法实例
④ 执行安全性算法: a. Work :=Available=(2, 3, 0); Finish[ i ]:=false;
b. 在进程集合中找到 Need1=(0, 2, 0) ≤Work;
c. 则设 P1可顺利执行完成,从而有: Work :=Work+Allocation1 =(2, 3, 0)+(3, 0, 2)=(5, 3, 2) Finish[ 1 ]:=true
excel 银行家算法

银行家算法(Banker's Algorithm)是一种用于避免死锁的资源分配算法,最初由Edsger Dijkstra 提出。
这个算法主要用于多道程序设计和并发系统,确保在分配资源时不会导致系统陷入不可解的等待环路。
在 Excel 中并没有直接提供银行家算法的实现,因为 Excel 不是一个操作系统。
然而,可以通过 Excel 的一些函数和公式来模拟这个算法的基本原理。
以下是一个简单的例子,演示如何使用 Excel 实现银行家算法的一部分。
假设有三种资源(A、B、C)和三个进程(P1、P2、P3)。
每个进程需要的资源如下:进程需要资源A 需要资源B 需要资源CP1 7 5 3P2 3 2 2P3 9 0 2现在,我们有一定数量的可用资源:可用资源资源A 资源B 资源C3 3 2我们可以使用 Excel 的一些函数来检查是否可以安全地分配资源,以避免死锁。
以下是一种可能的实现方法:1.使用 SUM 函数计算每个进程已分配的资源总和:这个公式计算了进程P1已分配的资源总和,B2:D2分别代表资源A、B、C 已分配的数量。
2.使用 SUM 函数计算每个资源的已分配总和:这个公式计算了资源A已分配的总和,B2:B4分别代表进程P1、P2、P3已分配的数量。
3.使用减法计算每个资源的可用数量:这个公式计算了资源A的可用数量,E2是资源A总数,F2是资源A已分配的总和。
4.使用 IF 函数检查是否满足银行家算法的条件:这个公式检查资源A是否足够分配给进程P4。
如果结果是"Safe",则说明可以安全分配;如果是"Unsafe",则说明分配这个资源会导致死锁。
这只是一个简单的演示,实际上,银行家算法涉及到更复杂的资源分配和回收机制。
在实际应用中,可能需要更多的列和更多的公式来模拟整个资源分配的过程。
利用银行家算法避免死锁

12
利用银行家算法避免死锁
(3)安全性算法 安全性算法执行步骤如下: ⅰ. 初始化设置工作向量Work[m]表示 系统可提供的各类资源数目,用以保 护原数据结构有关值。Work = Available,设置完成标志向量 Finish[n]。Finish[i] = false 表示i进程 尚末完成,如值为true则表示进程i已 完成。 ⅱ.从进程集合n中找到一个能满足下述 二个条件: Finish[i] = false和 Necdi≤Work,如找到则执行步骤ⅲ, 如找不到同时满足以上二条件的进程 则执行步骤ⅳ。
3
死锁的预防(Deadlock Prevention)
预防死锁的方法是破坏四个产生死锁的必要条件之一。 破坏互斥条件
互斥使用是资源本身特征所决定的。使用硬软件结合 可改变资源本身特性,例如采用SPOOLing技术可将“ 独享” 打印机改变为“共享”的打印机。
破坏不可抢占条件
如果一个进程的申请没有实现,它要释放所有占 有的资源 破坏请求和保持条件
7 5
3 0 2 7 2 1 1
0 0 2
6 0 0
0 1 1 4 3 1
⑤ 7 5
② 5 3 2 ③ 7 4 3 7 7
The system is in a safe state since the sequence 16
(2) P1 Request (1,0,2)
检查Request1(1,0,2)≤Need1(1,2,2), (that is
13
利用银行家算法避免死锁-4
当进程Pi获得资源后可顺利执行直到完 成,并释放出分配给它的资源,表示如下:
ⅲ.
work = work+Allocationi ; Finish[i]=true ;转 执行步骤 ⅱ 。
操作系统实验报告实验二银行家算法

江南大学理学院实验报告课程名称:计算机操作系统实验名称:银行家算法实验日期:2013.11.29 班级:信计1103 姓名:陈鹭学号:1301110301实验报告要求:1.实验目的 2.实验内容与要求 3.流程图与模块调用 4.实验分析5.运行情况6.实验体会1.实验目的死锁会引起计算机工作僵死,因此操作系统中必须防止。
本实验的目的在于让学生独立的使用高级语言编写和调试一个系统动态分配资源的简单模拟程序,了解死锁产生的条件和原因,并采用银行家算法有效地防止死锁的发生,以加深对课堂上所讲授的知识的理解。
2.实验内容与要求内容:银行家算法流程安全算法流程要求:设计有n个进程共享m个系统资源的系统,进程可动态的申请和释放资源,系统按各进程的申请动态的分配资源。
系统能显示各个进程申请和释放资源,以及系统动态分配资源的过程,便于用户观察和分析;3.流程图与模块调用数据结构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。
Allocation 表示进程i的分配向量,有矩阵Allocation的第i行构成。
i4.需求矩阵Need,这是一个n×m的矩阵,用以表示每个进程还需要的各类资源的数目。
如果Need (i,j)=k,表示进程i还需要Rj类资源k个,才能完成其任务。
c语言银行家算法

c语言银行家算法在C语言中实现银行家算法,首先需要了解该算法的基本概念和原理。
银行家算法是一种避免死锁的资源分配算法,它模拟了银行贷款的过程。
当一个进程请求资源时,系统先检查分配后是否安全,如果是,则分配资源。
否则,进程必须等待,直到足够的资源可用。
以下是一个简单的银行家算法的C语言实现:```c#include <stdio.h>#define MaxProcs 5#define MaxResources 3int Allocation[MaxProcs][MaxResources] = {0};int Max[MaxProcs][MaxResources] = {0};int Allocation[MaxProcs][MaxResources] = {0};int Available[MaxResources] = {0};int Need[MaxProcs][MaxResources] = {0};int Work[MaxResources] = {0};int safeSeq[MaxProcs] = {0};int count = 0;void calcNeed() {for (int p = 0; p < MaxProcs; p++) {for (int r = 0; r < MaxResources; r++) {Need[p][r] = Max[p][r] - Allocation[p][r];}}}void checkSafe() {int finish[MaxProcs] = {0};int k, j;for (k = 0; k < MaxProcs; k++) {safeSeq[k] = -1;}while (count < MaxProcs) {for (k = 0; k < MaxProcs; k++) {if (finish[k] == 0) {for (j = 0; j < MaxResources; j++) {if (Need[k][j] > Work[j]) {break;}}if (j == MaxResources) {for (j = 0; j < MaxResources; j++) {Work[j] += Allocation[k][j];safeSeq[count++] = k;finish[k] = 1;}}}}}if (count == MaxProcs) {printf("系统是安全的\n");} else {printf("系统是不安全的\n");}}```。
银行家算法的模拟实现

{cout << p[i];
if (i != l - 1)
{ cout << "-->";
}
} cout << "" << endl;
return true;
}
实验模拟结果:
总
结
银行结算法有效避免了系统在资源分配中的死锁问题。通过至此实验更是加深了对这一方面的理解与认识,对系统进程分配资源的过程和实现该过程的算法结构认识更加深刻。
{ if (FINISH[i] == true)
{ continue;
}for (j = 0; j < n; j++)//循环查找第i个进程需要的各个资源数是否超过系统现有的对应的资源数
}
if (NEED[i][j] > Work[j])//第i个进程需要的第j个资源数>系统现有的第j个资源数
{ break ;
goto input;
}
} for (i = 0; i < n; i++)//如果请求合理,那么下面
{ AVAILABLE[i] -= REQUEST[cusneed][i];//系统可用资源减去申请了的
ALLOCATION[cusneed][i] += REQUEST[cusneed][i];//线程被分配的资源加上已申请了的
Work[i] = AVAILABLE[i];
for (i = 0; i < m; i++)
{ FINISH[i] = false;//FINISH记录每个进程是否安全
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
银行家死锁避免算法模拟一.课程设计目的通过本次实验掌握银行家死锁避免算法的基本思想。
当进程提出资源申请时,能够用该算法判断是否拒绝进程请求。
二.课程设计摘要银行家算法:我们可以把操作系统看作是银行家,操作系统管理的资源相当于银行家管理的资金,进程向操作系统请求分配资源相当于用户向银行家贷款。
操作系统按照银行家制定的规则为进程分配资源,当进程首次申请资源时,要测试该进程对资源的最大需求量,如果系统现存的资源可以满足它的最大需求量则按当前的申请量分配资源,否则就推迟分配。
当进程在执行中继续申请资源时,先测试该进程已占用的资源数与本次申请的资源数之和是否超过了该进程对资源的最大需求量。
若超过则拒绝分配资源,若没有超过则再测试系统现存的资源能否满足该进程尚需的最大资源量,若能满足则按当前的申请量分配资源,否则也要推迟分配。
四.课程设计原理分析在多道程序系统中,虽可借助于多个进程的并发执行,来改善系统的资源利用率,提高系统的吞吐量,但可能发生一种危险——死锁。
所谓死锁,是指多个进程在运行过程中因争夺资源而造成的一种僵局,当进程处于这种僵局状态时,若无外力作用,它们都将无法再向前推进。
为保证系统中诸进程的正常运行,应事先采取必要的措施,来预防死锁。
最有代表性的避免死锁的方法,是Dijkstra的银行家算法。
死锁:死锁的产生,必须同时满足四个条件,第一个为互斥条件,即一个资源每次只能由一个进程占用;第二个为请求和保持条件,指进程已经保持了至少一个资源,但又提出了新的资源请求,而该资源又被其他进程占有,此时请求进程阻塞,但又对自己已获得的其他资源保持不放;第三个为非剥夺条件,即在出现死锁的系统中一定有不可剥夺使用的资源;第四个为循环等待条件,系统中存在若干个循环等待的进程,即其中每一个进程分别等待它前一个进程所持有的资源。
防止死锁的机构只能确保上述四个条件之一不出现,则系统就不会发生死锁。
银行家算法原理:银行家算法是避免死锁的一种重要方法,通过编写一个简单的银行家算法程序,加深了解有关资源申请、避免死锁等概念,并体会和了解死锁和避免死锁的具体实施方法。
通过这个算法可以用来解决生活中的实际问题,如银行贷款等。
银行家算法,顾名思义是来源于银行的借贷业务,一定数量的本金要应多个客户的借贷周转,为了防止银行家资金无法周转而倒闭,对每一笔贷款,必须考察其是否能限期归还。
在操作系统中研究资源分配策略时也有类似问题,系统中有限的资源要供多个进程使用,必须保证得到的资源的进程能在有限的时间内归还资源,以供其他进程使用资源。
如果资源分配不得到就会发生进程循环等待资源,则进程都无法继续执行下去的死锁现象。
把一个进程需要和已占有资源的情况记录在进程控制中,假定进程控制块PCB其中“状态”有就绪态、等待态和完成态。
当进程在处于等待态时,表示系统不能满足该进程当前的资源申请。
“资源需求总量”表示进程在整个执行过程中总共要申请的资源量。
显然,,每个进程的资源需求总量不能超过系统拥有的资源总数, 银行算法进行资源分配可以避免死锁.算法思想:将一定数量的资金供多个用户周转使用,当用户对资金的最大申请量不超过现存资金时可接纳一个新客户,客户可以分期借款,但借款总数不能超过最大的申请量。
银行家对客户的借款可以推迟支付,但是能够使客户在有限的时间内得到借款,客户得到所有的借款后能在有限的时间内归还。
用银行家算法分配资源时,测试进程对资源的最大需求量,若现存资源能满足最大需求就满足当前进程的申请,否则推迟分配,这样能够保证至少有一个进程可以得到所需的全部资源而执行到结束,然后归还资源,若OS能保证所有进程在有限的时间内得到所需资源则称系统处于安全状态。
五.算法实现1.程序流程图:2.算法描述:银行家算法的设计思想是:当用户申请一组资源时,系统必须做出判断;如果把这些资源分出去,系统是否还处于安全装他。
若是,就可以分出这些资源;否则,该申请暂不能满足。
3.数据结构描述:(n表示系统中进程的数目,m表示资源的分类数。
)3.1. Available是一个长度为m的向量,它表示每类资源可用的数量。
Available [j]=k,表示rj类资源可用的数量为k。
3.2.Max是一个n×m矩阵,它表示每个进程对资源的最大需求。
Max [i,j]=k,表示进程pi至多可以申请k个rj类资源单位。
3.3. Allocation是一个n×m矩阵,它表示当前分给每个进程的资源数目。
Allocation [i,j]=k,表示进程pi当前分到k个rj类资源。
3.4. Need是一个n×m矩阵,它表示每个进程还缺少多少资源。
Need[i,j]=k,表示进程pi尚需k个rj类资源才能完成其任务。
显然Need[i,j]= Max [i,j]- Allocation [i,j]。
这些数据结构的大小和数值随时间推移而改变。
4.系统所执行的安全性算法描述如下:4.1.设置2个向量:工作向量Work:它表示系统可提供给进程继续运行所需的各类资源数目,它含有m个元素,在执行安全算法开始时,Work = Available。
Finish[i] :它表示系统是否有足够的资源分配给进程,使之完成运行。
开始时先做Finish[i]=true。
4.2.从进程集合中找到一个满足下述条件的进程:Finish[i]=flase;Need[i,j]≤Work[j];若找到,则执行步骤3,否则,执行步骤4。
4.3.当进程pi获得资源后,可顺利执行,直至完成,并释放分配给它的资源。
4.4.如果所有进程的Finish[i]=true都满足。
则表示系统处于安全状态;否则,系统处于不安全状态。
六.程序源代码#include<iostream>#include<string>#include<stdio.h>using namespace std;#define False 0#define True 1int Max[100][100]={0};//各进程所需各类资源的最大需求int Avaliable[100]={0};//系统可用资源char name[100]={0};//资源的名称int Allocation[100][100]={0};//系统已分配资源int Need[100][100]={0};//还需要资源int Request[100]={0};//请求资源向量int temp[100]={0};//存放安全序列int Work[100]={0};//存放系统可提供资源int M=100;//作业的最大数为100int N=100;//资源的最大数为100void showdata()//显示资源矩阵{int i,j;cout<<"系统目前可用的资源[Avaliable]:"<<endl;for(i=0;i<N;i++)cout<<name[i]<<" ";cout<<endl;for (j=0;j<N;j++)cout<<Avaliable[j]<<" ";//输出分配资源cout<<endl;cout<<" Max Allocation Need"<<endl; cout<<"进程名 ";for(j=0;j<3;j++){for(i=0;i<N;i++)cout<<name[i]<<" ";cout<<" ";}cout<<endl;for(i=0;i<M;i++){cout<<" "<<i<<" ";for(j=0;j<N;j++)cout<<Max[i][j]<<" ";cout<<" ";for(j=0;j<N;j++)cout<<Allocation[i][j]<<" ";cout<<" ";for(j=0;j<N;j++)cout<<Need[i][j]<<" ";cout<<endl;}}int changdata(int i)//进行资源分配{int j;for (j=0;j<M;j++) {Avaliable[j]=Avaliable[j]-Request[j];Allocation[i][j]=Allocation[i][j]+Request[j];Need[i][j]=Need[i][j]-Request[j];}return 1;}int safe()//安全性算法{int i,k=0,m,apply,Finish[100]={0};int j;int flag=0;Work[0]=Avaliable[0];Work[1]=Avaliable[1];Work[2]=Avaliable[2];for(i=0;i<M;i++){apply=0;for(j=0;j<N;j++){if (Finish[i]==False&&Need[i][j]<=Work[j]){ apply++;if(apply==N){for(m=0;m<N;m++)Work[m]=Work[m]+Allocation[i][m];//变分配数 Finish[i]=True;temp[k]=i;i=-1;k++;flag++;}}}}for(i=0;i<M;i++){if(Finish[i]==False){cout<<"系统不安全"<<endl;//不成功系统不安全return -1;}}cout<<"系统是安全的!"<<endl;//如果安全,输出成功 cout<<"分配的序列:";for(i=0;i<M;i++){//输出运行进程数组cout<<temp[i];if(i<M-1) cout<<"->";}cout<<endl;return 0;}void share()//利用银行家算法对申请资源对进行判定{char ch;int i=0,j=0;ch='y';cout<<"请输入要求分配的资源进程号(0-"<<M-1<<"):"; cin>>i;//输入须申请的资源号cout<<"请输入进程 "<<i<<" 申请的资源:"<<endl;for(j=0;j<N;j++){cout<<name[j]<<":";cin>>Request[j];//输入需要申请的资源}for (j=0;j<N;j++){if(Request[j]>Need[i][j])//判断申请是否大于需求,若大于则出错{cout<<"进程 "<<i<<"申请的资源大于它需要的资源";cout<<" 分配不合理,不予分配!"<<endl;ch='n';break;}else {if(Request[j]>Avaliable[j])//判断申请是否大于当前资源,若大于则 { //出错cout<<"进程"<<i<<"申请的资源大于系统现在可利用的资源";cout<<" 分配出错,不予分配!"<<endl;ch='n';break;}}}if(ch=='y') {changdata(i);//根据进程需求量变换资源showdata();//根据进程需求量显示变换后的资源safe();//根据进程需求量进行银行家算法判断}}void addresources(){//添加资源int n,flag;cout<<"请输入需要添加资源种类的数量:";cin>>n;flag=N;N=N+n;for(int i=0;i<n;i++){cout<<"名称:";cin>>name[flag];cout<<"数量:";cin>>Avaliable[flag++];}showdata();safe();}void changeresources(){//修改资源函数cout<<"系统目前可用的资源[Avaliable]:"<<endl;for(int i=0;i<N;i++)cout<<name[i]<<":"<<Avaliable[i]<<endl;cout<<"输入系统可用资源[Avaliable]:"<<endl;cin>>Avaliable[0]>>Avaliable[1]>>Avaliable[2]; cout<<"经修改后的系统可用资源为"<<endl;for (int k=0;k<N;k++)cout<<name[k]<<":"<<Avaliable[k]<<endl; showdata();safe();}void delresources(){//删除资源char ming;int i,flag=1;cout<<"请输入需要删除的资源名称:";do{cin>>ming;for(i=0;i<N;i++)if(ming==name[i]){flag=0;break;}if(i==N)cout<<"该资源名称不存在,请重新输入:";}while(flag);for(int j=i;j<N-1;j++){name[j]=name[j+1];Avaliable[j]=Avaliable[j+1];}N=N-1;showdata();safe();}void addprocess(){//添加作业int flag=M;M=M+1;cout<<"请输入该作业的最大需求量[Max]"<<endl;for(int i=0;i<N;i++){cout<<name[i]<<":";cin>>Max[flag][i];Need[flag][i]=Max[flag][i]-Allocation[flag][i]; }showdata();safe();}int main()//主函数{int i,j,number,choice,m,n,flag;char ming;cout<<"*****************资源管理系统的设计与实现*****************"<<endl; cout<<"请首先输入系统可供资源种类的数量:";cin>>n;N=n;for(i=0;i<n;i++){cout<<"资源"<<i+1<<"的名称:";cin>>ming;name[i]=ming;cout<<"资源的数量:";cin>>number;Avaliable[i]=number;}cout<<endl;cout<<"请输入作业的数量:";cin>>m;M=m;cout<<"请输入各进程的最大需求量("<<m<<"*"<<n<<"矩阵)[Max]:"<<endl;for(i=0;i<m;i++)for(j=0;j<n;j++)cin>>Max[i][j];do{flag=0;cout<<"请输入各进程已经申请的资源量("<<m<<"*"<<n<<"矩阵)[Allocation]:"<<endl;for(i=0;i<m;i++)for(j=0;j<n;j++){cin>>Allocation[i][j];if(Allocation[i][j]>Max[i][j])flag=1;Need[i][j]=Max[i][j]-Allocation[i][j];}if(flag)cout<<"申请的资源大于最大需求量,请重新输入!\n";}while(flag);showdata();//显示各种资源safe();//用银行家算法判定系统是否安全while(choice){cout<<"**************银行家算法演示***************"<<endl;cout<<" 1:增加资源 "<<endl;cout<<" 2:删除资源 "<<endl;cout<<" 3:修改资源 "<<endl;cout<<" 4:分配资源 "<<endl;cout<<" 5:增加作业 "<<endl;cout<<" 0:离开 "<<endl;cout<<"*******************************************"<<endl;cout<<"请选择功能号:";cin>>choice;switch(choice){case 1: addresources();break;case 2: delresources();break;case 3: changeresources();break;case 4: share();break;case 5: addprocess();break;case 0: choice=0;break;default: cout<<"请正确选择功能号(0-5)!"<<endl;break;}}return 1;}调试及运行结果:检测结果如下:1.假设系统只有一种资源a,剩余数量为2,分配情况如下:2.假设系统只有一种资源a,剩余数量为2,分配情况如下:进程需求总量已占资源还需数量0 8 3 51 42 22 9 4 5注:“系统不安全”表示此种情况是银行家算法也解不了的死锁。