




已阅读5页,还剩2页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
淮海工学院计算机工程学院实验报告书课 程 名: 操作系统原理 题 目: 实验二:银行家算法 学 号: * 姓 名: * 评语:成绩: 指导教师: 批阅时间: 年 月 日一、实验目的:通过实验,了解死锁的预防方法 ,对银行家算法有更为深入的认识。二、实验内容:利用所学语言(不限)编写一个银行家算法的模拟程序,数据自行定义,要求能够对整个过程进行展现,编写程序并模拟验证。 要求:本次实验共计四课时,前两课时要求对银行家算法有较为深入的了解,着手进行程序编制,作出大致的程序框架,编写实验报告;后两课时中,主要是程序的调试,完成实验报告。三、实验步骤1、程序代码(java实现) Java语言的特点:代码的可复用性比较可以在不同的系统中运行不需要考虑所使用的平台是什么,Java的代码比较简洁易于学习,功能强大,高效。/*银行家算法java语言实现*/此处是函数部分因实现的功能不是核心故而略去class TheBankerint m;int n;int max;int maxbak;/备份用int allocation; /已分配资源int allocationbak;/备份用int need; /需要资源int needbak;/备份用int available;/剩余资源int availablebak;/备份用public TheBanker() /银行家算法函数 Scanner s = new Scanner(System.in); System.out.println(初始化=); System.out.print(请依次输入系统中的【进程数】和【资源类型数】:); m = s.nextInt(); n = s.nextInt(); max =new intmn; maxbak = new intmn; allocation = new intmn; allocationbak = new intmn; need = new intmn; needbak = new intmn; available = new intn; availablebak = new intn; /分配资源 for(int i=0;imax.length;i+)/初始化向量MAX、ALLOCATION、NEED、AVAILABLE System.out.print(请依次输入第 + i + 进程的各资源数:); for(int j=0;jmaxi.length;j+) maxij = s.nextInt(); maxbakij = maxij; for(int i=0;iallocation.length;i+) System.out.print(请依次输入第 + i + 进程中已分配资源的数量:); for(int j=0;jallocationi.length;j+) allocationij = s.nextInt(); allocationbakij = allocationij; for(int i=0;ineed.length;i+) for(int j=0;jneedi.length;j+) needij = maxij - allocationij; needbakij = needij; for(int i=0;iavailable.length;i+) System.out.print(请输入系统中第 + i + 种资源的剩余量:); availablei = s.nextInt(); availablebaki = availablei; System.out.println(初始化结果=); System.out.println( MAX ALLOCATION NEED AVAILABLE); for(int i=0;im;i+) System.out.print(P + i + : ); for(int j=0;j9)/如果是两位数,控制格式,在数字前少输出一个 。 System.out.print(maxij + ); else System.out.print( + maxij + ); System.out.print( ); for(int j=0;j9) System.out.print(allocationij + ); else System.out.print( + allocationij + ); System.out.print( ); for(int j=0;j9) System.out.print(needij + ); else System.out.print( + needij + ); if(i=0) System.out.print( ); for(int j=0;j9) System.out.print(availablej + ); else System.out.print( + availablej + ); System.out.println(); System.out.println(=完成初始化=); System.out.println();public void deadlockAvoidance() int security = new intm; boolean param = new booleanm; int tar = new intn; int count = 0; int num1 = m+1;/计数器,每循环一遍所有进程就自减1 int num2 = m;/计数器,每遇到一个被满足的进程就自减1 while(num10)/如果num1=0,则说明依次循环下来没有能够满足的进程,因此中止 for(int i=0;im;i+) if(parami=false)/只有没有被满足的进程才可以进入内层循环 parami = true; for(int j=0;jn;j+) tarj = availablej - needij; if(tarj0) parami = false; if(parami=true) for(int k=0;k0) System.out.print(【安全序列】为:); for(int i=0;i); System.out.println(); System.out.println(=【死锁避免】结束=); System.out.println(); return; while(num1=0)&(num20) System.out.println(抱歉!没有【安全序列】!); System.out.println(=【死锁避免】结束=); System.out.println(); return; /在已有进程中为进程申请资源判断是否可以申请public void deadlockDetection() Scanner sc = new Scanner(System.in); int key; int security = new intm; boolean param = new booleanm; int temp = new intn; int tar = new intn; int count = 0; int num1 = m+1;/计数器,每循环一遍所有进程就自减1 int num2 = m;/计数器,每遇到一个被满足的进程就自减1 for(int i=0;im;i+)/回复死锁检测前的状态 for(int j=0;jn;j+) maxij = maxbakij; allocationij = allocationbakij; needij = needbakij; availablej = availablebakj; System.out.println(); System.out.println(死锁检测=); System.out.println(如果您此时想申请系统资源请输入【进程号】和+n+种【资源量】,系统将帮您判断是否可行。); System.out.print(您输入的进程号为:); key = sc.nextInt(); for(int i=0;in;i+) System.out.print(您要申请的第+i+种资源的数量为:); tempi = sc.nextInt(); for(int i=0;in;i+) allocationkeyi = allocationkeyi + tempi; needkeyi = needkeyi - tempi; if(needkeyi0) System.out.println(申请资源大于所需资源,系统【不能】分配资源!); for(int k=0;km;k+)/回复死锁检测前的状态 for(int j=0;jn;j+) if(k=0) availablej = availablebakj; maxkj = maxbakkj; allocationkj = allocationbakkj; needkj = needbakkj; return; availablei = availablei - tempi; if(availablei0) System.out.println(申请资源大于系统所剩资源,系统【不能】分配资源!); for(int k=0;km;k+)/回复死锁检测前的状态 for(int j=0;jn;j+) if(k=0) availablej = availablebakj; maxkj = maxbakkj; allocationkj = allocationbakkj; needkj = needbakkj; return; 此处省去代码功能是否输出安全序列主要输出内容是安全性算法表格内容之前代码也有相似内容。2、 算法分析在我的算法中:使用大量的数组(int max;int maxbak;/用于存放进程与资源名称nt allocation; /已分配资源int allocationbak;/对应进程与资源用来存放已分配资源数目int need; /需要资源int needbak;/对应进程与资源用来存放仍需资源数目int available;/剩余资源int availablebak;/存放剩余资源的数目)。从主体上的代码可以分成二大组成部分(程序入口主函数类和算法实现类),算法实现类分成两大组成部分(一部分是初始操作部分永远输入进程个数与进程信息以及资源的总数与分配情况,并进行安全性算法看是否存在一个安全序列;另一部分是进程请求获取资源判断是否可以获取。)四、实验小结本次实验的内容是银行家算法的实现,在本次的实验过程中通过参考别人的算法结合自己对银行家算法的理解完成本次的实验。在实验过程中遇到的问题主要是在刚开始的时候构想代码的时候遇到问题,起初准备是用数据结构来进行进程与资源的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年社区专业试题及答案
- 2025年红酒专业知识试题及答案
- 2025年三基考试题库及答案文档
- 2025年sql考试题及答案oracle
- 2025年水利监理三控试题及答案
- 2025年三基考试检验试题及答案
- 未婚员工协议书
- 机票协议书范本
- 村民签名协议书
- 村股转让协议书
- 脊髓电刺激术护理查房
- 乡村法律明白人培训课件
- 借贷合同不服管辖权异议被驳回上诉状
- 口腔咨询培训课件
- 佳能mg2580使用演示操作方法h
- DB4409T38-2023奇楠沉香栽培技术规程
- 湖南省长沙市周南教育集团2024届中考化学模拟试题含解析
- 常州关于成立光电测量仪器公司可行性研究报告
- 出境水果果园注册记录考核记录表格
- 新工程勘察设计收费标准(2002年修订本)
- DB61T1730-2023公路路面煤矸石基层施工技术规范
评论
0/150
提交评论