银行家算法C语言代码_第1页
银行家算法C语言代码_第2页
银行家算法C语言代码_第3页
银行家算法C语言代码_第4页
银行家算法C语言代码_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、实验名称: 银行家算法 姓 名: 杨秀龙 学 号: 专业班级: 创新实验班111 指导老师: 霍林 实验题目银行家算法实验目的更深层的了解银行家算法是如何避免死锁的设计思想银行家算法是根据进程的请求,假设在已分配给该进程请求的资源后,进行安全性算法,如果都能满足其他进程的请求,则满足该进程的请求,否则挂起该进程的请求。假设在一个系统中,知道相应的进程的状态(最大需求、已占用的资源量、还需要的资源量和可利用的资源数),某个进程发出请求,在请求满足两大请求(小于还需要的资源并小于可利用资源数)时,分配给该进程相应的资源,再进行安全检测,在确认安全的情况下,才把资源真正分配给该进程,否则终止请求!主

2、要数据结构根据算法的相应需求,需要定义int maxMM;int allocationMM;int needMM;int availableM;int workM;等数组开始结束输入总进程数输入资源数输入Max矩阵输入Allocation矩阵是否添加进程请求输入进程号和请求资源否是流程图运行结果图(1)分配进程的相应状态图(2)请求和请求完全部资源后释放资源图(3)继续请求并释放其他进程图(2)所有进程请求完成后系统资源还原附录原代码如下:# include stdio.h # define M 50int maxMM;int allocationMM;int needMM;int avail

3、ableM; int i, j, n, m, anquan,x=0;/*7 5 3 0 1 0 7 4 3 3 3 2 3 2 2 2 0 0 1 2 2 9 0 2 3 0 2 6 0 0 2 2 2 2 1 1 0 1 1 4 3 3 0 0 2 4 3 1*/ main() void check(); int p,q,control; int reqM,allocation1MM,need1MM,available1M; printf(输入进程总数:); scanf(%d, &n); printf(输入资源种类数量:); scanf(%d, &m); printf(输入需求矩阵Max:n

4、); for(i=0;in; i+) for(j=0;jm; j+) scanf(%2d,&maxij); printf(输入已分配矩阵Allocation:n); for(i=0;in; i+) for(j=0;jm; j+) scanf(%d, &allocationij); for (i=0;in; i+) for(j=0;jm; j+) needij=maxij-allocationij; printf(输入资源的系统初始值:n); for (j=0;jm;j+) scanf(%d, &availablej); for (j=0;jm;j+)for(i=0;in;i+)availabl

5、ej=availablej-allocationij; check(); if (anquan=1) /如果已知的状态安全则执行以下代码 for(control=0;control+) p=0,q=0; printf(输入请求的进程号: ); scanf(%d, &i); printf(输入该进程的请求资源数组:); for(j=0;jm; j+) scanf(%d,&reqj); for(j=0;jneedij) p=1; if(p) printf(请求资源大于该进程还需要的资源!n); else for(j=0;javailablej)/判断请求是否大于可用资源 q=1; if(q) pr

6、intf(可用资源不能满足请求!n); else for(j=0;jm; j+) /满足两大条件 available1j=availablej; /保持资源的当前 allocation1ij=allocationij; need1ij=needij; availablej=availablej-reqj; /尝试把资源分配给进程 allocationij=allocationij+reqj; needij=needij-reqj; if(needij=0)x=x+1; /当进程满足时释放资源 if(x=m) for(j=0;jm;j+) availablej=availablej+alloca

7、tionij; allocationij=0; available1j=availablej; x-; else x=0; check(); if(anquan=0) for (j=0;jm; j+) availablej=available1j; /还原分配前的状态 allocationij=allocation1ij; needij=need1ij; printf(执行该进程不安全!返回继续操作。n); printf(是否继续请求?n); void check() /安全性算法 int k, f, no=0; int workM,aM; char finishM; anquan=1; fo

8、r(i=0;in; i+) finishi=F; for(j=0;jm; j+) workj=availablej; k=n; do for (i=0;in; i+) if (finishi=F) f=1; for (j=0;jworkj) f=0; if (f=1) /找到还没完成的且需求数小于可提供进程继续运行的 finishi=T; ano+=i; /记录安全序列号 for (j=0;j0); f=1; for (i=0;in; i+) /判断有没有进程没完成 if (finishi=F) f=0; break; if (f=0) printf(不安全状态!n); anquan=0; e

9、lse printf(处于安全状态.); printf(安全序列号:); for (i=0;in;i+) printf (%d ,ai); printf(n); printf(进程); printf( ); printf( Max ); printf( ); printf(allocation); printf( ); printf(need); printf( ); printf(available); printf(n); for (i=0;in; i+) printf(%2d,i); printf( ); for(j=0;jm; j+) printf(%2d,maxij); printf( ); for(j=0;jm

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论