操作系统实验报告利用银行家算法避免死锁.docx
- 文档编号:15844408
- 上传时间:2023-07-08
- 格式:DOCX
- 页数:27
- 大小:304.73KB
操作系统实验报告利用银行家算法避免死锁.docx
《操作系统实验报告利用银行家算法避免死锁.docx》由会员分享,可在线阅读,更多相关《操作系统实验报告利用银行家算法避免死锁.docx(27页珍藏版)》请在冰点文库上搜索。
操作系统实验报告利用银行家算法避免死锁
计算机操作系统实验报告
题目 利用银行家算法避免死锁
一、实验目得:
1、加深了解有关资源申请、避免死锁等概念,并体会与了解死锁与避免死锁得具体实施方法。
2、要求编写与调试一个系统动态分配资源得简单模拟程序,观察死锁产生得条件,并采用银行家算法,有效得防止与避免死锁得发生。
2、实验内容:
用银行家算法实现资源分配:
设计五个进程{p0,p1,p2,p3,p4}共享三类资源{A,B,C}得系统,例如,{A,B,C}得资源数量分别为10,5,7。
进程可动态地申请资源与释放资源,系统按进程得申请动态地分配资源,要求程序具有显示与打印各进程得某一个时刻得资源分配表与安全序列;显示与打印各进程依次要求申请得资源号以及为某进程分配资源后得有关资源数据。
3、问题分析与设计:
1、算法思路:
先对用户提出得请求进行合法性检查,即检查请求就是否大于需要得,就是否大于可利用得。
若请求合法,则进行预分配,对分配后得状态调用安全性算法进行检查。
若安全,则分配;若不安全,则拒绝申请,恢复到原来得状态,拒绝申请。
2、银行家算法步骤:
(1)如果Requesti (2);否则,认为出错,因为它所需要得资源数已超过它所宣布得最大值。 (2)如果Request (3)系统试探把要求得资源分配给进程Pi,并修改下面数据结构中得数值: Available=Available-Request[i]; Allocation=Allocation+Request; Need=Need-Request; (4)系统执行安全性算法,检查此次资源分配后,系统就是否处于安全状态。 3、安全性算法步骤: (1)设置两个向量 ①工作向量Work。 它表示系统可提供进程继续运行所需要得各类资源数目,执行安全算法开始时,Work=Allocation; ②布尔向量Finish。 它表示系统就是否有足够得资源分配给进程,使之运行完成,开始时先做Finish[i]=false,当有足够资源分配给进程时,令Finish[i]=true。 (2)从进程集合中找到一个能满足下述条件得进程: ①Finish[i]=false ②Need 如找到,执行步骤(3);否则,执行步骤(4)。 (3)当进程P获得资源后,可顺利执行,直至完成,并释放出分配给它得资源,故应执行: Work=Work+Allocation; Finish[i]=true; 转向步骤 (2)。 (4)如果所有进程得Finish[i]=true,则表示系统处于安全状态;否则,系统处于不安全状态。 4、流程图: 系统主要过程流程图 银行家算法流程图 安全性算法流程图 5、主要数据结构 假设有M个进程N类资源,则有如下数据结构: intmax[M*N] M个进程对N类资源得最大需求量 int available[N]系统可用资源数 int allocated[M*N]M个进程已经得到N类资源得资源量 int need[M*N]M个进程还需要N类资源得资源量 intworked[]系统提供给进程继续运行所需得各类资源数目 4、源代码 importjava、awt、*; importjavax、swing、*; importjava、util、*; import java、awt、event、*; importjavax、swing、border、*; publicclass OsBanker extendsJFrame{//界面设计 JLabel labelInfo; JLabellabelInfo1; ﻩintresourceNum,processNum; intcount=0; ﻩJButtonbuttonRequest, buttonSetInit,button,button1, buttonsearch,button2; JTextField tf1,tf2; JTextField[]textAvailable; JTextField[][] textAllocation; ﻩJTextField[][]textNeed; JTextFieldtextProcessName; ﻩJTextField[] textRequest; intavailable[]; intmax[][]; intneed[][]; ﻩintallocated[][]; ﻩint SafeSequence[]; intrequest[]; boolean Finish[]; ﻩintworked[]; booleanflag =false; JFramef1; JFrame f2; ﻩJFramef3; JTextAreajt; ﻩvoid display() { Borderborder=BorderFactory、createLoweredBevelBorder(); ﻩBorder borderTitled=BorderFactory、createTitledBorder(border,"按钮区"); ﻩtextAvailable =newJTextField[5]; ﻩﻩtextAllocation=new JTextField[6][5]; ﻩtextNeed =newJTextField[6][5]; ﻩtextProcessName= newJTextField(""); ﻩtextProcessName、setEnabled(false); ﻩtextRequest=new JTextField[5]; ﻩtf1=new JTextField(20); ﻩtf2=new JTextField(20); ﻩﻩlabelInfo= newJLabel("请先输入资源个数与进程个数(1~6),后单击确定"); ﻩJPanelcontentPane; contentPane= (JPanel)this、getContentPane(); ﻩﻩcontentPane、setLayout(null); contentPane、setBackground(Color、pink); ﻩlabelInfo、setBounds(50,10,300,40); labelInfo、setOpaque(true); labelInfo、setForeground(Color、red); labelInfo、setBackground(Color、pink); contentPane、add(labelInfo,null); JLabelb1=newJLabel("资源个数: "); ﻩb1、setForeground(Color、blue); ﻩﻩJLabelb2=newJLabel("进程个数: "); ﻩb2、setForeground(Color、blue); ﻩﻩb1、setBounds(50, 80,80,30); contentPane、add(b1, null); tf1、setBounds(180, 80, 170,30); ﻩﻩcontentPane、add(tf1,null); ﻩb2、setBounds(50,150, 80,30); ﻩcontentPane、add(b2, null); ﻩtf2、setBounds(180,150, 170, 30); ﻩcontentPane、add(tf2,null); ﻩbutton1 =new JButton("确定"); ﻩbutton=new JButton("重置"); button1、setBounds(80,200,80,30); ﻩﻩcontentPane、add(button1,null); ﻩﻩbutton、setBounds(220,200,80,30); ﻩcontentPane、add(button, null); this、setSize(400, 300); ﻩﻩthis、setResizable(false); ﻩthis、setTitle("银行家算法(SXJ)"); ﻩthis、setLocationRelativeTo(null); ﻩthis、setDefaultCloseOperation(EXIT_ON_CLOSE); ﻩthis、setVisible(true); ﻩﻩf1= newJFrame(); ﻩlabelInfo1=newJLabel("请先输入最大需求与分配矩阵,然后单击初始化"); ﻩﻩJPanelcontentPane1; ﻩcontentPane1 = (JPanel)f1、getContentPane(); ﻩcontentPane1、setLayout(null); ﻩﻩcontentPane1、setBackground(Color、pink); ﻩlabelInfo1、setOpaque(true); ﻩﻩlabelInfo1、setBounds(75,10,400,40); ﻩlabelInfo1、setBackground(Color、pink); ﻩlabelInfo1、setForeground(Color、blue); ﻩﻩcontentPane1、add(labelInfo1,null); ﻩJLabellabelAvailableLabel = new JLabel("AllResource: "); JLabellabelNeedLabel=newJLabel("MaxNeed: "); JLabellabelAllocationLabel=newJLabel("allocated: "); ﻩﻩJLabellabelRequestLabel= newJLabel("requestprocess: "); ﻩlabelNeedLabel、setBounds(75,90,100,20); ﻩ//x,y,width,height ﻩcontentPane1、add(labelNeedLabel,null); ﻩﻩlabelAllocationLabel、setBounds(75,240,100,20); ﻩcontentPane1、add(labelAllocationLabel,null); ﻩlabelAvailableLabel、setBounds(75,70, 100,20); ﻩcontentPane1、add(labelAvailableLabel,null); ﻩlabelRequestLabel、setBounds(75,400,100, 20); ﻩﻩcontentPane1、add(labelRequestLabel,null); ﻩJLabel[] labelProcessLabel1={newJLabel("进程1"),new JLabel("进程2"), ﻩﻩﻩnewJLabel("进程3"),newJLabel("进程4"),new JLabel("进程5"), newJLabel("进程6")}; JLabel[]labelProcessLabel2={newJLabel("进程1"),newJLabel("进程2"), ﻩnewJLabel("进程3"),newJLabel("进程4"),newJLabel("进程5"), ﻩnewJLabel("进程6")}; ﻩJPanelpPanel1=newJPanel(),pPanel2 =newJPanel(),pPanel3 =new JPanel(),pPanel4 = newJPanel(); ﻩpPanel1、setLayout(null); ﻩpPanel2、setLayout(null); /* * pPanel4、setLayout(null);pPanel4、setBounds(440,120,90,270); *pPanel4、setBorder(borderTitled); ﻩ */ ﻩbuttonSetInit=new JButton("初始化"); ﻩbuttonsearch = new JButton("检测安全性"); ﻩbutton2= new JButton("重置"); ﻩbuttonRequest=newJButton("请求资源"); ﻩbuttonSetInit、setBounds(420,140,100,30); ﻩcontentPane1、add(buttonSetInit,null); ﻩﻩbuttonsearch、setBounds(420, 240,100,30); ﻩcontentPane1、add(buttonsearch,null); button2、setBounds(420,340,100, 30); contentPane1、add(button2, null); ﻩﻩbuttonRequest、setBounds(420,425,100,30); ﻩcontentPane1、add(buttonRequest,null); ﻩﻩfor(intpi=0;pi< 6;pi++){ ﻩlabelProcessLabel1[pi]、setBounds(0,0 + pi* 20,60, 20); ﻩﻩlabelProcessLabel2[pi]、setBounds(0,0+pi *20,60,20); ﻩﻩ} pPanel1、setBounds(75,120, 60,120); ﻩpPanel2、setBounds(75,270,60,120); ﻩﻩfor(intpi=0;pi<6;pi++){ ﻩﻩpPanel1、add(labelProcessLabel1[pi],null); ﻩﻩpPanel2、add(labelProcessLabel2[pi], null); } ﻩﻩcontentPane1、add(pPanel1); contentPane1、add(pPanel2); contentPane1、add(pPanel4); ﻩﻩfor(intsi= 0;si<5; si++) ﻩﻩfor(int pi=0; pi< 6;pi++){ ﻩﻩtextNeed[pi][si] =newJTextField(); ﻩtextNeed[pi][si] ﻩﻩﻩ、setBounds(150+ si*50,120 +pi*20,50, 20); ﻩﻩtextNeed[pi][si]、setEditable(false); ﻩtextAllocation[pi][si]=new JTextField(); textAllocation[pi][si]、setBounds(150+ si*50,270+pi* 20, 50,20); ﻩtextAllocation[pi][si]、setEditable(false); ﻩ} ﻩfor(int si= 0;si<5;si++) { ﻩﻩﻩtextAvailable[si]=new JTextField(); ﻩﻩtextAvailable[si]、setEditable(false); ﻩﻩtextAvailable[si]、setBounds(150+si*50,70,50,20); ﻩﻩtextRequest[si]= newJTextField(); ﻩﻩtextRequest[si]、setEditable(false); ﻩﻩﻩtextRequest[si]、setBounds(150+si *50, 430,50, 20); ﻩﻩcontentPane1、add(textAvailable[si], null); contentPane1、add(textRequest[si],null); ﻩﻩ} ﻩﻩfor(intpi=0;pi<6;pi++) for(intsi=0;si< 5;si++){ ﻩﻩcontentPane1、add(textNeed[pi][si],null); ﻩﻩcontentPane1、add(textAllocation[pi][si],null); ﻩﻩ} ﻩtextProcessName、setBounds(80,430, 50, 20); ﻩcontentPane1、add(textProcessName, null); ﻩf1、setSize(550,500); ﻩﻩf1、setResizable(false); f1、setTitle("银行家算法(SXJ)"); ﻩf1、setLocationRelativeTo(null); ﻩf1、setDefaultCloseOperation(EXIT_ON_CLOSE); ﻩ//f1、setVisible(true); ﻩf1、setVisible(false); ﻩf2 = newJFrame("安全序列显示框"); ﻩﻩjt=newJTextArea(75,40); ﻩjt、setBackground(Color、pink); ﻩjt、setForeground(Color、blue); ﻩJScrollPanescrollPane= newJScrollPane(jt);// 加滚动条 ﻩscrollPane、setBorder(BorderFactory、createLoweredBevelBorder());// 边界 ﻩ(f2、getContentPane())、add(scrollPane); f2、setSize(450, 400); f2、setResizable(false); ﻩf2、setDefaultCloseOperation(EXIT_ON_CLOSE); ﻩf2、setVisible(false); ﻩbuttonSetInit、setEnabled(false); ﻩbuttonRequest、setEnabled(false); ﻩbuttonsearch、setEnabled(false); ﻩbutton1、addActionListener(new ActionListener(){ publicvoidactionPerformed(ActionEvente){ ﻩ//labelInfo、setText("请先初始化allocated与Maxneed,后单击初始化按钮"); ﻩﻩf1、setVisible(true); ﻩbuttonSetInit、setEnabled(true); ﻩﻩﻩﻩresourceNum=Integer、parseInt(tf1、getText()); ﻩprocessNum = Integer、parseInt(tf2、getText()); ﻩﻩfor (inti=0;i ﻩﻩfor(intj=0; j < resourceNum; j++){ ﻩtextNeed[i][j]、setEditable(true); ﻩﻩﻩtextAllocation[i][j]、setEditable(true); ﻩtextAvailable[j]、setEditable(true); ﻩﻩﻩﻩ} ﻩﻩﻩﻩ} ﻩﻩ} ﻩﻩ}); ﻩﻩbuttonSetInit、addActionListener(new ActionListener() { ﻩpublicvoidactionPerformed(ActionEvent e){ ﻩInit(); ﻩﻩﻩbuttonsearch、setEnabled(true); ﻩ} }); ﻩbuttonsearch、addActionListener(newActionListener(){ ﻩﻩpublicvoidactionPerformed(ActionEvente){ ﻩcount =0; ﻩﻩSafeSequence= newint[processNum]; ﻩﻩworked= new int[resourceNum]; Finish= newboolean[processNum]; ﻩcopyVector(worked, available); ﻩﻩSafety(0); ﻩﻩﻩﻩjt、append("安全序列数量: "+ count); ﻩif (flag){ ﻩﻩlabelInfo1、setText("当前系统状态: 安全"); ﻩﻩﻩﻩf2、setVisible(true); ﻩﻩﻩbuttonRequest、setEnabled(true); ﻩﻩtextProcessName、setEnabled(true); ﻩﻩfor(inti=0;i< resourceNum;i++){ ﻩﻩﻩtextRequest[i]、setEditable(true); ﻩﻩ} }else{ ﻩﻩlabelInfo1、setText("当前系统状态: 不安全"); ﻩﻩ} ﻩﻩbuttonSetInit、setEnabled(false); ﻩﻩﻩ} ﻩ}); ﻩﻩbuttonRequest、addActionListener(newActionListener(){ ﻩﻩﻩpublicvoidactionPerformed(ActionEvente){ ﻩﻩcount=0; ﻩﻩﻩfor(inti=0; i< processNum;i++) { ﻩﻩﻩFinish[i]=false; ﻩ} ﻩﻩjt、setText("");
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 实验 报告 利用 银行家 算法 避免 死锁