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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

资源分配和管理的银行家算法银行家算法实验报告.docx

1、资源分配和管理的银行家算法银行家算法实验报告操作系统实验报告年级、专业、班级姓名实验题目资源分配和管理的银行家算法实验时间2013.05.14实验地点主教 0416实验成绩实验性质验证性 计性 综合性教师评价:算法/实验过程正确; 源程序/实验内容提交 序结构/实验步骤合理;实验结果正确; 语法、语义正确; 报告规范;其他:评价教师签名:一、实验目的学习分配和管理资源的银行家算法,了解死锁避免方法。二、实验项目内容编写程序实现教材 6.3.2 节的银行家算法程序功能:1. 程序随机生成进程数量(10)、资源种类(3)、每类资源总数量 (3)、进程的申请资源的数量(0)、已分配资源的数量、可用

2、资源数量等;2. 输出每一个进程的资源分配情况;3. 输出每一步的资源分配情况和进程执行序列(安全序列)。4. 指出每一次资源分配后系统是否处于安全状态。报告创建时间:2013.05.16三、实验过程或算法(源程序)31 算法思路:先对用户提出的请求进行合法性检查,即检查请求是否大于需要的, 是否大于可利用的。若请求合法,则进行预分配,对分配后的状态调用 安全性算法进行检查。若安全,则分配;若不安全,则拒绝申请,恢复 到原来的状态,拒绝申请。32 银行家算法步骤(1)如果 Requesti=Need,则转向步骤(2);否则,认为出错,因为 它所需要的资源数已超过它所宣布的最大值。(2)如果 R

3、equesti=Available,则转向步骤(3);否则,表示系统 中尚无足够的资源,进程必须等待。(3)系统试探把要求的资源分配给进程 Pi,并修改下面数据结构中的数 值:Available=Available-Requesti;Allocation=Allocation+Request;Need=Need-Request;(4)系统执行安全性算法,检查此次资源分配后,系统是否处于安全状态。33 安全性算法步骤(1)设置工作向量1工作向量 Work。它表示系统可提供进程继续运行所需要的各类资 源数目,执行安全算法开始时,Work=Available;2定义判断一个进程是否执行完毕的方法:b

4、oolean isFinished()。 (2)从进程集合中找到一个能满足下述条件的进程:报告创建时间:2013.05.161process.isFinished()返回值为 true.2Need=Work如找到,执行步骤(3);否则,执行步骤(4)。(3)当进程 P 获得资源后,可顺利执行,直至完成,并释放出分配给它 的资源,故应执行:Work=Work+Allocation;Allocation += Need;转向步骤(2)。(4)如果所有进程的均执行完毕即 isAllFinished()返回值为 true,则 表示系统处于安全状态;否则,系统处于不安全状态。34 数据结构:34. 1

5、主要用到的数据结构:(1) 保存进程最大资源需求量的矩阵: int _maxNeed(2) 保存进程已分配资源量的矩阵: int _allocated(3) 保存进程标识符的字符串:String _id(4) 保存系统中各资源总数的矩阵:int _totalResource(5) 表示申请资源的进程队列:ArrayList _processes(6) 表示系统资源种类数的整数:int _resourceClassCount(7) 存储执行信息:StringBuffer _executeInfo34. 2 程序模块:代表进程的类:Process.java代表银行家算法的类:BankerAlgor

6、ithm.java报告创建时间:2013.05.16算法的主界面:BankerUI.java34. 3 各模块间的调用关系:BankerUI 是程序执行的主界面,输入系统资源种类数之后,其通过程 序随机生成进程数量(10)、资源种类(3)、每类资源总数量(3)、 进程的申请资源的数量(0)、已分配资源的数量、可用资源数量等。其 中所用针对系统进程和资源的操作均需要调用类 BankerAlgorithm 的方 法。3.5 主要函数的核心代码:1. 进行初始化输入的函数2. 打印输出的函数3. 利用安全性算法进行检测的函数4. 进行资源分配的函数5. 利用行家算法进行判定的函数注:具体代码请见附录

