模拟银行家算法实现死锁避免课程设计报告_第1页
模拟银行家算法实现死锁避免课程设计报告_第2页
模拟银行家算法实现死锁避免课程设计报告_第3页
模拟银行家算法实现死锁避免课程设计报告_第4页
模拟银行家算法实现死锁避免课程设计报告_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

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

文档简介

1、操作系统课程设计报告院 系:计算机与信息工程学院 题 目:模拟银行家算法实现死锁避免 评分表:课题名称指导教师评 语成绩评定姓 名成 绩学 号日期年 月 日目录题 目:模拟银行家算法实现死锁避免1评分表:2一 课程设计目的3二 课程设计内容3三 课程设计环境4四 课程设计步骤441.需求分析44.1.1 问题的提出44.1.2 银行家算法原理44.1.3银行家算法详细解析54.1.4 银行安全性算法目的64.2概要设计64.2.1 功能模块设计如下:64.2.2 功能模块描述74.3详细设计74.3.1基本数据结构的设计74.3.2算法的设计8五 课程设计结果95.1运行结果95.2测试分析1

2、2六 课程设计心得与体会12总结12七 参考文献13八 程序清单148.1 操作主界面代码:148.2 功能实现代码:17一 课程设计目的在熟练掌握死锁发生原理和解决死锁问题的基础上,利用一种程序设计语言模拟实现利用银行家算法实现死锁避免,一方面加深对原理的理解,另一方面提高学生通过编程根据已有原理解决实际问题的能力,为学生将来进行系统软件开发和针对实际问题提出高效的软件解决方案打下基础。二 课程设计内容模拟实现银行家算法对系统资源进行分配,以防止死锁的出现。本课题肯定不可能实现对实际操作系统的资源管理,而是通过对模拟资源数据的处理,检测银行家算法在防止死锁出现的作用。银行家算法描述:第一部分

3、:银行家算法(扫描)1如果request=need,则转向2;否则,出错2如果request=available,则转向3,否则等待3系统试探分配请求的资源给进程4系统执行安全性算法第二部分:安全性算法1.设置两个向量(1).工作向量:work=available(表示系统可提供给进程继续运行所需要的各类资源数目)(2).finish:表示系统是否有足够资源分配给进程(true:有;false:没有).初始化为false2.若finishi=false&need=work,则执行3;否则执行4(i为资源类别)3.进程p获得第i类资源,则顺利执行直至完成,并释放资源:work=work+allo

4、cation;finishi=true;转2请充分理解以上银行家算法描述的核心思想。(详细银行家算法描述见p95) 三 课程设计环境windows操作系统 java语言 eclipse编程工具四 课程设计步骤41.需求分析4.1.1 问题的提出银行家算法是一种最有代表性的避免死锁的算法。在避免死锁方法中允许进程动态地申请资源,但系银行家算法统在进行资源分配之前,应先计算此次分配资源的安全性,若分配不会导致系统进入不安全状态,则分配,否则等待。为实现银行家算法,系统必须设置若干数据结构。要解释银行家算法,必须先解释操作系统安全状态和不安全状态。 4.1.2 银行家算法原理我们可以把操作系统看作是

5、银行家,操作系统管理的资源相当于银行家管理的资金,进程向操作系统请求分配资源相当于用户向银行家贷款。 为保证资金的安全,银行家规定: (1) 当一个顾客对资金的最大需求量不超过银行家现有的资金时就可接纳该顾客; (2) 顾客可以分期贷款,但贷款的总数不能超过最大需求量; (3) 当银行家现有的资金不能满足顾客尚需的贷款数额时,对顾客的贷款可推迟支付,但总能使顾客在有限的时间里得到贷款; (4) 当顾客得到所需的全部资金后,一定能在有限的时间里归还所有的资金. 操作系统按照银行家制定的规则为进程分配资源,当进程首次申请资源时,要测试该进程对资源的最大需求量,如果系统现存的资源可以满足它的最大需求

6、量则按当前的申请量分配资源,否则就推迟分配。当进程在执行中继续申请资源时,先测试该进程本次申请的资源数是否超过了该资源所剩余的总量。若超过则拒绝分配资源,若能满足则按当前的申请量分配资源,否则也要推迟分配。4.1.3银行家算法详细解析1、安全性算法:确定计算机系统是否处于安全状态的算法分为如下几步:(1)设置两个工作向量work=available;finish (2)从进程集合中找到一个满足下述条件的进程, finish=false; need=work; 如找到,执行(3);否则,执行(4)(3)设进程获得资源,可顺利执行,直至完成,从而释放资源。 work+=allocation; fi

