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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

实验四 银行家算法Word文件下载.docx

1、假设平安,才正式将资源分配给进程;否那么本次试探分配作废,恢复原来的资源分配状态,让该进程等待。(5)用dowhile 循环语句实现输入字符y/n判断是否继续进行资源申请。4平安性检查算法safe()函数(1)设置两个向量:工作向量Work,它表示系统可提供应进程继续运行所需的各类资源数目,在执行平安性算法开始时,Work= Available。Finish,它表示系统是否有足够的资源分配给进程,使之运行完成。开始时先做Finishi=0;当有足够的资源分配给进程时,再令Finishi=1。(2)在进程中查找符合以下条件的进程:条件1:Finishi=0;条件2:needij=Workj假设找

2、到,那么执行步骤(3)否那么,执行步骤(4)(3)当进程获得资源后,可顺利执行,直至完成,并释放出分配给它的资源,故应执行:Workj= Workj+ Allocationij;Finishi=1;goto step 2;(4)如果所有的Finishi=1都满足,那么表示系统处于平安状态,否那么,处于不平安状态。四:源程序结构分析1程序结构程序共有以下五个局部:初始化chushihua():用于程序开始进行初始化输入数据:进程数量、资源种类、各种资源可利用数量、各进程的各种资源已分配数量、各进程对各类资源最大需求数等。当前平安性检查safe():用于判断当前状态平安性,根据不同地方的调用提示处

3、理不同。银行家算法bank():进行银行家算法模拟实现的模块,调用其他各个模块进行银行家算法模拟过程。显示当前状态show():显示当前资源分配详细情况,包括:各种资源的总数量(all)、系统目前各种资源可用的数量、各进程已经得到的资源数量、各进程还需要的资源量。主程序main()逐个调用初始化、显示状态、平安性检查、银行家算法函数,使程序有序的进行。2数据结构程序使用的全局变量:const int x=10,y=10;/定义常量int Availablex;/各种资源可利用的数量int Allocationyy;/各进程当前已分配的资源数量int Maxyy;/各进程对各类资源的最大需求数i

4、nt Needyy;/还需求矩阵int Requestx;/申请各类资源的数量int Workx;/工作向量,表系统可提供应进程运行所需各类资源数量int Finishy;/表系统是否有足够的资源分配给进程,0为否,1为是int py;/存储平安序列int i,j;/全局变量,主要用于循环语句中int n,m;/n为进程的数量,m为资源种类数int l=0,counter=0;3函数声明void chushihua(); /系统初始化函数void safe(); /平安性算法函数void bank(); /银行家算法函数void show (); /输出当前资源分配情况4主函数main()in

5、t main() cout /显示程序开始提示信息 chushihua(); /初始化函数调用endlendl; showdata(); /输出初始化后的状态 /=判断当前状态的平安性= safe(); /平安性算法函数调用 if (ln)n当前状态不平安,无法申请,程序退出! system(pause);sign(); /调用签名函数 return 0; / break; else int i; /局部变量 l=0;coutn平安的状态!平安序列为: ;进程(p0) /输出平安序列,考虑显示格式,先输出第一个for (i=1; ipi for (i=0; i+) Finishi=0; /所有

6、进程置为未分配状态 bank(); /银行家算法函数调用return 0;5源程序代码#include stdio.hstdlib.hstring.h/定义全局变量const int x=10,y=10; /常量,便于修改 /各资源可利用的数量 /各进程当前已分配的资源数量 /各进程对各类资源的最大需求数 /尚需多少资源 /申请多少资源 /工作向量,表示系统可提供应进程继续运行所需的各类资源数量 /表示系统是否有足够的资源分配给进程,1为是 /存储平安序列 /i表示进程,j表示资源 /n为进程i的数量,m为资源j种类数int l=0; /l用来记录有几个进程是Finishi=1的,当l=n是说

7、明系统状态是平安的int counter=0;/函数声明 /初始化函数 /平安性算法void show(); /函数show,输出当前状态 /银行家算法void jieshu(); /结束函数void chushihua()输入进程的数量:/从此开始输入有关数据 cin输入资源种类数:m;输入各种资源当前可用的数量( m 种): for (j=0; j j+) cout输入资源 jAvailablej; /输入数字的过程. Workj=Availablej; /初始化Workj,它的初始值就是当前可用的资源数输入各进程当前已分配的资源数量Allocationn i+) cout 输入进程 iA

