模拟银行家算法实现死锁避免_第1页
模拟银行家算法实现死锁避免_第2页
模拟银行家算法实现死锁避免_第3页
模拟银行家算法实现死锁避免_第4页
模拟银行家算法实现死锁避免_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、实用标准文案?操作系统?课程设计报告院系:计算机与信息工程学院题目:模拟银行家算法实现死锁预防学生姓名:学生学号:专业班级:指导教师:完成时间:2022年9月6日精彩文档实用标准文案评分表:课题名称指导教师评语成绩评定姓名成绩学号日期年月日精彩文档实用标准文案目录题目:模拟银行家算法实现死锁预防1评分表:2一课程设计目的5二课程设计内容5三课程设计环境.6四课程设计步骤641.需求分析61.1.1.问题的提出61.1.2银行家算法原理61.1.3银行家算法详细解析71.1.4银行平安性算法目的.84.2概要设计84.2.1.功能模块设计如下:.84.2.2功能模块描述94.3详细设计94.3.

2、1.根本数据结构的设计94.3.2算法的设计10精彩文档实用标准文案五课程设计结果115.1运行结果115.2测试分析14六课程设计心得与体会14总结14七参考文献15八程序清单168.1操作主界面代码:168.2功能实现代码:19精彩文档实用标准文案一课程设计目的在熟练掌握死锁发生原理和解决死锁问题的根底上,利用一种程序设计语言模拟实现利用银行家算法实现死锁预防,一方面加深对原理的理解,另一方面提升学生通过编程根据已有原理解决实际问题的水平,为学生将来进行系统软件开发和针对实际问题提出高效的软件解决方案打下根底.二课程设计内容模拟实现银行家算法对系统资源进行分配,以预防死锁的出现.本课题肯定

3、不可能实现对实际操作系统的资源治理,而是通过对模拟资源数据的处理,检测银行家算法在预防死锁出现的作用.银行家算法描述:第一局部:银行家算法扫描1 .如果Request=Need,那么转向2;否贝U,出错2.如果Request=Available,那么转向3,否那么等待3.系统试探分配请求的资源给进程4.系统执行平安性算法第二局部:平安性算法1.设置两个向量(1).工作向量:Work=Available表示系统可提供应进程继续运行所需要的各类资源数目(2).Finish:表示系统是否有足够资源分配给进程True:有;False:没有.初始化为False2.假设Finishi=False&Need

4、=Work,那么执行3;否那么执行4i为资源类别精彩文档实用标准文案3.进程P获得第i类资源,那么顺利执行直至完成,并释放资源:Work=Work+Allocation;Finishi=true;转2请充分理解以上银行家算法描述的核心思想.详细银行家算法描述见p95三课程设计环境Windows操作系统java语言eclipse编程工具四课程设计步骤4141.需求分析.1问题的提由银行家算法是一种最有代表性的预防死锁的算法.在预防死锁方法中允许进程动态地申请资源,但系银行家算法统在进行资源分配之前,应先计算此次分配资源的平安性,假设分配不会导致系统进入不平安状态,那么分配,否那么

5、等待.为实现银行家算法,系统必须设置假设干数据结构.要解释银行家算法,必须先解释操作系统平安状态和不平安状态..2银行家算法原理我们可以把操作系统看作是银行家,操作系统治理的资源相当于银行家管精彩文档实用标准文案理的资金,进程向操作系统请求分配资源相当于用户向银行家贷款.为保证资金的平安,银行家规定:(1)当一个顾客对资金的最大需求量不超过银行家现有的资金时就可接纳该顾客;(2)顾客可以分期贷款,但贷款的总数不能超过最大需求量;(3)当银行家现有的资金不能满足顾客尚需的贷款数额时,对顾客的贷款可推迟支付,但总能使顾客在有限的时间里得到贷款;(4)当顾客得到所需的全部资金后,一定

