操作系统实验报告-利用银行家算法避免死锁 .docx

上传人:Q****o 文档编号:13058607 上传时间:2022-04-27 格式:DOCX 页数:27 大小:527.71KB
返回 下载 相关 举报
操作系统实验报告-利用银行家算法避免死锁 .docx_第1页
第1页 / 共27页
操作系统实验报告-利用银行家算法避免死锁 .docx_第2页
第2页 / 共27页
点击查看更多>>
资源描述

《操作系统实验报告-利用银行家算法避免死锁 .docx》由会员分享,可在线阅读,更多相关《操作系统实验报告-利用银行家算法避免死锁 .docx(27页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、精品名师归纳总结电脑操作系统试验报告题目利用银行家算法防止死锁一、 试验目的:1 、加深明白有关资源申请、防止死锁等概念,并体会和明白死锁和防止死锁的详细实施方法。2 、要求编写和调试一个系统动态安排资源的简洁模拟程序,观看死锁产生的条件,并采纳银行家算法,有效的防止和防止死锁的发生。可编辑资料 - - - 欢迎下载精品名师归纳总结二、试验内容:用银行家算法实现资源安排:设计五个进程 p0,p1,p2,p3,p4共享三类资源 A,B,C 的系统, 例如, A,B,C 的资源数量分别为 10,5,7。进程可动态的申请资源和释放资源, 系统按进程的申请动态的安排资源,要求程序具有显示和打印各进程的

2、某一个时刻的资源安排表和安全序列。显示和打印各进程依次要求申请的资源号以及为某进程安排资源后的有关资源数据。三、问题分析与设计:1、算法思路:先对用户提出的恳求进行合法性检查, 即检查恳求是否大于需要的,是否大于可利用的。假设恳求合法,就进行预安排,对安排后的 状态调用安全性算法进行检查。假设安全,就安排。假设担心全,就 拒绝申请,复原到原先的状态,拒绝申请。2、银行家算法步骤:1假如 Requesti or =Need, 就转向步骤 2 。否就,认为出错,由于它所需要的资源数已超过它所宣布的最大值。2假如 Requestor=Available,就转向步骤 3。否就,表示系统中尚无足够的资源

3、,进程必需等待。3系统摸索把要求的资源安排给进程Pi, 并修改下面数据结构中的数值:Available=Available-Requesti;可编辑资料 - - - 欢迎下载精品名师归纳总结Allocation=Allocation+Request; Need=Need-Request;4系统执行安全性算法,检查此次资源安排后,系统是否处于安全状态。3、安全性算法步骤:1设置两个向量工作向量 Work。它表示系统可供应进程连续运行所需要的各类资源数目,执行安全算法开头时, Work=Allocation;布尔向量 Finish 。它表示系统是否有足够的资源安排给进程, 使之运行完成,开头时先做

4、 Finishi=false ,当有足够资源安排给进程时,令 Finishi=true 。2从进程集合中找到一个能满意下述条件的进程:Finishi=false Needor=Work如找到,执行步骤 3。否就,执行步骤 4。3当进程 P 获得资源后,可顺当执行,直至完成,并释放出安排给它的资源,故应执行:Work=Work+Allocation; Finishi=true;转向步骤 2。4假如全部进程的 Finishi=true,就表示系统处于安全状态。 否就,系统处于担心全状态。可编辑资料 - - - 欢迎下载精品名师归纳总结4、流程图:系统主要过程流程图银行家算法流程图可编辑资料 - -

5、 - 欢迎下载精品名师归纳总结安全性算法流程图可编辑资料 - - - 欢迎下载精品名师归纳总结5、主要数据结构假设有 M个进程 N类资源,就有如下数据结构:int maxM*N M个进程对 N 类资源的最大需求量int availableN系统可用资源数int allocatedM*N M个进程已经得到 N类资源的资源量int needM*N M个进程仍需要 N类资源的资源量int worked系统供应应进程连续运行所需的各类资源数目可编辑资料 - - - 欢迎下载精品名师归纳总结四、 源代码import java.awt.*; import javax.swing.*; import jav

6、a.util.*; import java.awt.event.*;import javax.swing.border.*;public class OsBanker extends JFrame /界面设计JLabel labelInfo;JLabel labelInfo1;int resourceNum, processNum; int count = 0;JButton buttonRequest, buttonSetInit, button, button1, buttonsearch,button2; JTextField tf1, tf2;JTextField textAvaila

7、ble; JTextField textAllocation; JTextField textNeed; JTextField textProcessName; JTextField textRequest;int available; int max;int need;int allocated;int SafeSequence; int request; boolean Finish;int worked; boolean flag = false; JFrame f1;JFrame f2;JFrame f3;JTextArea jt;void display Border border

8、= BorderFactory.createLoweredBevelBorder;Border borderTitled= BorderFactory.createTitledBorderborder, 按钮区 ; textAvailable = new JTextField5;textAllocation = new JTextField65; textNeed = new JTextField65; textProcessName = new JTextField; textProcessName.setEnabledfalse; textRequest = new JTextField5

9、;tf1 = new JTextField20;可编辑资料 - - - 欢迎下载精品名师归纳总结tf2 = new JTextField20;labelInfo = new JLabel请先输入资源个数和进程个数16,后单击确定 ; JPanel contentPane;contentPane = JPanel this.getContentPane; contentPane.setLayoutnull; contentPane.setBackgroundColor.pink; labelInfo.setBounds50, 10, 300, 40; labelInfo.setOpaquetru

10、e; labelInfo.setForegroundColor.red; labelInfo.setBackgroundColor.pink; contentPane.addlabelInfo, null;JLabel b1 = new JLabel资源个数 :;b1.setForegroundColor.blue;JLabel b2 = new JLabel进程个数 :; b2.setForegroundColor.blue; b1.setBounds50, 80, 80, 30;contentPane.addb1, null; tf1.setBounds180, 80, 170, 30;

11、contentPane.addtf1, null; b2.setBounds50, 150, 80, 30; contentPane.addb2, null; tf2.setBounds180, 150, 170, 30; contentPane.addtf2, null;button1 = new JButton确定; button = new JButton重置 ; button1.setBounds80, 200, 80, 30;contentPane.addbutton1, null; button.setBounds220, 200, 80, 30; contentPane.addb

12、utton, null; this.setSize400, 300; this.setResizablefalse;this.setTitle银行家算法 SXJ;this.setLocationRelativeTonull; this.setDefaultCloseOperationEXIT_ON_CLOSE; this.setVisibletrue;f1 = new JFrame;labelInfo1 = new JLabel请先输入最大需求和安排矩阵,然后单击初始化; JPanel contentPane1;contentPane1 = JPanel f1.getContentPane;

13、contentPane1.setLayoutnull; contentPane1.setBackgroundColor.pink; labelInfo1.setOpaquetrue; labelInfo1.setBounds75, 10, 400, 40;可编辑资料 - - - 欢迎下载精品名师归纳总结labelInfo1.setBackgroundColor.pink; labelInfo1.setForegroundColor.blue; contentPane1.addlabelInfo1, null;JLabel labelAvailableLabel = new JLabelAllR

14、esource:; JLabel labelNeedLabel = new JLabelMaxNeed:; JLabel labelAllocationLabel = new JLabelallocated:;JLabel labelRequestLabel = new JLabelrequest process:; labelNeedLabel.setBounds75, 90, 100, 20;/ x,y,width,height contentPane1.addlabelNeedLabel, null; labelAllocationLabel.setBounds75, 240, 100,

15、 20; contentPane1.addlabelAllocationLabel, null; labelAvailableLabel.setBounds75, 70, 100, 20; contentPane1.addlabelAvailableLabel, null; labelRequestLabel.setBounds75, 400, 100, 20; contentPane1.addlabelRequestLabel, null;JLabellabelProcessLabel1= new JLabel进程 1,new JLabel进程 2,new JLabel进程 3, new J

16、Label进程 4, new JLabel进程5,new JLabel进程 6 ;JLabellabelProcessLabel2= new JLabel进程 1,new JLabel进程2,new JLabel进程 3, new JLabel进程 4, new JLabel进程5,new JLabel进程 6 ;JPanel pPanel1 = new JPanel,pPanel2 = new JPanel,pPanel3 = new JPanel, pPanel4 = new JPanel;pPanel1.setLayoutnull; pPanel2.setLayoutnull;/* pP

17、anel4.setLayoutnull; pPanel4.setBounds440,120,90,270;* pPanel4.setBorderborderTitled;*/buttonSetInit = new JButton初始化 ; buttonsearch = new JButton检测安全性 ; button2 = new JButton重置; buttonRequest = new JButton恳求资源 ; buttonSetInit.setBounds420, 140, 100, 30; contentPane1.addbuttonSetInit, null; buttonse

18、arch.setBounds420, 240, 100, 30; contentPane1.addbuttonsearch, null; button2.setBounds420, 340, 100, 30;contentPane1.addbutton2, null; buttonRequest.setBounds420, 425, 100, 30; contentPane1.addbuttonRequest, null;for int pi = 0; pi 6; pi+ 可编辑资料 - - - 欢迎下载精品名师归纳总结labelProcessLabel1pi.setBounds0, 0 +

19、pi * 20, 60, 20;labelProcessLabel2pi.setBounds0, 0 + pi * 20, 60, 20;pPanel1.setBounds75, 120, 60, 120;pPanel2.setBounds75, 270, 60, 120;for int pi = 0; pi 6; pi+ pPanel1.addlabelProcessLabel1pi, null; pPanel2.addlabelProcessLabel2pi, null;contentPane1.addpPanel1; contentPane1.addpPanel2; contentPan

20、e1.addpPanel4; for int si = 0; si 5; si+for int pi = 0; pi 6; pi+ textNeedpisi = new JTextField; textNeedpisi.setBounds150 + si * 50, 120 + pi * 20, 50, 20; textNeedpisi.setEditablefalse;textAllocationpisi = new JTextField; textAllocationpisi.setBounds150 + si * 50, 270 + pi * 20,50, 20;textAllocati

21、onpisi.setEditablefalse;for int si = 0; si 5; si+ textAvailablesi = new JTextField; textAvailablesi.setEditablefalse;textAvailablesi.setBounds150 + si * 50, 70, 50, 20; textRequestsi = new JTextField; textRequestsi.setEditablefalse; textRequestsi.setBounds150 + si * 50, 430, 50, 20; contentPane1.add

22、textAvailablesi, null; contentPane1.addtextRequestsi, null;for int pi = 0; pi 6; pi+for int si = 0; si 5; si+ contentPane1.addtextNeedpisi, null; contentPane1.addtextAllocationpisi, null;textProcessName.setBounds80, 430, 50, 20; contentPane1.addtextProcessName, null; f1.setSize550, 500;可编辑资料 - - - 欢

23、迎下载精品名师归纳总结化按钮 ;f1.setResizablefalse;f1.setTitle银行家算法 SXJ; f1.setLocationRelativeTonull; f1.setDefaultCloseOperationEXIT_ON_CLOSE;/ f1.setVisibletrue;f1.setVisiblefalse;f2 = new JFrame安全序列显示框 ; jt = new JTextArea75, 40; jt.setBackgroundColor.pink; jt.setForegroundColor.blue;JScrollPane scrollPane =

24、new JScrollPanejt; /加滚动条scrollPane.setBorderBorderFactory.createLoweredBevelBorder;/边界f2.getContentPane.addscrollPane; f2.setSize450, 400; f2.setResizablefalse;f2.setDefaultCloseOperationEXIT_ON_CLOSE; f2.setVisiblefalse; buttonSetInit.setEnabledfalse; buttonRequest.setEnabledfalse; buttonsearch.set

25、Enabledfalse; button1.addActionListenernew ActionListener public void actionPerformedActionEvent e /labelInfo.setText请先初始化 allocated和 Maxneed,后单击初始f1.setVisibletrue; buttonSetInit.setEnabledtrue;resourceNum = Integer.parseInttf1.getText; processNum = Integer.parseInttf2.getText; for int i = 0; i pro

26、cessNum; i+ for int j = 0; j resourceNum; j+ textNeedij.setEditabletrue; textAllocationij.setEditabletrue; textAvailablej.setEditabletrue;可编辑资料 - - - 欢迎下载精品名师归纳总结;buttonSetInit.addActionListenernew ActionListener public void actionPerformedActionEvent e Init; buttonsearch.setEnabledtrue;buttonsearch

27、.addActionListenernew ActionListener 可编辑资料 - - - 欢迎下载精品名师归纳总结public void actionPerformedActionEvent e count = 0;SafeSequence = new intprocessNum; worked = new intresourceNum;Finish = new booleanprocessNum;copyVectorworked, available; Safety0;jt.append安全序列数量: + count;if flag labelInfo1.setText当前系统状态:

28、安全 ; f2.setVisibletrue; buttonRequest.setEnabledtrue; textProcessName.setEnabledtrue;for int i = 0; i resourceNum; i+ textRequesti.setEditabletrue; else labelInfo1.setText当前系统状态:担心全;buttonSetInit.setEnabledfalse;buttonRequest.addActionListenernew ActionListener public void actionPerformedActionEvent

29、 e count = 0;for int i = 0; i processNum; i+ Finishi = false;jt.setText; flag = false;RequestResource;button2.addActionListenernew ActionListener public void actionPerformedActionEvent e /* tf1.setText; tf2.setText;*/ f2.setVisiblefalse; jt.setText;for int i = 0; i processNum; i+ 可编辑资料 - - - 欢迎下载精品名

30、师归纳总结for int j = 0; j resourceNum; j+ textNeedij.setText;textAllocationij.setText; textAvailablej.setText; textRequestj.setText;/ textNeedij.setEditablefalse;/ textAllocationij.setEditablefalse;/ textAvailablej.setEditablefalse; textRequestj.setEditablefalse; textProcessName.setText; Finishi = false

31、;可编辑资料 - - - 欢迎下载精品名师归纳总结;flag = false; buttonsearch.setEnabledfalse;/ labelInfo.setText请先输入资源个数和进程个数,后单击确定;可编辑资料 - - - 欢迎下载精品名师归纳总结button.addActionListenernew ActionListener public void actionPerformedActionEvent e tf1.setText;tf2.setText; f2.setVisiblefalse; jt.setText;flag = false;void copyVector

32、int v1, int v2 for int i = 0; i v1.length; i+v1i = v2i;void Addint v1, int v2 for int i = 0; i v1.length; i+ v1i += v2i;void Subint v1, int v2 for int i = 0; i v1.length; i+可编辑资料 - - - 欢迎下载精品名师归纳总结v1i -= v2i;boolean Smallerint v1, int v2 boolean value = true;for int i = 0; i v2i value = false;break;

33、return value;public static void mainString args OsBanker ob = new OsBanker; ob.display;/ System.out.println +count;void Init /初始化操作矩阵available = new intresourceNum; for int i = 0; i resourceNum; i+ availablei = Integer.parseInttextAvailablei.getText;max = new intprocessNumresourceNum; allocated = ne

34、w intprocessNumresourceNum; need = new intprocessNumresourceNum;for int i = 0; i processNum; i+ for int j = 0; j resourceNum; j+ maxij = Integer.parseInttextNeedij.getText; allocatedij = Integer.parseInttextAllocationij.getText;for int i = 0; i resourceNum; i+for int j = 0; j processNum; j+ needji =

35、 maxji - allocatedji;for int i = 0; i resourceNum; i+for int j = 0; j processNum; j+ availablei -= allocatedji;if availablei 0 labelInfo.setText您输入的数据有误, 请重新输入 ;可编辑资料 - - - 欢迎下载精品名师归纳总结void Safetyint n /查找全部安全序列if n = processNum count+;for int i = 0; i processNum; i+ jt.append进程 + SafeSequencei + 1

36、+ ;jt.appendn;flag = true; return;for int i = 0; i processNum; i+ if Finishi = false boolean OK = true;for int j = 0; j workedj OK = false; break;if OK for int j = 0; j resourceNum; j+ workedj += allocatedij;Finishi = true; SafeSequencen = i; Safetyn + 1; Finishi = false;SafeSequencen = -1;/ num+;fo

37、r int j = 0; j resourceNum; j+ workedj -= allocatedij;可编辑资料 - - - 欢迎下载精品名师归纳总结void RequestResource /恳求资源jt.setText;int processname = Integer.parseInttextProcessName.getText - 1; request = new intresourceNum;for int i = 0; i resourceNum; i+ requesti = Integer.parseInttextRequesti.getText;if .Smallerr

38、equest, needprocessname labelInfo.setText资源恳求不符该进程的需求量.; else if .Smallerrequest, available labelInfo1.setText可用资源不足以满意恳求, 进程需要等待 .; else Subavailable, request; Addallocatedprocessname, request; Subneedprocessname, request; copyVectorworked, available; Safety0;if flag labelInfo1.setText可立刻安排给该进程 .;可

39、编辑资料 - - - 欢迎下载精品名师归纳总结; else labelInfo1.setText安排后导致系统处于担心全状态., 不行立刻安排Addavailable, request; Suballocatedprocessname, request; Addneedprocessname, request;可编辑资料 - - - 欢迎下载精品名师归纳总结/ 五、试验结果:初始界面:可编辑资料 - - - 欢迎下载精品名师归纳总结初始化:检测安全性:可编辑资料 - - - 欢迎下载精品名师归纳总结恳求资源:1进程 21,0,2可编辑资料 - - - 欢迎下载精品名师归纳总结2进程 53,3,0可编辑资料 - - - 欢迎下载精品名师归纳总结3进程 10,2,0六、 遇到的问题及不足之处:1、程序编写的时候规定最大资源数和最大进程数均=6。2、程序直接初始化了6 个进程框,既铺张了内存空间,又对可视化界面的美观造成影响。3、未对输入反常进行处理:比方在恳求资源的第一个方框中只能填入进程的数字编号,当填入的为非整数时,程序会抛出反常。4、未解决进程名中对字符串的处理,直接固定进程名为数字, 用户不能直接输入原有的进程名,造成不好的用户体验。可编辑资料 - - - 欢迎下载

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 技术总结

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