8、llocationij; Finishi=0;/初始化Finishi输入各进程对各类资源的最大需求Max 对资源 的最大需求数:Maxij; if(Maxij=Allocationij) /假设最大需求大于已分配,那么计算需求量 Needij = Maxij-Allocationij; else Needij=0;/Max小于已分配的时候,此类资源已足够不需再申请初始化完成/平安性算法函数void safe()i+) /i+ if (Finishi=0) /逐个查找Finishi=0的进程 条件一 counter=0; /记数器 for (j=0; if (Workj=Needij) coun

9、ter=counter+1;/可用大于需求,记数 if(counter=m) /i进程的每类资源都符合Workj=Needij 条件二 pl=i; Finishi=1; /i进程标志为可分配 for (j=0;j+) Workj=Workj+Allocationij; /释放资源 l=l+1; /记数,现在有L个进程是平安的,当L=N时说明满足平安序列 i= -1; /从第一个进程开始继续寻找满足条件一二的进程 /显示当前状态函数void show() /函数show,输出当前资源分配情况 int i,j; int Ally; /各种资源的总数量 int L1; /局部变量L1当前的状态为:各

10、种资源的总数量: 资源: Allj=Availablej; /总数量=可用的+已分配的 for (i=0;i+) Allj+=Allocationij;Allj当前各种资源可用的量为(available):Availablej各进程已经得到的资源量(allocation): for(i=0;=m; for (j=i;j+) coutj; for(L1=0;L1L1+) for (j=i;AllocationL1j各进程还需要的资源量(need): for (j=i; for(L1=0;NeedL1j/银行家算法函数void bank()进程申请分配资源: int k=0; /用于输入进程编号

11、bool r=false; / 初值为假,输入Y继续申请那么置为真 do/输入请求输入申请资源的进程(0-n-1n-1) /输入错误处理输入错误,重新输入:输入申请资源的进程(0-输入该进程申请各类资源的数量: for (j=0; do /dowhile 循环判断申请输入的情况 cout进程 kRequestj; if(RequestjNeedkj) /申请大于需求量时出错,提示重新输入贷款数目不允许超过需求数目 cout申请大于需要量!申请的资源的数量为Requestj,大于进程对该资源需求量NeedkjAvailablej) /申请大于可利用量, 应该阻塞等待? ? coutNeedkj)

12、; /RequestjAvailablej| /改变Avilable、Allocation、Need的值 j+) Availablej = Availablej-Requestj; Allocationkj = Allocationkj+Requestj; Needkj = Needkj-Requestj; Workj = Availablej; /判断当前状态的平安性 safe(); /调用平安性算法函数 if (ln) l=0;n试分配后,状态不平安,所以不予分配!恢复原状态 /恢复数据 Availablej = Availablej+Requestj; Allocationkj = Al

13、locationkj-Requestj; Needkj = Needkj+Requestj; Workj = Availablej; for (i=0; Finishi=0; /进程置为未分配状态 elsen申请资源成功! for(j=0; if(Needkj=0); else /有一种资源还没全部申请到,那么该进程不可执行,不能释放拥有的资源 l=1; /置l为1,作为判断标志 break; if(l!=1) /进程可以执行,那么释放该进程的所有资源j+) Availablej=Availablej+Allocationkj; Allocationkj=0;该进程已得到所有需求资源,执行后将

14、释放其所有拥有资源! /归零 Finish0=0; for (i=1; Finishi=0; show(); /显示当前状态ppp: /申请大于可利用量,应该阻塞等待,结束本次资源申请,GOTO 语句跳转至此是否继续申请资源(y/n) ? char* b=new char; /输入y/n,判断是否继续申请 endlb;- if(*b=y|*b=Y) r=true; else r=false; /输入非 Y 那么令 R =false jieshu(); /调用结束函数 while (r=true);/结束函数void jieshu()tt 演示计算完毕/主函数tttt模拟银行家算法 show(); /输出当前状态 /判断当前状态的平安性n) /l在safe中是用来记录平安的进程的个数的n当前状态不平安,拒绝申请! elsen当前的状态是平安的! /输出平安序列 for (i=1; i+) cout /调用银行家算法函数五:程序运行结果1例如数据课本例题 进程数量:5资源种类3三种资源以abc表示例如数据 资源MaxAllocationNeedAvailable进程abc753010743332132220012229023026003222

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

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