6、能在有限的时间里归还所有的资金操作系统根据银行家制定的规那么为进程分配资源,当进程首次申请资源时,要测试该进程对资源的最大需求量,如果系统现存的资源可以满足它的最大需求量那么按当前的申请量分配资源,否那么就推迟分配.当进程在执行中继续申请资源时,先测试该进程本次申请的资源数是否超过了该资源所剩余的总量.假设超过那么拒绝分配资源,假设能满足那么按当前的申请量分配资源,否那么也要推迟分配..3银行家算法详细解析1、平安性算法:确定计算机系统是否处于平安状态的算法分为如下几步:(1)设置两个工作向量Work=AVAILABLE;FINISH(2)从进程集合中找到一个满足下述条件的进程

7、,FINISH=false;NEED=Work;如找到,执行(3);否那么,执行(4)(3)设进程获得资源,可顺利执行,直至完成,从而释放资源.Work+=ALLOCATION;Finish=true;GOTO2(4)如所有的进程Finish=true,那么表示平安;否那么系统不平安.2、资源请求算法:设进程k提出请求request.,那么银行家算法按如下规那么进行判断(1)如果requestki=need米i,那么转(2);否WJ,出错.(2)如果requestki=avaliableki,那么转(3);否出错(3)系统试探分配资源,修改相关数据:精彩文档实用标准文案availablei-=

8、requestki;availableki+=requestki;needki-=requestki;(4)系统执行平安性检查,如平安,那么分配成立;否那么试探险性分配作废,系统恢复原状,进程等待..4银行平安性算法目的银行家算法是一种最有代表性的预防死锁的算法.在预防死锁方法中允许进程动态地申请资源,但系统在进行资源分配之前,应先计算此次分配资源的平安性,假设分配不会导致系统进入不平安状态,那么分配,否那么等待.4.2概要设计.1功能模块设计如下:图4.2.1:程序功能模块设计图精彩文档实用标准文案输入系统进程数输入资源类型数操作主界面进入操作界面平安性检测资

9、源请求检测.2功能模块描述第一局部:银行家算法1 .如果Request=Need那么转向2;否那么,出错2.如果Request=AvailableW转向3,否那么等待3.系统试探分配请求的资源给进程4.系统执行平安性算法第二局部:平安性算法1.设置两个向量(1).工作向量:Work=Available俵示系统可提供应进程继续运行所需要的各类资源数目(2).Finish表示系统是否有足句资源分配给进程True有;False没有.初始化为False2.假设Finishi=False&Need=WorkW执行3;否那么执行4i为资源类别3.进程P获得第i类资源,那么顺利执行直至完成,

10、并释放资源:Work=Work+Allocation;Finishi=true;转24.3详细设计.1根本数据结构的设计staticinttatoaln;/总资源数staticintavaliable;/可利用资源数staticintallocation;/已用资源数staticintmax;/最大资源需求staticintneed;/还需的各种资源数staticintrequest叩;/请求资源数精彩文档实用标准文案.2算法的设计银行家平安性算法思路:图4.3.2:银行家平安性算法流程图精彩文档实用标准文案五课程设计结果5.1运行结果(1)主界面邑银行家箕法.

11、一|=叵I一二;一I图5.1-1:操作主界面(2)输入系统进程数为5、系统资源类型数为3银行家算法算法演示结果如下:精彩文档实用标准文案强行家置法川回Ifn.isV s2: s3: s4 s5:poQpoQ0 0Q Q0 00 0plpl:0 00 0Q Q0 0口=p2t0p2t00 00 00 0p3:0p3:00 0D D0 00 0p4:0p4:0Q Q0 00 00 0二精彩文档Index51s2:S3:s4S5:milmil:101010101010IDID1010lin.sV.s2S3:s4 s5:pO5pO55 555 5SPh5Ph55S5 5sIp2-5555p$5p$55