7、nish=true; goto 2 (4)如所有的进程finish= true,则表示安全;否则系统不安全。2、资源请求算法:设进程k提出请求requesti,则银行家算法按如下规则进行判断。 (1)如果request k i= needki,则转(2);否则,出错。 (2)如果request ki= avaliableki,则转(3);否则,出错。 (3)系统试探分配资源,修改相关数据: avaliable i-= request ki; avaliable ki+= request ki; needki-= request ki; (4)系统执行安全性检查,如安全,则分配成立;否则试探险性

8、分配作废,系统恢复原状,进程等待。 4.1.4 银行安全性算法目的 银行家算法是一种最有代表性的避免死锁的算法。在避免死锁方法中允许进程动态地申请资源,但系统在进行资源分配之前,应先计算此次分配资源的安全性,若分配不会导致系统进入不安全状态,则分配,否则等待。4.2概要设计操作主界面输入系统进程数4.2.1 功能模块设计如下:输入资源类型数进入操作界面输入allocation输入系统总资源数输入max(最大资源数)资源请求检测安全性检测图4.2.1:程序功能模块设计图4.2.2 功能模块描述第一部分:银行家算法1如果request=need,则转向2;否则,出错2如果request=avail

9、able,则转向3,否则等待3系统试探分配请求的资源给进程4系统执行安全性算法第二部分:安全性算法1.设置两个向量(1).工作向量:work=available(表示系统可提供给进程继续运行所需要的各类资源数目)(2).finish:表示系统是否有足够资源分配给进程(true:有;false:没有).初始化为false2.若finishi=false&need=work,则执行3;否则执行4(i为资源类别)3.进程p获得第i类资源,则顺利执行直至完成,并释放资源:work=work+allocation;finishi=true;转24.3详细设计4.3.1基本数据结构的设计static in

10、t tatoaln; /总资源数 static int avaliable;/可利用资源数static int allocation;/已用资源数 static int max;/最大资源需求static int need;/还需的各种资源数static int request;/请求资源数4.3.2算法的设计银行家安全性算法思路:对各进程、资源初始化开始进程pi申请资源是否满足申请条件no系统安全性检测正式分配资源yes安全不安全图4.3.2:银行家安全性算法流程图五 课程设计结果5.1运行结果(1)主界面 图5.1-1:操作主界面 (2)输入系统进程数为5、系统资源类型数为3银行家算法算法

11、演示结果如下: 图5.1-2:实现主要功能界面 图5.1-3:输入系统总资源数的表格 图5.1-4:输入已用资源数的表格 图5.1-4:输入最多资源输表格 图5.1-5:输入请求资源数表格 图5.1-6:系统安全状态检测 图5.1-7:资源请求安全检测5.2测试分析经过几次测试下来,发现对于一些基本的操作已经没什么问题,但如果牵涉的复杂的问题,里面就出现了很多缺点和不足了。从测试用的数据来看,基本上可以选择随意输入系统的进程数和系统的资源类型数以及系统每种资源的最大数量了,但由于测试的数据有限而且牵涉面也不是很广,很多问题可能没有测试出来,存在的一些技术问题还需要进一步改善。六 课程设计心得与

12、体会总结 操作系统课程设计下来,感觉自己有很大的进步,特别是在对操作系统相关知识的理解方面,许多在以前一直没有弄明白的地方,现在通过自己编写程序,一步步下来,一步步掌握了更多的知识。这次课程设计下来,我的体会和感觉主要体现在这几方面:1.感觉这一次课程设计是花了许多心血,翻看课本,查找资料,把许多遗忘了的东西都重拾脑海,每天在宿舍,自己给自己安排好了计划,一步步执行下来,所以课程设计的一个星期,感觉过得很充实,心情也很不错,在这样累积下来,自己亲自完全实现功能出来,感觉很兴奋。2. 在编程实现的过程中,自己也发现了不少的问题,自己感觉很容易的东西却总是出错,而且都是比较低级的错误,感觉很多东西

