银行家算法C语言实现课程设计_第1页
银行家算法C语言实现课程设计_第2页
银行家算法C语言实现课程设计_第3页
全文预览已结束

下载本文档

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

文档简介

1、银行家算法c语言实现-课程设计编程模拟实现生产者-消费者问题一、实验目的与实验项目介绍银行家算法是最有代表性的避免死锁的算法,由于该算法能用于银行系统现金贷款的发放而得名。其实现思想是:允许进程动态地申请资源,系统在每次实施资源分配之前,先计算资源分配的安全性,若此次资源分配安全(即资源分配后,系统能按某种顺序来为每个进程分配其所需的资源,直至最大需求,使每个进程都可以顺利地完成),便将资源分配给进程,否则不分配资源,让进程等待。实验的目的1加深对死锁概念的理解2. 能够利用银行家算法,有效避免死锁的发生,或检测死锁的存在。二、实验项目方案设计 1.定义银行家算法中的数据结构available

2、,allocation,need等利用定义的全局变量来进行函数间值的传递2.此实验通过3个函数实现,a:主函数(main),b:安全检测函数(check),c:输出函数(print).3.主函数(main)的实现:输入已知条件,利用安全检测函数检测已知的进程分配情况是否为安全状况。如果为安全,则输入需请求资源的进程号和所需资源数,否则结束主函数。reqi为进程i的请求向量。进行银行家算法:(1):如果reqijneedij则认为出错,输出请求的资源数超过它所需的最大数; 否则执行(2); (2):如果reqijavailableij则输出尚无足够的资源;否则执行(3)。(3):系统试探着把资源

3、分配给进程i,并修改下面数据结构中的数值:availablej:=availablej-reqij;allocationij:=allocationij+reqij;needij:=needij-reqij;并且保存修改前的数值。(4):系统执行安全性算法。如果不安全则还原(3)中保存的availablej,allocationij, needij的值.最后输入是否要继续,如继续则转至前面的输入请求资源的进程号,否则退出。4安全检测函数(check): (1)设置两个向量work和finish : work:=available,表示系统可提供给进程继续运行所需的各类资源数目;finish表示

4、系统是否有足够的资源分配给进程,使之完成。开始时先做finishi:=false;当有足够资源分配给进程时,再令finishi:=true。(2)从进程集合中找到一个能满足下述条件的进程:a: finishi=false; b: needij=workj; 若找到,执行(3),否则,执行(4)。(3):当进程i获得资源后,可顺利执行,直到完成,并释放出分配给它的资源,故应执行:workj:=workj+allocationi,j;finishi:=true;av+=i; ( 记录安全序列)go to step 2;(4):如果所有进程的finishi=true都满足,则表示系统处于安全状态,输

5、出安全序列;否则,系统处于不安全状态。5.输出函数(print): 利用循环体输出各进程号,已分配的资源数数,仍需要的资源数,剩余的可用资源数。三、实验实施步骤 1.在tc上新建一个文件,并保存为bank1,在编辑界面中输入以下代码:#define m 50int allocationmm,needmm,availablem; /定义全局变量int n, m, r;main()void check();void print();int i, j, p=0,q=0;int reqm, allocation1mm,need1mm,available1m;printf(please input th

6、e sum of processes:);scanf(%d, &n); /输入进程总数printf(please input the sum of kinds:);scanf(%d, &m); /输入资源种类总数printf(please input the known condition:n);printf( allocationn);for(i=0;in; i+)for(j=0;jm; j+) scanf(%d, &allocationij); /输入已知的进程已分配资源数printf( needn);for (i=0;in; i+)for(j=0;jm; j+) scanf(%d, &n

7、eedij); /输入已知的进程还需要的资源数printf(availablen);for (i=0;im; i+) scanf(%d, &availablei); /输入已知的可用资源数print(); /输出各已知条件check(); /检测已知的状态是否安全if (r=1) /如果已知的状态安全则执行以下代码 do printf(nplease input the no. of process: ); scanf(%d, &i); /输入请求资源的进程号 printf(please input the resources of request, a b c:); for(j=0;jm;

8、j+) scanf(%d,&reqj); /输入该进程所需的资源数 p=0; q=0; for(j=0;jneedij) p=1; /判断请求是否超过它所宣布的最大资源数 if(p) printf(the resources of request have been beyond the max number needed!); else for(j=0;javailablej) q=1; /判断请求是否超过可用资源数 if(q) printf(there are not enough available resources!); else for(j=0;jm; j+) /请求满足条件86银行家算法c语言实现 available1j=availablej; /* 保存原已分配的资源数, allocation1ij=allocationij; 仍需要的资源数,和可用的 need1ij=needij; 资源数*/ availablej=availablej-reqj; / * 系统尝试

温馨提示

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

评论

0/150

提交评论