《2023年银行家算法实验报告.docx》由会员分享,可在线阅读,更多相关《2023年银行家算法实验报告.docx(5页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、2023年银行家算法实验报告 计算机操作系统实验报告 何美西109253030212 一、实验名称:银行家算法 二、实验目的:银行家算法是避免死锁的一种重要方法,通过编写一个简单的银行家算法程序,加深了解有关资源申请、避免死锁等概念,并体会和了解死锁和避免死锁的具体实施方法。 三、问题分析与设计: 1、算法思路:先对用户提出的请求进行合法性检查,即检查请求是否大于需要的,是否大于可利用的。若请求合法,则进行预分配,对分配后的状态调用安全性算法进行检查。若安全,则分配;若不安全,则拒绝申请,恢复到原来的状态,拒绝申请。 2、银行家算法步骤:(1)如果Requestior =Need,则转向步骤(
2、2);否则,认为出错,因为它所需要的资源数已超过它所宣布的最大值。 (2)如果Requestor=Available,则转向步骤(3);否则,表示系统中尚无足够的资源,进程必须等待。 (3)系统试探把要求的资源分配给进程Pi,并修改下面数据结构中的数值: Available=Available-Requesti; Allocation=Allocation+Request; Need=Need-Request; (4)系统执行安全性算法,检查此次资源分配后,系统是否处于安全状态。 3、安全性算法步骤: (1)设置两个向量 工作向量Work。它表示系统可提供进程继续运行所需要的各类资源数目,执行
3、安全算法开始时,Work=Allocation; 布尔向量Finish。它表示系统是否有足够的资源分配给进程,使之运行完成,开始时先做Finishi=false,当有足够资源分配给进程时,令Finishi=true。 (2)从进程集合中找到一个能满足下述条件的进程: Finishi=false Need (3)当进程P获得资源后,可顺利执行,直至完成,并释放出分配给它的资源,故应执行: Work=Work+Allocation; Finishi=true; 转向步骤(2)。 (4)如果所有进程的Finishi=true,则表示系统处于安全状态;否则,系统处于不安全状态。 4、流程图: 系统主要
4、过程流程图 银行家算法流程图 安全性算法流程图 四、实验代码: #include #include #include #define False 0 #define True 1 int Max100100=0;/各进程所需各类资源的最大需求 int Avaliable100=0;/系统可用资源 char name100=0;/资源的名称 int Allocation100100=0;/系统已分配资源 int Need100100=0;/还需要资源 int Request100=0;/请求资源向量 int temp100=0;/存放安全序列 int Work100=0;/存放系统可提供资源 i
5、nt p100=0; int q100100=0; int z100100=0; int M=100;/作业的最大数为100 int N=100;/资源的最大数为100 int gg=1; void showdata()/显示资源矩阵 int i,j; cout int changdata(int i)/进行资源分配 int j; for (j=0;j for(i=0;i cout /变分配数 Finishi=True; tempk=i; cout for(i=0;i Allocationij=Allocationij-Requestj; Needij=Needij+Requestj; cou
6、t return 0; cout cout; couti;/输入须申请的资源号 coutRequestj;/输入需要申请的资源 for (j=0;jNeedij)/判断申请是否大于需求,若大于则出错 coutAvaliablej)/判断申请是否大于当前资源,若大于则 /出错 cout int main()/主函数 int t=1,i,j,number,choice,m,n,flag; char ming; coutn; N=n; for(i=0;iming; namei=ming; coutnumber; Avaliablei=number; coutm; M=m; coutMaxij; do
7、 flag=0; coutAllocationij; if(AllocationijMaxij) flag=1; Needij=Maxij-Allocationij; if(flag) cout showdata();/显示各种资源 safe();/用银行家算法判定系统是否安全 while(1) if(t=1) cout t=0; else break; cout return 1; 五、程序执行结果: cint; cout 六、实验总结 多个进程同时运行时,系统根据各类系统资源的最大需求和各类系统的剩余资源为进程安排安全序列,使得系统能快速且安全地运行进程,不至发生死锁。银行家算法是避免死锁的主要方法,其思路在很多方面都非常值得我们来学习借鉴。 09信管(2)班 何美西 109253030212 银行家算法实验报告 银行家算法实验报告 银行家算法实验报告 银行家算法_实验报告 死锁_银行家算法实验报告 银行家算法的模拟【实验报告】 操作系统银行家算法实验报告 操作系统银行家算法(避免死锁)实验报告 东南大学操作系统实验报告银行家算法 操作系统实验报告利用银行家算法避免死锁(推荐)
限制150内