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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

《银行家算法的模拟实现》实验报告Word下载.docx

1、 (4)、检查用户的请求是否小于系统中的可利用资源数量,条件是K=AVALIABLEI,J。如果条件不符则申请失败,阻塞该进程,重新进行进程动态资源申请(使用goto语句) (5)、进行资源的预分配,语句如下: AVALIBLEIJ= AVALIBLEIJ-K; ALLOCATIONIJ= ALLOCATIONIJ+K; NEEDIJ=NEEDIJ-K; (6)、系统调用安全性检查算法(checksafe()函数)进行检查,如果检查通过,则不用回收,否则进行回收,进程资源申请失败进入等待。4、安全性检查算法(checksafe()子函数) (1)、设置两个临时变量。 FINISHN记录进程模拟

2、执行的结束状态,初值为0,如果可以模拟执行结束,则可设为1,也可设为其它非零值以表示执行的先后次序。 WORKM记录模拟执行中资源的回收情况,初值为AVAILABLEM的值。 (2)、在进程中查找符合以下条件的进程。 条件1:FINISHI=0 条件2:NEEDIJ=WORKJ (3)、如果查找成功则进行资源的模拟回收,语句如下: WORKJ=WORKJ+ALLOCATIONIJ; FINISHI=1 或查找到的顺序号(4)、如果查找不成功,则检查所有进程的FINISH,如果有一个为0,则系统不为0,返回不成功标志。否则返回成功标志。四、系统流程图开 始输入资源数m, 及各类资源总数,初始化A

3、vailable向量输入进程数n,i=1输入进程i的最大需求向量max。inmax资源总数提示错误重新输入i加1任选一个进程作为当前进程输入该进程的资源请求量Request 调用银行家算法,及安全性算法,完成分配,或并给出提示该进程的Need向量为0该进程已运行结束Need矩阵为0所有进程运行都结束结 束NY初始化need 矩阵五、程序源代码#include #includestdlib.hconst unsigned short c=3;/资源类数const unsigned short t=5;/进程数void print();/用于打印输出表格的函数void input();/用于输入的

4、函数void tryfenpei(int i);/试分配函数;void refenpei(int i);/恢复数据函数void checksafe(int s);/安全检测函数int tempt;int workc;/定义初始化数组int needtc,requestc,availablec;int maxtc=3, 5, 7 ,9 ,11,6 ,8 ,2 ,9, 5,6 ,3 ,5 ,7 ,4;int allocationtc=1 ,2 ,5 ,4, 8,5 ,4, 1 ,8 ,3 ,3 ,2 ,4, 3, 1;int totalc=17,21,25;int in;/用户选择的进程号/*-m

5、ain函数-*/int main(int argc,char *argv) int i; char ch=Y; int l=0,m=0,a; for( i=0;it;i+) for(int j=0;jc;j+) needij=maxij-allocationij; for( m=0;mm+) a=0; for(int l=0;ll+) a+=allocationlm; availablem=totalm-a; do if(ch=|ch=y) coutok,现在开始进入实验endl; coutin) if(!(0=in&in=4) cout这里没有该进程,请重新输入 else break; 您输

6、入的是 p 进程该进程需求量为: for(i=0; needini=maxini-allocationini; coutneedinirequesti) if(requesti0) coutneedini) cout超出进程需求量endlavailablei) 系统没有足够多的可用资源量满足进程需要 else break; cout输入成功,您输入的是:request0 request1ch);return 0;/*-输出函数-*/void print() int i,j;更新数据中.|-|-|-|-|-|-|最大需求矩阵|已分配矩阵-|-需求矩阵-|可利用资源-| 资源 | Max | Al

7、location| Need | available | | A B C | A B C | A B C | A B C |进程 | | | | | for(i=0;5;| p | for(j=0;3;j+) maxij0) coutcout/*-试分配函数-*/void tryfenpei(int i) for(int f=0;fqi) return 0; return 1;/*-安全检测函数-*/void checksafe(int s) int flag,tempt,i,j,l,k=0; bool finisht; finishi=false; workj=availablej;|-|-

