已阅读5页,还剩8页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
计科112康岩岩201100814220操作系统实验报告实验四:银行家算法的实现计科112 康岩岩 2011008142202013/4/29实验四:银行家算法的实现一实验目的(1) 加深了解有关资源申请、避免死锁等概念。(2) 体会和了解死锁和避免死锁的具体实施方法。二实验属性该实验为设计性实验。三实验仪器设备及器材普通PC386以上微机四实验要求本实验要求2学时完成。本实验要求完成如下任务:(1)设计进程对各类资源最大申请表示及初值的确定。(2)设定系统提供资源的初始状况。(3)设定每次某个进程对各类资源的申请表示。(4)编制程序,依据银行家算法,决定其资源申请是否得到满足。(5)显示资源申请和分配时的变化情况。五实验步骤(一)任务分析:实现银行家算法,首先需要构造四张链表表,如下:进程最大需求数量表:Maxmn进程以获取资源量表 Allocationmn需求表 Needmn可用资资源 Availablen其中,m表示进程数目。n表示资源数目。 对于银行家算的实现,我们可以先初始化一部分数据,模拟出某一状态下的资源分配情况。并发出资源请求,然后判断请求是否可行,并寻找安全序列。 可以看出,本次试验会设计到大量的数据,所以为了简化步骤,并且能直观的得到算法运行结果,需要用到窗口来呈现数据变化情况。(二)程序设计:(1) 总体设计:本次试验语言为java。程序分两大部分,一部分是核心的银行家算法,用来处理资源请求。另一部分是界面,用来发出资源请求并显示处理结果。利用java的swing编程和相关IDE,很容易初始化资源分布情况,下面是其截图:(2) 具体实现:核心部分,银行家算法: 算法的实现完全按照教材中的步骤来进行,具体实现如下:/* * * param processID 进程号 * param ra 请求A类资源数量 * param rb 请求A类资源数量 * param rc 请求C类资源数量 */public static List checkEnable(int processID, int ra, int rb, int rc) /得等到该进程对各类资源的需求量数组Integer need = Need.get(processID);/得等到该进程的各类资源的就绪量数组Integer allocation = Allocation.get(processID);/检测请求数量是否大于需求量if (ra need0 | rb need1 | rc need2) return null;/检测请求量是否大于可用量if (ra Available0 | rb Available1 | rc Available2) return null;/先根据需求修改各类数据,如果后来检测到不存在安全序列,这些数据还会复原Available0 -= ra;Available1 -= rb;Available2 -= rc;need0 -= ra;need1 -= rb;need2 -= rc;allocation0 += ra;allocation1 += rb;allocation2 += rc;/获取安全序列List list = findSaftyLine(processID);/如果安全序列为空,则恢复刚才修改的数据if (list = null) Available0 += ra;Available1 += rb;Available2 += rc;need0 += ra;need1 += rb;need2 += rc;allocation0 -= ra;allocation1 -= rb;allocation2 -= rc;return list;/* * 寻找安全序列 * param proceeeId * return */private static List findSaftyLine(int proceeeId) /得到进程数目int count = Max.size();/标示进程是否安全的数组boolean finish = new booleancount;for (int i = 0; i count; i+) finishi = false;/得到现有各类资源数目Integer work = new IntegerAvailable0, Available1, Available2;int curr = proceeeId;/安全序列List saft = new ArrayList();/寻找 满足条件 ”finishi=false And Needijworkj“(摘自课本) 的进程while (curr count) if (finishcurr = false) Integer need = Need.get(curr);/检测需求量是否符合要求,如果符合,需要修改相应数值if (need0 = work0) & (need1 = work1) & (need2 = work2) Integer allocation = Allocation.get(curr);work0 += allocation0;work1 += allocation1;work2 += allocation2;saft.add(curr); /线程号加入安全序列finishcurr = true; /标示完成curr = 0; /从头搜索数据 else curr+; else curr+;/检测是否有进程不安全for (int i = 0; i count; i+) if (finishi = false) return null;return saft;界面部分:虽然界面不是实验的关键,但在本次实验中,界面担当了很重要作用,银行家算法有可能涉及大量数据,所以这需要一个良好的界面来呈现数据。在该程序中,只需要在表格中输入各类请求资源的数目,并指定相关进程,点击按钮就可的出计算结果,具体实现如下:/* * 初始化数据 */private void initData() int rows = this.jTable1.getRowCount();this.jComboBox1.removeAllItems();for (int i = 0; i rows; i+) this.jComboBox1.addItem(this.jTable1.getValueAt(i, 0);for (int i = 0; i rows; i+) /最大需求表Integer max = Integer.parseInt(this.jTable1.getValueAt(i, 1).toString(), Integer.parseInt(this.jTable1.getValueAt(i, 2).toString(), Integer.parseInt(this.jTable1.getValueAt(i, 3).toString();DoMethod.Max.add(max);/已获得资源表Integer allocation = Integer.parseInt(this.jTable1.getValueAt(i, 4).toString(), Integer.parseInt(this.jTable1.getValueAt(i, 5).toString(), Integer.parseInt(this.jTable1.getValueAt(i, 6).toString();DoMethod.Allocation.add(allocation);/需求表Integer need = Integer.parseInt(this.jTable1.getValueAt(i, 7).toString(), Integer.parseInt(this.jTable1.getValueAt(i, 8).toString(), Integer.parseInt(this.jTable1.getValueAt(i, 9).toString();DoMethod.Need.add(need);/各类资源总量 DoMethod.Available = new IntegerInteger.parseInt(this.a.getText(), Integer.parseInt(this.b.getText(), Integer.parseInt(this.c.getText(); private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) DoMethod.Available = new IntegerInteger.parseInt(this.a.getText(), Integer.parseInt(this.b.getText(), Integer.parseInt(this.c.getText(); /获取请求参数,分别为三类资源的数目int ra_ = Integer.parseInt(this.ra.getText();int rb_ = Integer.parseInt(this.rb.getText();int rc_ = Integer.parseInt(this.rc.getText();/得到请求数据的进程号int processId = this.jComboBox1.getSelectedIndex();/获取安全序列List list = DoMethod.checkEnable(processId, ra_, rb_, rc_);if (list != null) /显示处理情况showResult(list); else JOptionPane.showMessageDialog(null, 此请求无法获得安全序列!);/ TODO add your handling code here: /* * 显示安全序列 * param list */private void showResult(List list) DefaultTableModel newtable1 = (DefaultTableModel) this.jTable1.getModel();newtable1.setRowCount(0);/清空表格1int count = DoMethod.Max.size();/显示各进程的资源情况for (int i = 0; i count; i+) Integer max = DoMethod.Max.get(i);Integer need = DoMethod.Need.get(i);Integer allocation = DoMethod.Allocation.get(i);Object o = new ObjectP + i, max0, max1, max2, allocation0, allocation1, allocation2, need0, need1, need2;newtable1.addRow(o);this.jTable1.updateUI();/显示可用资源情况this.a.setText(DoMethod.Available0+);this.b.setText(DoMethod.Available1+);this.c.setText(DoMethod.Available2+);/请求一次资源后,就禁止修改现有资源数目this.a.setEnabled(false);this.b.setEnabled(false);this.c.setEnabled(false);/根据安全序列显示数据/得到可用资源的一个副本Integer work = DoMethod.Available0, DoMethod.Available1, DoMethod.Available2;DefaultTableModel newtable2 = (DefaultTableModel) this.jTable2.getModel();newtable2.setRowCount(0);/清空表格for (int get : list) Integer need = DoMethod.Need.get(get);Integer allocation = DoMethod.Allocation.get(get);Object o = new ObjectP + get, work0, work1, work2, need0, need1, need2, allocation0, allocation1, allocation2, work0 + allocation0, work1 + alloc
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二手房装修工程赔偿责任合同(2024年度版)2篇
- 二零二四年度教育培训与咨询服务分包合同2篇
- 2024年中小企业专属法律咨询与服务合同版B版
- 2024借款合同文本范文
- 全新广告制作与发布合同2024年
- 2024年专项招商咨询与服务合同模板版B版
- 二零二四年度废料处置合同2篇
- 散装水泥运输服务合同(2024版)2篇
- 2024年企业向个人融资的简化借款合同范本一
- 2024年度智能硬件设备供应与安装合同3篇
- 翻身拍背护理课件
- 火灾调查专业技能.全国比武单项科目解析
- 人卫慕课《走进肺功能》试题答案
- 重庆市巴南区2022-2023学年六年级上学期期末数学试题
- 人音版初中音乐 九年级上册 中考一轮复习课件
- 主题班会:班风校风主题班会课课件
- 中建污水支管逆作井安全专项施工方案
- 肝硬化食管胃底静脉曲张破裂出血的诊治
- 初中体育《篮球单元计划及体前变向换手运球》教学设计
- 万物之理-爱因斯坦之梦智慧树知到课后章节答案2023年下中国海洋大学
- 项目备案申请表
评论
0/150
提交评论