13、看起来很简单,但在实际编程实现的时候却需要注意各种细节,需要耐心细致,实际编程中遇到一些细节上的小问题确实需要仔细考虑才行。3. 因为银行家算法牵涉的很多要输入的数,所以定义了很多个数组来存放,结果是因为数据太多,时常发生混淆,出了不少的错误,而且不容易找出来,感觉很头疼。4. 为了实现银行家算法,我把课本上的知识进行了全面的复习,在理解的基础上,再在网上搜索资料,进一步掌握了相关知识之后,才开始着手编写程序,通过银行家算法的安全性算法和资源请求算法的实现,对死锁也有更深一层的了解。使我对操作系统特别是死锁避免这一部分的认识有了很大的加深。5.课程设计下来,我对操作系统理解更为全面了,并感觉里

14、面有太多的知识需要去掌握,也深深体会的操作系统方面知识的重要性,进而感觉的自己这方面知识的严重不足。 6. 最后总体感觉这一次课程设计,时间比较充足,并且也是由自己自由发挥,自己的扩展空间也更大了,有了这样一次课程设计机会,给我带来了很多意想不到的收获。七 参考文献1. 【美国】peter baer galvin等编著 郑扣根 【译】 操作系统概念.第七版 北京:高等教育出版社.2010.2. 张尧学编著. 计算机操作系统教程习题解答与实验指导. 北京: 清华大学出版社.2000.3.叶核亚编著 陈道蓄主审. java程序设计实用教程. 第三版 北京:电子工业出版社八 程序清单8.1 操作主界

15、面代码:import java.awt.color;public class operatingframe extends jframe implements actionlistener,caretlistener/*银行家算法 * param args */public static string data=0,0;public jbutton but=new jbutton(确定),new jbutton(退出);public jtextfield textfield=new jtextfield (5,10),new jtextfield (3,10);public operating