12、55 55p4:5p4:55555ininsis2;亘S4:s5:1poopoo0 00 00 00 0P P1 1-0-00 00 00 0Jp2ip2i 0 00 00 0D Dp3:p3: 0 00 00 00 0up4:0p4:00_0_0 00 00 0图5.1-2:实现主要功能界面图5.1-3:输入系统总资源数的表格图5.1-4:输入已用资源数的表格实用标准文案图5.1-4:输入最多资源输表格图5.1-5:输入请求资源数表格图5.1-6:系统平安状态检测tatoal:精彩文档实用标准文案图5.1-7:资源请求平安检测5.2测试分析经过几次测试下来,发现对于一些根本的操作已经没什么问

13、题,但如果牵涉的复杂的问题,里面就出现了很多缺点和缺乏了.从测试用的数据来看,基本上可以选择随意输入系统的进程数和系统的资源类型数以及系统每种资源的最大数量了,但由于测试的数据有限而且牵涉面也不是很广,很多问题可能没有测试出来,存在的一些技术问题还需要进一步改善.六课程设计心得与体会总结操作系统课程设计下来,感觉自己有很大的进步,特别是在对操作系统相关知识的理解方面,许多在以前一直没有弄明白的地方,现在通过自己编写程序,一步步下来,一步步掌握了更多的知识.这次课程设计下来,我的体会和感觉主要表达在这几方面:1.感觉这一次课程设计是花了许多心血,翻看课本,查找资料,把许多遗忘了的东西都重拾脑海,

14、每天在宿舍,自己给自己安排好了方案,一步步执行下精彩文档实用标准文案来,所以课程设计的一个星期,感觉过得很充实,心情也很不错,在这样累积下来,自己亲自完全实现功能出来,感觉很兴奋.2.在编程实现的过程中,自己也发现了不少的问题,自己感觉很容易的东西却总是出错,而且都是比拟低级的错误,感觉很多东西看起来很简单,但在实际编程实现的时候却需要注意各种细节,需要耐心细致,实际编程中遇到一些细节上的小问题确实需要仔细考虑才行.3.由于银行家算法牵涉的很多要输入的数,所以定义了很多个数组来存放,结果是由于数据太多,时常发生混淆,出了不少的错误,而且不容易找出来,感觉很头疼.4.为了实现银行家算法,我把课本

15、上的知识进行了全面的复习,在理解的根底上,再在网上搜索资料,进一步掌握了相关知识之后,才开始着手编写程序,通过银行家算法的平安性算法和资源请求算法的实现,对死锁也有更深一层的了解.使我对操作系统特别是死锁预防这一局部的熟悉有了很大的加深.5.课程设计下来,我对操作系统理解更为全面了,并感觉里面有太多的知识需要去掌握,也深深体会的操作系统方面知识的重要性,进而感觉的自己这方面知识的严重缺乏.6.最后总体感觉这一次课程设计,时间比拟充足,并且也是由自己自由发挥,自己的扩展空间也更大了,有了这样一次课程设计时机,给我带来了很多意想不到的收获.七参考文献1 .【美国】PeterBaerGalvin等编

16、著郑扣根【译】操作系统概念.第七版北京:高等教育出版社.2022.2.张尧学编著.计算机操作系统教程习题解答与实验指导.北京: 清华大学出版社.2000.3.叶核亚编著陈道蓄主审.java程序设计实用教程.第三版北京: 电子工业出版社精彩文档实用标准文案八程序清单8.1操作主界面代码:importjava.awt.Color;publicclassOperatingFrameextendsJFrameimplementsActionListener,CaretListener/*银行家算法*paramargs*/publicstaticStringdata=0,0;publicJButtonb

