ImageVerifierCode 换一换
格式:DOCX , 页数:13 ,大小:44.56KB ,
资源ID:11316478      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/11316478.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(银行家算法实验报告.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

银行家算法实验报告.docx

1、银行家算法实验报告计算机操作系统实验报告一、 实验名称: 银行家算法二、 实验目的: 银行家算法是避免死锁的一种重要方法,通过编写 一个简单的银行家算法程序,加深了解有关资源申请、避免死 锁等概念,并体会和了解死锁和避免死锁的具体实施方法。三、 问题分析与设计:1、算法思路 :先对用户提出的请求进行合法性检查,即检查 请求是否大于需要的,是否大于可利用的。若请求合法,则进 行预分配,对分配后的状态调用安全性算法进行检查。若安 全,则分配;若不安全,则拒绝申请,恢复到原来的状态,拒 绝申请。2、银行家算法步骤:(1)如果Requestk or二Need则转向步骤(2);否则,认为出错,因为它所需

2、要的资源数已超过它所宣布的最大值。(2)如果Request or二Available,则转向步骤(3);否则,表示系统中尚无足够的资源,进程必须等待。(3) 系统试探把要求的资源分配给进程 Pi,并修改下面数据结构中的数值:Available=Available-Requesti;Allocation=Allocation+Request;Need=Need-Request;(4)系统执行安全性算法,检查此次资源分配后,系统是否处于 安全状态。3、安全性算法步骤:(1)设置两个向量工作向量 Work 。它表示系统可提供进程继续运行所需要的各类资 源数目,执行安全算法开始时, Work=Allo

3、cation;布尔向量Finish。它表示系统是否有足够的资源分配给进程,使 之运行完成,开始时先做 Finishi=false ,当有足够资源分配给进程 时,令 Finishi=true 。(2) 从进程集合中找到一个能满足下述条件的进程:1Finishi=false2Needor=Work如找到,执行步骤( 3);否则,执行步骤( 4)。(3) 当进程 P 获得资源后,可顺利执行,直至完成,并释放出分配给它的资源,故应执行:Work=Work+Allocation;Finishi=true;转向步骤( 2)。( 4)如果所有进程的 Finishi=true, 则表示系统处于安全状态;否 则

4、,系统处于不安全状态。4、流程图:系统主要过程流程图银行家算法流程图安全性算法流程图四、实验代码:#defi ne M 5#defi ne N 3本实验中使用到的库函数#i nclude II#i nclude #in elude 开始定义银行家算法中需要用到的数据int max 51; /int allocation51;int need 51;int available1;int request51;char *fini sh5;int safe5;int n,i,m;int k=0;int j=0;int work1;int works51;printf(n);void start()

5、/ line(); printf(printf(line();void end() / line(); printf(表示银行家算法开始银行家算法开始 n);- 死锁避免方法表示银行家算法结束银行家算法结束,谢谢使用 n);n);line();输入银行家算法起始各项数据void input() /for (n=0;n5;n+)printf(” 请输入进程P%d的相关信息:n,n);printf(Max:);for (m=0;m1;m+)scanf(%d,&maxnm);printf(Allocation:);for (m=0;m1;m+)scanf(%d,&allocationnm);for

6、(m=0;m1;m+)neednm=maxnm-allocationnm;printf( 请输入系统可利用资源数 Available:);for (m=0;m1;m+)scanf(%d,&availablem);void output() / 输出系统现有资源情况line();printf( 资源情况 Max Allocation Need Availablen);printf( 进程 A A A A n);line();for(n=0;n5;n+)printf(P%d%3d%3d%3d,n,maxn0,allocationn0,needn0);if (n=0)printf(%3d%3dn,a

7、vailable0);elseprintf(n);line();void change() / 当 Requesti,j=Availablej 时,系统把资源分配给 进程 Pi , Availablej 和 Needi,j 发生改变for (m=0;m1;m+)availablem-=requestim; allocationim+=requestim; needim-=requestim;void outputsafe() / 输出安全序列的资源分配表printf(该安全序列的资源分配图如下: n);line();printf(资源情况 WorkNeedAllocation Work+All

8、ocationFinishn);printf(进程 A AAA n);line();for(n=0;n5;n+)printf(P%d%9d%3d%3d%5d%12sn,safen,workssafen0,needsaf en0,allocationsafen0,workssafen0+allocationsafen0 ,finishn);line();int check() / 安全性算法printf(” 开始执行安全性算法n ”);for (m=0;m1;m+) / 数组 work 和 finish 初始化workm=availablem;for (n=0;n5;n+)finishn=fal

9、se; safen=0;k=0;for (m=0;m5;m+)for (n=0;n5;n+)if(strcmp(finishn,false)=0 & needn0P%d-P%d-P%d- P%d 系统是安全的 n,safe0,safe1,safe2,safe3,safe4);j=1;outputsafe(); / 输出安全序列的资源分配表return 1;void main() / 主程序开始start();for (;j=0;) / 确认输入数据的正确性,若输入错误,重新输入input();printf( 以下为进程资源情况,请确认其是否正确: n);output();printf( 数据是

10、否无误: n 正确:输入 1n 错误:输入 0n 请输 入:);scanf(%d,&j);printf( 数据确认无误,算法继续。 n);if (check()=0) / 若 check 函数返回值为 0,表示输入的初始数据找不到安全序列,无法进行下一步,程序结束end();exit(0);for(;j=1;) / 当有多个进程请求资源时,循环开始printf( 请输入请求资源的进程 i(0 、1、2、3、4):); / 输入 发出请求向量的进程及请求向量scanf(%d,&i);printf( 请输入进程P%d的请求向量Request%d: ,i,i);for(n=0;nneedi0;) /

11、 若请求向量大于需求资源,则认为是输入错误,要求重新输入printf(” 数据输入有误,请重试! n请输入进程P%d的请求向量 Request%d: ,i,i);for(n=0;n1;n+)scanf(%d,&requestin);if(requesti0=available0) / 判断系统是否有足够资源提供分配printf(” 系统正在为进程P%d分配资源n”,i);change(); / 分配资源j=0;elseprintf(” 系统没有足够的资源,进程 P%d需要等待。n,i);if (j=0) /j=0 表示系统有足够资源分配的情况printf( 当前系统资源情况如下: n); /

12、输出分配资源后的系统资源分配情况output();if(check()=0) / 若找不到安全系列,则之前的资源分配无效printf( 本次资源分配作废,恢复原来的资源分配 状态。 n);for (m=0;m1;m+) / 恢复分配资源前的系统资源状态availablem+=requestim;allocationim-=requestim;needim+=requestim;output(); / 输出系统资源状态printf( 是否还有进程请求资源? n 是:输入 1n 否:输入 0n 请输入: );scanf(%d,&j); / 若还有进程请求资源, j=1 ,之前的 for 循环条件满

13、足end();五、 程序执行结果:资源情况 Work 进程 A全序列的资源分配图妇下;Need Allocation Work+Allocation FinishA A A13402351111047622003577110ture ture ture ture tore请输入请求浚源的进程i (CK K 2、MO 2|请输入进程P2的请求向量Request2: 1 系统正在为进程巴分配资源 当前系统资源情况如下:Max Allocatiun Need AvailableA A A A开始执厅女全性鼻法找到安全序列Pl-P3-P4-P2-P0,系统是安全的 该安全序列的资源分配图如下:资源情况 Vork Need Allocation Vork+Allocation Finish逑程 A A A AP1 2124tureP3 4026turP4 6406tureP2 65410tureP0 101010ture是否还有进程请求资源?是:输入1否:输入0请输关:六、实验总结多个进程同时运行时,系统根据各类系统资源的最大需求和各 类系统的剩余资源为进程安排安全序列,使得系统能快速且安 全地运行进程,不至发生死锁。银行家算法是避免死锁的主要 方法,其思路在很多方面都非常值得我们来学习借鉴 。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1