16、frame()super(银行家算法);this.setlayout(null);this.setbounds(530, 340, 405, 295);this.setdefaultcloseoperation(3);this.seticonimage(gettoolkit().getimage(images/wbto20110516223525.jpg);.url url=this.getclass().getclassloader().getresource(images/egs.jpg);for(int i=0;itextfield.length;i+)textfield

17、i.setforeground(color.blue);textfieldi.setfont(new font(华文楷体,1,25);textfieldi.setbounds(40+160,100+55*i, 50, 20);textfieldi.addcaretlistener(this);this.add(textfieldi);jlabel lab=new jlabel(系统进程数:),new jlabel(资源类型数:),new jlabel(请输入信息);for(int i=0;ilab.length;i+)labi.sethorizontalalignment(jlabel.rig

18、ht);labi.setforeground(color.blue);labi.setfont(new font(华文楷体,1,25);labi.setbounds(40,100+55*i, 150, 20);this.add(labi);for(int i=0;ibut.length;i+)buti.sethorizontalalignment(jlabel.right);buti.setforeground(color.blue);buti.setfont(new font(华文楷体,1,10);buti.setbounds(170+i*100,220, 60, 20);buti.adda

19、ctionlistener(this);this.add(buti);lab2.setbounds(100,20, 150, 30);jlabel label=new jlabel();label.seticon(new imageicon(url);label.setbounds(0,0,400,270);this.add(label);this.setvisible(true);public static void main(string args)new operatingframe();public void actionperformed(actionevent e)if (e.ge

20、tsource()=but0)new operatingstep1();this.dispose();if (e.getsource()=but1)this.dispose();public void caretupdate(caretevent e) data0=textfield0.gettext();data1=textfield1.gettext();8.2 功能实现代码:import java.awt.color;import java.awt.font;import java.awt.event.actionevent;import java.awt.event.actionlis

21、tener;import javax.swing.imageicon;import javax.swing.jbutton;import javax.swing.jframe;import javax.swing.jlabel;import javax.swing.joptionpane;import javax.swing.jscrollpane;import javax.swing.jtable;import javax.swing.event.tablemodellistener;import javax.swing.table.tablemodel;public class opera

22、tingstep1 extends jframe implements actionlistener/*银行家 算法 * param args */public static int m=integer.parseint(operatingframe.data0);/系统进程 输public static int n=integer.parseint(operatingframe.data1);/系统资源类型public static int tatoal=new int n;/总资源数public static int avaliable=new int n;/可利用资源数public st

23、atic int allocation=new int mn;/已用资源数public static int max=new int mn;/最大资源需求public static int need=new int mn;/还需的各种资源数public static int needi=new int n;/安全性计算用public static int request=new int mn;/请求资源数public static int requests=new int n;public static int work=new intn;/安全性计算用public static boolea

24、n filished=new booleanm;/安全性计算用;public object data1=new object1n+1;/表格里面数据public object data2=new object40n+1;public object data3=new object40n+1;public object data4=new object40n+1;public jbutton but=new jbutton(后退),new jbutton(确定),new jbutton(安检),new jbutton(request),new jbutton(退出);/按钮声明/private

25、object title1=index,allocation,max,work,filshed;/private object title2=班次,姓名,性别,单位,身份证,舱类别;public static jtable table1,table2,table3,table4;/表格声明public operatingstep1()super(银行家算法);this.setlayout(null);this.setbounds(530, 340, 605, 295);this.setdefaultcloseoperation(3);this.seticonimage(gettoolkit()

26、.getimage(images/egs.jpg);/设置背景.url url=this.getclass().getclassloader().getresource(images/dabe.jpg);/system.out.println(m);/system.out.println(n);for(int i=0;i=0;i+)/表格 数据初始化for(int j=1;j=n;j+)data1ij=10;for(int i=0;im;i+)for(int j=1;j=n;j+)data2ij=0;for(int i=0;im;i+)for(int j=1;j=n;j+)da

27、ta3ij=5;for(int i=0;im;i+)for(int j=1;j=n;j+)data4ij=0;/四个表格string title1=new string n+1;/表格一title10=index;for(int i=1;i=n;i+)title1i=s+i+:;table1=new jtable(data1,title1);/table2.getcolumnmodel().getcolumn(4).setpreferredwidth(100 );table1.gettableheader().setreorderingallowed(false); /不可整列移动 table

28、1.gettableheader().setresizingallowed(false); /不可拉动表格object obj1=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(new font(华文楷体,1,12);jscrollpane js1=new

29、 jscrollpane(table1);js1.setbounds(220, 10, 300, 35);this.add(js1);string title2=new string n+1;/表格二title20=index;for(int i=1;i=n;i+)title2i=s+i+:;table2=new jtable(data2,title2);/table2.getcolumnmodel().getcolumn(4).setpreferredwidth(100 );table2.gettableheader().setreorderingallowed(false); /不可整列移

30、动 table2.gettableheader().setresizingallowed(false); /不可拉动表格object obj2=new object m;for(int i=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.setf

31、ont(new font(华文楷体,1,12);jscrollpane js2=new jscrollpane(table2);js2.setbounds(35, 100, 150, 100);this.add(js2);string title3=new string n+1;/表格三title30=index;for(int i=1;i=n;i+)title3i=s+i+:;/for(int i=0;ititle3.length;i+)/system.out.print(title3i+ );table3=new jtable(data3,title3);/table1.getcolumn

32、model().getcolumn(4).setpreferredwidth(100 );table3.gettableheader().setreorderingallowed(false); /不可整列移动 table3.gettableheader().setresizingallowed(false); /不可拉动表格object obj3=new object m;for(int i=0;im;i+)obj3i=p+i+:;table3.setvalueat(obj3i,i,0);table3.setrowheight(15);table3.setbackground(color.o

33、range);table3.setforeground(color.black);table3.seteditingcolumn(1);/table1.setenabled(true);table3.setfont(new font(华文楷体,1,12);jscrollpane js3=new jscrollpane(table3);js3.setbounds(220, 100, 150, 100);this.add(js3);string title4=new string n+1;/表格四title40=index;for(int i=1;i=n;i+)title4i=s+i+:;/for

34、(int i=0;ititle4.length;i+)/system.out.print(title4i+ );table4=new jtable(data4,title4);/table1.getcolumnmodel().getcolumn(4).setpreferredwidth(100 );table4.gettableheader().setreorderingallowed(false); /不可整列移动 table4.gettableheader().setresizingallowed(false); /不可拉动表格object obj4=new object m;for(in

35、t i=0;im;i+)obj4i=p+i+:;table4.setvalueat(obj4i,i,0);table4.setrowheight(15);table4.setbackground(color.orange);table4.setforeground(color.black);table4.seteditingcolumn(1);/table1.setenabled(true);table4.setfont(new font(华文楷体,1,12);jscrollpane js4=new jscrollpane(table4);js4.setbounds(400, 100, 150

36、, 100);this.add(js4);jlabel lab=new jlabel(allocation:),new jlabel(max:),new jlabel(request:),new jlabel(tatoal:);for(int i=0;ilab.length;i+)/四个标签labi.sethorizontalalignment(jlabel.right);labi.setforeground(color.blue);labi.setfont(new font(华文楷体,1,25);labi.setbounds(30+i*150,70,150, 20);this.add(lab

37、i);lab3.setbounds(50, 20, 150, 30);for(int i=0;ibut.length;i+)/四个按钮buti.setforeground(color.blue);buti.setfont(new font(华文楷体,1,10);buti.setbounds(80+i*100,230, 75, 20);buti.addactionlistener(this);this.add(buti);/* * 获取初始化后表格里面的各个数据,并转化为int型 */for(int i=1;i=n;i+)tatoali-1=integer.parseint(string)tab

38、le1.getvalueat(0, i);for(int i=0;im;i+)for(int j=1;j=n;j+)allocationij-1=integer.parseint(string)table2.getvalueat(i, j);for(int i=0;im;i+)for(int j=1;j=n;j+)maxij-1=integer.parseint(string)table3.getvalueat(i, j);for(int i=0;im;i+)for(int j=1;j=n;j+)requestij-1=integer.parseint(string)table4.getval

39、ueat(i, j);jlabel label=new jlabel();/图片背景标签label.seticon(new imageicon(url);label.setbounds(0,0,600,270);this.add(label); /table1.iscelleditable(0, 0);this.setvisible(true);public static void main(string args)new operatingstep1();public boolean iscelleditable(int rowindex, int columnindex) /重写iscel

40、leditable方法if(columnindex!=1)return false;else return true;public void actionperformed(actionevent e) if (e.getsource()=but0)/后退按钮new operatingframe();if (e.getsource()=but1)/数据保存按钮/* * 获取表格里面的各个数据,并转化为int */for(int i=1;i=n;i+)tatoali-1=integer.parseint(string)table1.getvalueat(0, i);for(int i=0;im;

41、i+)for(int j=1;j=n;j+)allocationij-1=integer.parseint(string)table2.getvalueat(i, j);for(int i=0;im;i+)for(int j=1;j=n;j+)maxij-1=integer.parseint(string)table3.getvalueat(i, j);for(int i=0;im;i+)for(int j=1;j=n;j+)requestij-1=integer.parseint(string)table4.getvalueat(i, j);int allocations=new intn;

42、for(int i=0;in;i+)allocationsi=0;for(int i=0;in;i+)for(int j=0;jm;j+)allocationsi+=allocationji;/获取每种资源被使用的总和for(int i=0;in;i+)avaliablei=tatoali-allocationsi;/avaliable赋初值/worki=avaliablei+allocation0i;/work赋初值for(int i=0;in;i+)requestsi=0;for(int i=0;in;i+)for(int j=0;jm;j+)requestsi+=requestji;/获

43、取每种资源被请求的总和for(int i=0;im;i+)for(int j=0;jn;j+)needij=maxij-allocationij;/求得所需资源数for(int i=0;i1;i+)for(int j=0;jn;j+)workj=avaliablej;joptionpane.showmessagedialog(this, 保存成功!请继续操作!);if (e.getsource()=but2)/安全检测按钮int count=m;for(int i=0;im;i+)filishedi=false;for(int i=0;ifilished.length;i+)for(int j

44、=0;jn;j+)needij=needij;/system.out.print( needi: +needij);/system.out.print( work: +workj);if(filishedi=false&equals(needi,work)/for(int j=0;jneedi.length;j+)/system.out.print(needi: +needij+ worki+workj);system.out.print( p+i);addwork(work,i);filishedi=true;if(i=filished.length-1)if(count=1)break;i=-1;count-;for(int i=0;ifilished.length;i+)if(filishedi!=true)joptionpane.showmessagedialog(this, 系统处于不安全状态,将产生死锁);break;elseif(i=filished.length-1)joptionpane.showmessagedialog(this, 系统处于安全状态);if (e.getsource()=but3)/请求按钮if(equalsreque

温馨提示

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

评论

0/150

提交评论