17、ut=newJButton(确定)newJButton(退出);publicJTextFieldtextField=newJTextField(5,10),newJTextField(3,10);publicOperatingFrame()super(银行家算法);this.setLayout(null);this.setBounds(530,340,405,295);this.setDefaultCloseOperation(3);this.setIconImage(getToolkit().getImage(images/wbto20220516223525.jpg);.URLurl=th

18、is.getClass().getClassLoader().getResource(images/egs.jpg);for(inti=0;itextField.length;i+)精彩文档实用标准文案(textFieldi.setForeground(Color.blue);textFieldi.setFont(newFont(华文楷体,1,25);textFieldi.setBounds(40+160,100+55*i,50,20);textFieldi.addCaretListener(this);this.add(textFieldi);)儿abellab=newJLabel(系统进程

19、数:),newJLabel(资源类型数:),new数abel(靖输入信息);for(inti=0;ilab.length;i+)labi.setHorizontalAlignment(JLabel.RIGHT);labi.setForeground(Color.blue);labi.setFont(newFont(华文楷体,1,25);labi.setBounds(40,100+55*i,150,20);this.add(labi);for(inti=0;ibut.length;i+)buti.setHorizontalAlignment(JLabel.RIGHT);buti.setForeg

20、round(Color.blue);buti.setFont(newFont(华文楷体,1,10);buti.setBounds(170+i*100,220,60,20);buti.addActionListener(this);this.add(buti);精彩文档实用标准文案lab2.setBounds(100,20,150,30);JLabellabel=newJLabel();label.setIcon(newImageIcon(url);label.setBounds(0,0,400,270);this.add(label);this.setVisible(true);publics

21、taticvoidmain(Stringargs)newOperatingFrame();publicvoidactionPerformed(ActionEvente)if(e.getSource()=but0)newOperatingStep1();this.dispose();if(e.getSource()=but1)this.dispose();publicvoidcaretUpdate(CaretEvente)data0=textField0.getText();精彩文档实用标准文案data1=textField1.getText();8.2功能实现代码:importjava.awt

22、.Color;importjava.awt.Font;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjavax.swing.ImageIcon;importjavax.swing.JButton;importjavax.swing.JFrame;importjavax.swing.JLabel;importjavax.swing.JOptionPane;importjavax.swing.JScrollPane;importjavax.swing.JTable;importjavax.swi

23、ng.event.TableModelListener;importjavax.swing.table.TableModel;publicclassOperatingStep1extendsJFrameimplementsActionListener/*银行家算法*paramargs*/精彩文档实用标准文案publicstaticintm=Integer.parseInt(OperatingFrame.data0);系统进程输publicstaticintn=Integer.parseInt(OperatingFrame.data1);/系统资源类型publicstaticinttatoal=

24、newintn;/总资源数publicstaticintavaliable=newintn;/可利用资源数publicstaticintallocation=newintmn;/已用资源数publicstaticintmax=newintmn;/最大资源需求publicstaticintneed=newintmn;/还需的各种资源数publicstaticintneedi=newintn;/平安性计算用publicstaticintrequest=newintmn;/请求资源数publicstaticintrequests=newintn;publicstaticintwork=newintn

25、;/平安性计算用publicstaticbooleanfilished=newbooleanm;/平安性计算用;publicObjectdata1=newObject1n+1;/表格里面数据publicObjectdata2=newObject40n+1;publicObjectdata3=newObject40n+1;publicObjectdata4=newObject40n+1;publicJButtonbut=newJButton(后退),newJButton(确定),newJButton(安检)newJButton(Request),newJButtonC退出);/按钮声明/priv

26、ateObjecttitle1=Index,Allocation,Max,Work,Filshed;/privateObjecttitle2=班次,姓名,性别,单位,身份证,舱类别;publicstaticJTabletable1,table2,table3,table4;/S格声明publicOperatingStep1()super(银行家算法);this.setLayout(null);精彩文档实用标准文案this.setBounds(530,340,605,295);this.setDefaultCloseOperation(3);this.setIconImage(getToolki

27、t().getImage(images/egs.jpg); 设置背皇乐.URLurl=this.getClass().getClassLoader().getResource(images/dabe.jpg);/System.out.println(m);/System.out.println(n);for(inti=0;i=0;i+)/表格数据初始化for(intj=1;j=n;j+)data1ij=10;for(inti=0;im;i+)for(intj=1;j=n;j+)data2ij=0;for(inti=0;im;i+)for(intj=1;j=n;j+)data3ij=5;精彩文档

28、实用标准文案)for(inti=0;im;i+)(for(intj=1;j=n;j+)data4ij=0;)/四个表格Stringtitle1=newStringn+1;/表格一title10=Index;for(inti=1;i=n;i+)title1i=s+i+:;)table1=newJTable(data1,title1);/table2.getColumnModel().getColumn(4).setPreferredWidth(100);table1.getTableHeader().setReorderingAllowed(false);/不可整列移动table1.getTab

29、leHeader().setResizingAllowed(false);不可拉动表格Objectobj1=tatoal:;table1.setValueAt(obj1,0,0);table1.setRowHeight(15);table1.setBackground(Color.orange);table1.setForeground(Color.black);table1.setEditingColumn(1);/table2.setEnabled(true);精彩文档实用标准文案table1.setFont(newFont(华文楷体,1,12);JScrollPanejs1=newJSc

30、rollPane(tablel);js1.setBounds(220,10,300,35);this.add(js1);Stringtitle2=newStringn+1;/表格二title20=Index;for(inti=1;i=n;i+)title2i=s+i+:;table2=newJTable(data2,title2);/table2.getColumnModel().getColumn(4).setPreferredWidth(100);table2.getTableHeader().setReorderingAllowed(false);/不可整列移动table2.getTab

31、leHeader().setResizingAllowed(false);不可拉动表格Objectobj2=newObjectm;for(inti=0;im;i+)obj2i=p+i+:;table2.setValueAt(obj2i,i,0);table2.setRowHeight(15);table2.setBackground(Color.orange);table2.setForeground(Color.black);table2.setEditingColumn(1);/table2.setEnabled(true);精彩文档实用标准文案table2.setFont(newFont

32、(华文楷体,1,12);JScrollPanejs2=newJScrollPane(table2);js2.setBounds(35,100,150,100);this.add(js2);Stringtitle3=newStringn+1;/表格三title30=Index;for(inti=1;i=n;i+)title3i=s+i+:;/for(inti=0;ititle3.length;i+)/System.out.print(title3i+);table3=newJTable(data3,title3);/table1.getColumnModel().getColumn(4).set

33、PreferredWidth(100);table3.getTableHeader().setReorderingAllowed(false);不可整列移动table3.getTableHeader().setResizingAllowed(false);不可拉动表格Objectobj3=newObjectm;for(inti=0;im;i+)obj3i=p+i+:;table3.setValueAt(obj3i,i,0);table3.setRowHeight(15);table3.setBackground(Color.orange);table3.setForeground(Color.

34、black);table3.setEditingColumn(1);精彩文档实用标准文案/tablel.setEnabled(true);table3.setFont(newFont(华文楷体,1,12);JScrollPanejs3=newJScrollPane(table3);js3.setBounds(220,100,150,100);this.add(js3);Stringtitle4=newStringn+1;/表格四title40=Index;for(inti=1;i=n;i+)title4i=s+i+:;/for(inti=0;ititle4.length;i+)/System.

35、out.print(title4i+);table4=newJTable(data4,title4);/table1.getColumnModel().getColumn(4).setPreferredWidth(100);table4.getTableHeader().setReorderingAllowed(false);不可整列移动table4.getTableHeader().setResizingAllowed(false);不可拉动表格Objectobj4=newObjectm;for(inti=0;im;i+)obj4i=p+i+:;table4.setValueAt(obj4i

36、,i,0);table4.setRowHeight(15);table4.setBackground(Color.orange);table4.setForeground(Color.black);精彩文档实用标准文案table4.setEditingColumn(1);/tablel.setEnabled(true);table4.setFont(newFont(华文楷体,1,12);JScrollPanejs4=newJScrollPane(table4);js4.setBounds(400,100,150,100);this.add(js4);JLabellab=newJLabel(Al

37、location:),newJLabel(Max:),newJLabel(Request:),newJLabel(tatoal:);for(inti=0;ilab.length;i+)/四个标签labi.setHorizontalAlignment(JLabel.RIGHT);labi.setForeground(Color.blue);labi.setFont(newFont(华文楷体,1,25);labi.setBounds(30+i*150,70,150,20);this.add(labi);lab3.setBounds(50,20,150,30);for(inti=0;ibut.len

38、gth;i+)/四个按钮buti.setForeground(Color.blue);buti.setFont(newFont(华文楷体,1,10);buti.setBounds(80+i*100,230,75,20);buti.addActionListener(this);this.add(buti);/*精彩文档实用标准文案*获取初始化后表格里面的各个数据,并转化为int型*/for(inti=1;i=n;i+)tatoali-1=Integer.parseInt(String)table1.getValueAt(0,i);)for(inti=0;im;i+)for(intj=1;j=n

39、;j+)allocationij-1=Integer.parseInt(String)table2.getValueAt(i,j);)for(inti=0;im;i+)for(intj=1;j=n;j+)maxij-1=Integer.parseInt(String)table3.getValueAt(i,j);)for(inti=0;im;i+)for(intj=1;j=n;j+)requestij-1=Integer.parseInt(String)table4.getValueAt(i,j);)儿abellabel=newJLabel();/H片背景标签精彩文档实用标准文案label.s

40、etIcon(newImagelcon(url);label.setBounds(0,0,600,270);this.add(label);/table1.isCellEditable(0,0);this.setVisible(true);publicstaticvoidmain(String口args)newOperatingStep1();publicbooleanisCellEditable(introwIndex,intcolumnIndex)重写iscelleditable方法if(columnIndex!=1)returnfalse;elsereturntrue;publicvoi

41、dactionPerformed(ActionEvente)if(e.getSource()=but0)后退按钮newOperatingFrame();if(e.getSource()=but1)/数据保存按钮/*获取表格里面的各个数据,并转化为int*/for(inti=1;i=n;i+)tatoali-1=Integer.parseInt(String)table1.getValueAt(0,i);精彩文档实用标准文案for(intj=1;j=n;j+)allocationij-1=Integer.parseInt(String)table2.getValueAt(i,j);for(int

42、i=0;im;i+)for(intj=1;j=n;j+)maxij-1=Integer.parseInt(String)table3.getValueAt(i,j);)for(inti=0;im;i+)for(intj=1;j=n;j+)requestij-1=Integer.parseInt(String)table4.getValueAt(i,j);)intallocations=newintn;for(inti=0;in;i+)allocationsi=0;for(inti=0;in;i+)for(intj=0;jm;j+)allocationsi+=allocation皿i;/获取每种

43、资源被使用的总和)for(inti=0;in;i+)精彩文档实用标准文案avaliablei=tatoali-allocationsi;/avaliable赋初值/worki=avaliablei+allocation0i;/work赋初值)for(inti=0;in;i+)requestsi=0;)for(inti=0;in;i+)for(intj=0;jm;j+)requestsi+=requestji;/获取每种资源被请求的总和)for(inti=0;im;i+)for(intj=0;jn;j+)needij=maxij-allocationij;/求 得 所需资源数)for(inti=

44、0;i1;i+)for(intj=0;jn;j+)workj=avaliablej;)JOptionPane.showMessageDialog(this,保存成功! 请继续操作!);)if(e.getSource()=but2)平安检测按钮intcount=m;for(inti=0;im;i+)精彩文档实用标准文案filishedi=false;)for(inti=0;ifilished.length;i+)for(intj=0;jn;j+)needij=needij;System.out.print(needi:+needij);System.out.print(work:+workj);)if(filishedi=false&equals(needi,work)/for(intj=0;jneed

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论