8、|-| resource |-Work+Allocation-|-Finish-| | A B C | T/F |programme | | | l=0; if(needijworkj) l=1; break; if(finishi=false&l=0) for(j=0; workj=workj+allocationij; if(workj9)workj else| finishi=true;true tempk=i;/couttemp=tempk k+; i=-1; /从用户选择的进程开始对每个进程都要检测for(i=0; if(finishi=false) flag=1;if(flag=1

9、)系统不安全!本次资源申请不成功感!正在恢复原来的数据. refenpei(in);恢复数据成功!正在打印输出. print();else找到一个安全系列:Ptempi已通过安全性测试!开始给第p进程分配资源.分配完成!打印输出.五、程序运行结果及分析1、运行结果输入初值,进行安全性测试,结果安全序列,依次为P4-P0-P1-P2-P3分配资源:资源不足,无法继续实验:2、出现问题及解决方案本程序考虑了程序功能实现、格式显示合理化、输入错误异常处理等各个方面的设计,尽可能使程序设计的更加完美。在长期的设计调试过程中遇到过许多问题,通过网上搜索、查询资料、调试试验等方法一一解决。下面大致罗列一些

10、主要问题:(1)、关于某些判断算法优劣问题:在程序中很多地方都会用到循环判断是否符合条件的算法,在设计这些算法时有很多方法,而有的算法可以更节省时间。如下安全性算法中寻找寻找符合Finishi=0条件的进程的例子:/* 算法一: for (j=0; j=Needij) counter=counter+1;/记数 if(counter=m)*/ /算法二:=Needij); /可用大于等于需求 else counter=1; break; if(counter!=1)显然算法二要优于算法一。本程序中还有很多类似的地方。这里主要考虑的是一个程序的优化设计问题。(2)、关于某些系统函数调用时的执行顺

11、序:在调用一些系统函数如getch() 、system(pause)等时发现其执行顺序的一些问题。如类似: = nnnsystem();/暂停调试时发现此时:在Microsoft Visual C+ 6.0中先执行system() 再输出显示,而在调试器Bloodshed Dev-C+中则顺序执行;但当把cout 改为 cout 其他不变时,则在两中调试器中均为顺序执行,即先显示后暂停。查找了一下相关帮助: 在OSTREAM.H中有这样的一个inline函数: inline _CRTIMP ostream& _cdecl endl(ostream& _outs) return _outs n

12、flush; 。也就是说 endl= return _outs getch();/等待键盘输入,不返回任何值,无任何显示方法四:使用 char* tt=new char; cintt; 方式,要求键盘输入一个与程序无关的变量六、心得体会 “银行家算法的模拟实现”是本学期操作系统课程唯一的课程设计。在设计此程序的过程中,我们遇到过许多问题,也学到了很多东西。本程序的设计实现主要是用C+语言实现,通过对程序算法的设计优化、输出显示的格式设计、输入过程中的异常处理等一些设计过程中的问题的考虑解决,在C+学习上也有了很大的进步。程序设计过程中开始遇到的最大的问题是算法的结构设计问题,课本上只给了设计要

13、求及简单的算法,要真正实现还需要考虑很多方面。在算法的数据结构设计上考虑了很长时间。在程序设计中先后参考了很多网络资料,也参考了一些别人写的的程序,综合这些算法思想和自己的思路对程序做了很好的设计方式,对一些算法的优越性等也作了一些考虑。此外考虑最多的就是异常错误处理的设计。一个好的程序必须能在各种环境下都有其相应的处理方式,至少能应对一些常见的可能发生的错误。比如一般的要求输入为数字时,如果输入了一个非数字字符,程序就会立即出错无法继续运行,本程序针对这个问题设计了一个shuzi();函数进行处理,处理方式为:接受键盘输入的字符为字符串,然后对字符串的每个字符进行判断是否为数字,如果有非数字字符出现则提示出错并要求重新输入。又如在判断是否继续时要求输入Y/N时,按一般的方式,如果输入为多个字符,则多余的字符会保存在缓冲区,到下次要求输入时输入而导致出错,对此问题设计处理方式为接受输入字符保存为串然后只取其首字符进行判断。还有很多类似的错误处理。还有在设置程序的显示优化时,发现暂停函数在不同的情况下执行顺序不同,如此等等。

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

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