《银行家算法的模拟实现》—实验报告(0618191835).pdf

上传人:白大夫 文档编号:5599325 上传时间:2020-06-21 格式:PDF 页数:13 大小:446.97KB
返回 下载 相关 举报
《银行家算法的模拟实现》—实验报告(0618191835).pdf_第1页
第1页 / 共13页
《银行家算法的模拟实现》—实验报告(0618191835).pdf_第2页
第2页 / 共13页
《银行家算法的模拟实现》—实验报告(0618191835).pdf_第3页
第3页 / 共13页
《银行家算法的模拟实现》—实验报告(0618191835).pdf_第4页
第4页 / 共13页
《银行家算法的模拟实现》—实验报告(0618191835).pdf_第5页
第5页 / 共13页
点击查看更多>>
资源描述

《《银行家算法的模拟实现》—实验报告(0618191835).pdf》由会员分享,可在线阅读,更多相关《《银行家算法的模拟实现》—实验报告(0618191835).pdf(13页珍藏版)》请在三一文库上搜索。

1、 ; 银行家算法的模拟实现 -实验报告 题目: 银行家算法的模拟实现 专业: 班级: 组员: 指导老师 : ; 一、实验目的 死锁会引起计算机工作僵死,因此操作系统中必须防止。本实验的目的在于让学生独立 的使用高级语言编写和调试一个系统动态分配资源的简单模拟程序,了解死锁产生的条件和 原因,并采用银行家算法有效地防止死锁的发生,以加深对课堂上所讲授的知识的理解。 二、实验内容 模拟实现银行家算法实现死锁避免。要求:初始数据(如系统在T0 时刻的资源分配情 况、每一种资源的总数量)从文本文件读入,文件中给出最大需求矩阵Max、分配矩阵 Allocation ,在程序中求得需求矩阵Need 和可利

2、用资源向量Available 。 三、实验分析过程 1、整个银行家算法的思路。 先对用户提出的请求进行合法性检查,再进行预分配, 利用安全性检查算法进行安全性检 查。 1)进程一开始向系统提出最大需求量. 2)进程每次提出新的需求(分期贷款 )都统计是否超出它事先提出的最大需求量. 3)若正常 ,则判断该进程所需剩余剩余量(包括本次申请 )是否超出系统所掌握的 剩余资源量 ,若不超出 ,则分配 ,否则等待 2、算法用到的主要数据结构和C 语言说明。 (1) 、可利用资源向量INT AVAILABLEM M 为资源的类型。 (2) 、最大需求矩阵INT MAXNM N 为进程的数量。 (3) 、

3、已分配矩阵INT ALLOCA TIONNM (4) 、还需求矩阵INT NEEDNN (5) 、申请各类资源数量int Requestx; / (6) 、工作向量int Workx; (7) 、int Finishy; / 表示系统是否有足够的资源分配给进程,0 为否,非0 为是 3、银行家算法(主程序) (1) 、系统初始化。输入进程数量,资源种类,各进程已分配、还需求各资源数量,各资 源可用数量等 (2) 、输入用户的请求三元组(I,J,K) ,为进程I 申请 K 个 J 类资源。 (3) 、检查用户的请求是否小于还需求的数量,条件是K #include #include const u

4、nsigned short c=3;/ 资源类数 const unsigned short t=5;/ 进程数 void print();/ 用于打印输出表格的函数 void input();/ 用于输入的函数 void tryfenpei(int i);/试分配函数; void refenpei(int i);/ 恢复数据函数 void checksafe(int s);/ 安全检测函数 int tempt; int workc; 开 始 输入资源数m, 及各类资源总数, 初始化 输入进程数n, 输入进程i 的最大需求向量 i n max 资 源 提示 错误 i 加 1 任选一个进程作为 输

5、入该进程的资源请求量 调用银行家算法, 及安全 性算法, 完成分配, 或并 该 进 程 的Need 向量为 0 该 进 程 已 运 行 Need 矩阵为所 有 进 程 运 行 结 束 N Y Y N N Y 初始化need N Y ; /定义初始化数组 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 i

6、n;/ 用户选择的进程号 /*-main函数 -*/ int main(int argc,char *argv) int i; char ch=Y; int l=0,m=0,a; for( i=0;iin) if(!(0requesti) if(requestineedini) coutavailablei) coutch); ; return 0; /*- 输出函数 -*/ void print() int i,j; cout0) coutqi) return 0; return 1; /*- 安全检测函数-*/ void checksafe(int s) int flag,tempt,i,

7、j,l,k=0; bool finisht; for(i=0;iworkj) l=1; break; if(finishi=false cout9) cout“; cout=Needij) counter=counter+1;/记数 if(counter=m) */ / 算法二: for (j=0; j=Needij); /可用大于等于需求 else counter=1; break; if(counter!=1) 显然算法二要优于算法一。本程序中还有很多类似的地方。这里主要考虑的是一个 程序的优化设计问题。 (2) 、关于某些系统函数调用时的执行顺序: 在调用一些系统函数如getch() 、

8、system(“pause“)等时发现其执行顺序的一些问 题。如类似: cout system(“pause“);/ 暂停一下并显示“输入任意键继续” 方法二: #include getchar();/须按回车键结束,不是任意键 方法三: #include getch();/等待键盘输入,不返回任何值,无任何显示 方法四: 使用char* tt=new char; cintt; 方式,要求键盘输入一个与程序无关的变量 六、心得体会 “银行家算法的模拟实现”是本学期操作系统课程唯一的课程设计。在设计此程序的 过程中, 我们遇到过许多问题,也学到了很多东西。本程序的设计实现主要是用C+语言实 现,

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1