7、源程序清单。程序流程图:1、系统主要过程流程图:报告创建时间:2013.05.162、进程请求资源序列图报告创建时间:2013.05.16四、实验结果及分析和(或)源程序调试过程 4.1 主界面:报告创建时间:2013.05.164.2 点击“随机生成”按钮,随机生成进程数量(10)、资源种类(3)、每类资源总数量(3)、进程的申请资源的数量(0)、已分配资 源的数量、可用资源数量,并向系统中添加进程,显示进程的资源分配 情况。报告创建时间:2013.05.164.3 点击“分配资源”按钮,检查系统是否安全,如果当前系统安全, 则输出安全队列,并给第一个安全进程分配资源。若安全:若不安全,则“

8、执行结果”提示框会提示:报告创建时间:2013.05.164.4 点击“执行进程”按钮,执行已经分配资源的进程,并将其从队列 中移除。4.5 点击“分配资源”按钮,重新检测当前系统的安全,如果当前系统 安全,则输出安全队列,并给第一个安全进程分配资源。报告创建时间:2013.05.164.6 此后重复 4、5 步,直至系统中的进程执行完毕:4.7 系统中此时已没有等待执行的进程,若再点击“分配资源”按钮, 则“执行结果”提示框中会提示:报告创建时间:2013.05.164.8 如果需要再进行模拟,则点击“重新生成”按钮,会重新生成进程, 再重复前 7 步即可。4.9 如果模拟结束,可点击“退出

9、”按钮,即可退出系统。 报告创建时间:2013.05.16模拟结束。五、心得体会通过本次实验,我们对银行家算法有了更深的了解,理解了操作系统 关于进程调度的一些方法,并通过编程实现了该算法。也进一步提高 了我们的编程能力,从中学会了很多。附录:源程序清单1.主界面类 BankerUI.javapublic class BankerUI extends JFrame implements ActionListener private static final long serialVersionUID = -8004544916653049326L; private JPanel panel;p

10、rivate JButton model;private JButton alloc;private JButton next;private JButton exit;private JTextField processNum;报告创建时间:2013.05.16/ centerprivateprivateprivateprivateprivateJEditorPane resourcesInfo;JEditorPane processesInfo; / 用html格式显示进程需要资源个数. JTextArea result;JSplitPane splitCenter;JPanel east

11、;private int resourceClassesCount; / 表示资源的个数private BankerAlgorithm banker;/private Process pro;private int Pronum = 0;private int Sournum = 0;static int available = null;/ 可利用的资源static int max = null;/ 最大的需求矩阵static int allocation = null;/ 分配矩阵static int need = null;/ 需求矩阵static int totalSour = nul

