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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

银行家算法.docx

1、银行家算法洛阳理工学院实验报告系别计算机与信息工程系班级B100508学号B10050812姓名课程名称 计算机操作系统实验日期2012/12/13实验名称银行家算法成绩实验目的:1. 了解进程产生死锁的原因,了解为什么要进行死锁的避免。2. 掌握银行家算法的数据结构,了解算法的执行过程,加深对银行家算法的理解。一、实验条件:计算机一台,软件vc+6.0二、实验原理:n个并发进程共享m个系统资源的系统,进程可动态申请资源和释放资源。系统按各进程的申请动态的分配资源,先对用户提出的请求进行合法性检查,再进行预分配,利用安全性检测算法进行安全性检测,如果系统分配资源,系统进入安全状态,则预分配就是

2、正式分配,如果系统分配资源,系统进入不安全状态,则撤销预分配。三、实验内容#include #include int M=3,N=5;/M为资源数量N为进程数量int available3; /预分配前各类资源可用数量int max53; /各进程需要各资源最大数量int allocation53;/各进程已分配各类资源的数量int need53;/各进程需要各类资源的数量int request3;/进程对某一类资源的请求int work3;/预分配后各类资源可用数量int finish5;/进程结束标志数组。0表示分配失败,资源不足以满足需求量;1表示分配成功,资源满足需求量int safe

3、()/预分配后安全性检测 int i=0; int j=0; int k=0; int flag1=0;/所有进程安全结束;0表示安全可以安全结束,1表示不可以安全结束 int flag2=0;/某进程对资源的需求量与可利用量的大小标志;0表示需求小于可利用,1表示需求大于可利用 for(i=0;iN;i+) finishi=0;/各进程结束标志初始化为0。 for(i=0;iM;i+) worki=availablei;/预分配后各资源可利用量赋值给work数组 while(jN) for(i=0;iN;i+) if(!finishi)/i进程尚未分配 flag2=0; for(k=0;kw

4、orkk)/需求大于可利用 flag2=1; break; if(flag2=0) work0=work0+allocationi0;/收回已分配的资源 work1=work1+allocationi1;/收回已分配的资源 work2=work2+allocationi2;/收回已分配的资源 finishi=1; j+; for(i=0;i5;i+) if(finishi=0) flag1=1;/判断各进程是否能够安全结束标志,1表示不能安全结束 break; if(flag1=0) return 0;/预分配安全 else return 1;/预分配不安全int diaodu() int n

5、ame; int r=0;/ int i=0; int j=0; printf(请输入是几号进程申请资源n); scanf(%d,&name); getchar(); for(i=0;iM;i+) printf(请输入进程%d申请%i资源的个数n,name,i); scanf(%d,&requesti); getchar(); while(neednameirequesti) printf(不允许索取大于需求量,请重新输入n); scanf(%d,&requesti); if(availableirequesti) printf(检查用户的请求大于系统中的可利用资源数量,进程%d先等待。n,n

6、ame); r=1; break; if(r=0) /进行资源的预分配 for(i=0;iM;i+) availablei=availablei-requesti; allocationnamei=allocationnamei+requesti; neednamei=neednamei-requesti; return 1;/预分配成功 else return 0;/预分配失败 void main() int i=0,j=0; int k=0; int r=0; int q=1;/继续分配标志。0表示不继续分配 1表示继续分配 int name=0;/申请资源进程的名字 printf(请输入

7、最大需求矩阵n); for(i=0;iN;i+) / printf(请输入进程%d的各资源最大需要的数量n,i); for(j=0;jM;j+) scanf(%d,&maxij); getchar(); printf(请输入各进程已分配的矩阵n); for(i=0;iN;i+) /printf(请输入进程%d的各资源已分配的数量n,i); for(j=0;jM;j+) scanf(%d,&allocationij); getchar(); printf(请输入各进程还需要各资源所需数量的矩阵n); for(i=0;iN;i+) / printf(请输入进程%d还需要各资源的数量n,i); fo

8、r(j=0;jM;j+) scanf(%d,&needij); getchar(); printf(请输入各资源可利用的数量n); for(i=0;iM;i+) scanf(%d,&availablei); getchar(); / /调度并检测安全性 / do int r=diaodu(); switch(r) case 1: k=safe(); if(k=0)/预分配安全 printf(分配成功!结果如下); printf(各进程已分配的矩阵n); for(i=0;iN;i+) for(j=0;jM;j+) printf(%d ,allocationij);/打印输出各进程已分配的矩阵 p

9、rintf(n); printf(各进程还需要各资源的矩阵n); for(i=0;iN;i+) for(j=0;jM;j+) printf(%d ,needij);/打印输出各进程还需要各资源的矩阵 printf(n); printf(各资源可利用的数量n); for(i=0;iM;i+) printf(%d ,availablei);/打印输出各资源可利用的数量 printf(n); else/预分配不安全 printf(调度失败!); for(i=0;iM;i+) /撤销预分配的资源 availablei=availablei+requesti; allocationnamei=alloc

10、ationnamei-requesti; neednamei=neednamei+requesti; break; case 0: break; printf(是否继续,输入0否,输入1继续n); scanf(%d,&q); while(q=1);四、原始数据纪录:输入数据:最大需求矩阵: 已分配的矩阵 还需求的矩阵 可利用的数量 进程0:7,5,3 0,1,0 7,4,3 3,3,2进程1:3,2,2 2,0,0 1,2,2 进程2:9,0,2 3,0,2 6,0,0进程3:2,2,2 2,1,1 0,1,1进程4:4,3,3 0,0,2 4,3,1T0时刻:0号进程申请:1,0,2T1时刻

11、:1号进程申请:3,3,0T2时刻:3号进程申请:0,1,0输出数据:五:结论如图所示,实际输出数据与预期的输出相同。通过本次上机实验熟悉了银行家算法,深入了解了计算机利用银行家算法避免死锁的机制。有利于以后更好的理解操作系统内部各个机制功能的实现。附录:用C语言实现提示1. 算法用到的主要数据结构(1)可利用资源向量 int AvailableM /M为资源的类型(2)最大需求矩阵 int MaxNM /N为进程的数量(3)已分配矩阵 int AllocationNM (4)还需求矩阵 int NeedNM(5)申请各类资源数量int Requestx; /进程对某一类资源的请求(6)工作向量 int Workx;(7)进程结束标识数组int Finishy; /表示系统是否有足够的资源分配给进程y,0为否,1为是2. 银行家算法 (主程序)(1)系统初始化。输入进程数量,资源种类,各进程已分配、还需求各资源数量,各资源可用数量等。(2)输入用户的请求三元组(i,j,k),为进程i申请k个j类资源。(3)检查用户的请求是否小于还需求的数量,条件是 k=Needi,j。如果条件不符则提示重新输入,即不允许索取

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

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