资源分配和管理的银行家算法-银行家算法实验报告(共25页).doc
《资源分配和管理的银行家算法-银行家算法实验报告(共25页).doc》由会员分享,可在线阅读,更多相关《资源分配和管理的银行家算法-银行家算法实验报告(共25页).doc(25页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上操作系统实验报告年级、专业、班级姓名实验题目资源分配和管理的银行家算法实验时间 2013.05.14实验地点主教0416实验成绩 实验性质验证性 设计性 综合性教师评价:算法/实验过程正确; 源程序/实验内容提交 程序结构/实验步骤合理;实验结果正确; 语法、语义正确; 报告规范; 其他: 评价教师签名:一、实验目的学习分配和管理资源的银行家算法,了解死锁避免方法。二、实验项目内容编写程序实现教材6.3.2节的银行家算法程序功能:1. 程序随机生成进程数量(10)、资源种类(3)、每类资源总数量(3)、进程的申请资源的数量(0)、已分配资源的数量、可用资源数量等;2.
2、 输出每一个进程的资源分配情况;3. 输出每一步的资源分配情况和进程执行序列(安全序列)。4. 指出每一次资源分配后系统是否处于安全状态。三、实验过程或算法(源程序)31算法思路: 先对用户提出的请求进行合法性检查,即检查请求是否大于需要的,是否大于可利用的。若请求合法,则进行预分配,对分配后的状态调用安全性算法进行检查。若安全,则分配;若不安全,则拒绝申请,恢复到原来的状态,拒绝申请。32银行家算法步骤(1)如果Requesti=Need,则转向步骤(2);否则,认为出错,因为它所需要的资源数已超过它所宣布的最大值。(2)如果Requesti=Available,则转向步骤(3);否则,表示
3、系统中尚无足够的资源,进程必须等待。(3)系统试探把要求的资源分配给进程Pi,并修改下面数据结构中的数值: Available=Available-Requesti; Allocation=Allocation+Request; Need=Need-Request;(4)系统执行安全性算法,检查此次资源分配后,系统是否处于安全状态。33安全性算法步骤(1)设置工作向量工作向量Work。它表示系统可提供进程继续运行所需要的各类资源数目,执行安全算法开始时,Work=Available;定义判断一个进程是否执行完毕的方法:boolean isFinished()。(2)从进程集合中找到一个能满足下
4、述条件的进程:process.isFinished()返回值为true.Need=Work如找到,执行步骤(3);否则,执行步骤(4)。(3)当进程P获得资源后,可顺利执行,直至完成,并释放出分配给它的资源,故应执行:Work=Work+Allocation;Allocation += Need; 转向步骤(2)。(4)如果所有进程的均执行完毕即isAllFinished()返回值为true,则表示系统处于安全状态;否则,系统处于不安全状态。34数据结构:34. 1主要用到的数据结构:(1) 保存进程最大资源需求量的矩阵: int _maxNeed(2) 保存进程已分配资源量的矩阵: int
5、_allocated(3) 保存进程标识符的字符串:String _id(4) 保存系统中各资源总数的矩阵:int _totalResource(5) 表示申请资源的进程队列:ArrayList _processes(6) 表示系统资源种类数的整数:int _resourceClassCount(7) 存储执行信息:StringBuffer _executeInfo34. 2程序模块: 代表进程的类:Process.java代表银行家算法的类:BankerAlgorithm.java算法的主界面:BankerUI.java34. 3各模块间的调用关系:BankerUI是程序执行的主界面,输入系
6、统资源种类数之后,其通过程序随机生成进程数量(10)、资源种类(3)、每类资源总数量(3)、进程的申请资源的数量(0)、已分配资源的数量、可用资源数量等。其中所用针对系统进程和资源的操作均需要调用类BankerAlgorithm的方法。3.5主要函数的核心代码:1. 进行初始化输入的函数2. 打印输出的函数3. 利用安全性算法进行检测的函数4. 进行资源分配的函数5. 利用行家算法进行判定的函数 注:具体代码请见附录源程序清单。程序流程图:1、 系统主要过程流程图: 2、进程请求资源序列图 3、安全性算法序列图四、实验结果及分析和(或)源程序调试过程 4.1 主界面: 4.2点击“随机生成”按
7、钮,随机生成进程数量(10)、资源种类(3)、每类资源总数量(3)、进程的申请资源的数量(0)、已分配资源的数量、可用资源数量,并向系统中添加进程,显示进程的资源分配情况。 4.3点击“分配资源”按钮,检查系统是否安全,如果当前系统安全,则输出安全队列,并给第一个安全进程分配资源。若安全:若不安全,则“执行结果”提示框会提示:4.4点击“执行进程”按钮,执行已经分配资源的进程,并将其从队列中移除。4.5点击“分配资源”按钮,重新检测当前系统的安全,如果当前系统安全,则输出安全队列,并给第一个安全进程分配资源。4.6 此后重复4、5步,直至系统中的进程执行完毕:4.7 系统中此时已没有等待执行的
8、进程,若再点击“分配资源”按钮,则“执行结果”提示框中会提示:4.8 如果需要再进行模拟,则点击“重新生成”按钮,会重新生成进程,再重复前7步即可。4.9 如果模拟结束,可点击“退出”按钮,即可退出系统。 模拟结束。五、心得体会通过本次实验,我们对银行家算法有了更深的了解,理解了操作系统关于进程调度的一些方法,并通过编程实现了该算法。也进一步提高了我们的编程能力,从中学会了很多。附录:源程序清单1.主界面类BankerUI.javapublic class BankerUI extends JFrame implements ActionListener private static fina
9、l long serialVersionUID = -L;private JPanel panel;private JButton model;private JButton alloc;private JButton next;private JButton exit;private JTextField processNum;/ centerprivate JEditorPane resourcesInfo;private JEditorPane processesInfo; / 用html格式显示进程需要资源个数.private JTextArea result;private JSpl
10、itPane splitCenter;private JPanel east;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
11、 = null;/ 需求矩阵static int totalSour = null; 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.pri
12、ntStackTrace(); catch (IllegalAccessException 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
13、= new JEditorPane(text/html, ); / 以html格式显示进程信息.processesInfo.setEditable(false);JSplitPane splitInfo = new JSplitPane(JSplitPane.VERTICAL_SPLIT);splitInfo.add(new JScrollPane(resourcesInfo), JSplitPane.TOP);splitInfo.add(new JScrollPane(processesInfo), JSplitPane.BOTTOM);splitInfo.setBorder(BorderF
14、actory.createTitledBorder(系统信息);splitInfo.setOneTouchExpandable(true);result = new JTextArea(5, 30);result.setEditable(false);result.setWrapStyleWord(true); / 按单词换行,即所有单词都不会打断.result.setLineWrap(true); / 换行.JScrollPane textScroll = new JScrollPane(result);textScroll.setBorder(BorderFactory.createTit
15、ledBorder(执行结果);splitCenter = 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);p
16、anel.setSize(800, 700);/ 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 JBu
17、tton(退出);exit.addActionListener(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.setFo
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 资源 分配 管理 银行家 算法 实验 报告 25
限制150内