12、l;static int Max = null;static int Allocation = null;public BankerUI() super(银行家算法);try UIManager.setLookAndFeel(com.sun.java.swing.plaf.windows.WindowsLookAndFeel ); catch (ClassNotFoundException e) e.printStackTrace(); catch (InstantiationException e) e.printStackTrace(); catch (IllegalAccessExcep

13、tion e) e.printStackTrace(); catch (UnsupportedLookAndFeelException e) e.printStackTrace();setBounds(100, 100, 800, 600);panel = new JPanel(new BorderLayout();/ centerresourcesInfo = new JEditorPane(text/html, ); resourcesInfo.setEditable(false);processesInfo = new JEditorPane(text/html, );/ 以html格式

14、显示进程信息.processesInfo.setEditable(false);JSplitPane splitInfo = newJSplitPane(JSplitPane.VERTICAL_SPLIT);splitInfo.add(new JScrollPane(resourcesInfo), JSplitPane.TOP); splitInfo.add(new JScrollPane(processesInfo),JSplitPane.BOTTOM);splitInfo.setBorder(BorderFactory.createTitledBorder(系统信息); splitInfo

15、.setOneTouchExpandable(true);result = new JTextArea(5, 30);result.setEditable(false);报告创建时间:2013.05.16result.setWrapStyleWord(true); / 按单词换行,即所有单词都不会打断. result.setLineWrap(true); / 换行.JScrollPane textScroll = new JScrollPane(result); textScroll.setBorder(BorderFactory.createTitledBorder(执行结果);splitC

16、enter = new JSplitPane(JSplitPane.VERTICAL_SPLIT); splitCenter.setResizeWeight(1.0);splitCenter.add(splitInfo, JSplitPane.TOP);splitCenter.add(textScroll, JSplitPane.BOTTOM);splitCenter.setOneTouchExpandable(true); / 点击一下就可以扩展分割开来的控件.panel.add(splitCenter, BorderLayout.CENTER);panel.setSize(800, 700

17、);/ easteast = new JPanel();/east.setSize(60, 100);model = new JButton(随机生成);model.setSize(50, 20);model.setLocation(10, 10);model.addActionListener(this);alloc = new JButton(分配资源);alloc.addActionListener(this);next = new JButton(执行进程);next.addActionListener(this);exit = new JButton(退出);exit.addActi

18、onListener(this);JLabel label = new JLabel(当前进程个数:);label.setSize(50,20);label.setLocation(10, 60);processNum = new JTextField();processNum.setSize(50, 20);processNum.setLocation(10,90);processNum.setEditable(false);processNum.setFont(new Font(宋体, Font.BOLD, 20);processNum.setForeground(Color.RED);p

19、rocessNum.setHorizontalAlignment(JTextField.CENTER);east.setLayout(new GridLayout(10,1,10,10);east.setSize(80, 100);east.add(label);east.add(processNum);east.add(model);east.add(alloc);east.add(next);east.add(exit);panel.add(east, BorderLayout.EAST);setEastButtonEnabled(false);/this.getContentPane()

20、.add(new JScrollPane(panel);this.getContentPane().add(panel);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);报告创建时间:2013.05.16public void setEastButtonEnabled(boolean b) / eastalloc.setEnabled(b);next.setEnabled(b);public BankerAlgorithm getBanker() return banker;/ 一个数组小于另一个数组,两个数组大小相等.public boolean

21、 aLowerB(int a, int b) for (int i = 0; i bi)return false;return true;/ 在resourceInfoz中显示系统资源的信息.private void updateTotalResourcesInfo() StringBuffer html = new StringBuffer(100);html.append();html.append(n);StringBuffer resourceNames = new StringBuffer(资源名);StringBuffer resourceCounts = new StringBu

22、ffer(资源个数);/int totalResource = banker.getTotalResource();for (int i = 0; i Sournum; i+) resourceNames.append();resourceNames.append(R + String.valueOf(i); resourceNames.append();resourceCounts.append( ); resourceCounts.append(String.valueOf(totalSouri); resourceCounts.append();resourceNames.append(

23、);resourceCounts.append();html.append(resourceNames);html.append(resourceCounts);html.append(nn);resourcesInfo.setText(html.toString();private void updateProcessInfo() StringBuffer content = new StringBuffer(n); content.append(n);content.append(n);报告创建时间:2013.05.16content.append(资源情况MaxAllocatedNeed

24、Avilable);content.append();content.append(进程名 );StringBuffer processNames = new StringBuffer(40);for (int i = 0; i Sournum; i+) processNames.append(R + i + );content.append(processNames); / Maxcontent.append(processNames); / Allocatedcontent.append(processNames); / Needcontent.append(processNames);

25、/ Avilablecontent.append();ArrayList processes = banker.getProcesses(); /System.out.println(pppp+processes.size();for (int i = 0; i processes.size(); i+) Process p = processes.get(i);content.append( + p.makeHtml();if (i = 0) int avilable = banker.getAvilable();for (int j = 0; j avilable.length; j+)

26、content.append( + avilablej + );if (i = 1)content.append();content.append();content.append(n);content.append(n);content.append();processesInfo.setText(content.toString();processNum.setText(+Pronum);Overridepublic void actionPerformed(ActionEvent e) if (e.getSource() = model) RandomMake();banker = ne

27、w BankerAlgorithm(totalSour,Sournum, newArrayList();for (int i = 0; i Pronum; i+) Max = new intSournum;Allocation = new intSournum;报告创建时间:2013.05.16for (int j = 0; j Sournum; j+) Maxj = maxij;Allocationj = allocationij;Process pro = newProcess(String.valueOf(i),Max,Allocation, Sournum);if (banker.addProcess(pro) result.setText(result.getText() + 成功添加进程: + banker.getExecuteInfo(); else result.setText(result.getText() + 添加进程失败: + banker.getExecuteInfo();return;/updateProcessInfo();

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

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