2022年操作系统实验报告-利用银行家算法避免死锁 .pdf
《2022年操作系统实验报告-利用银行家算法避免死锁 .pdf》由会员分享,可在线阅读,更多相关《2022年操作系统实验报告-利用银行家算法避免死锁 .pdf(20页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、电脑操作系统实验报告题目利用银行家算法防止死锁一、 实验目的: 1 、加深了解有关资源申请、防止死锁等概念,并体会和了解死锁和防止死锁的具体实施方法。 2 、要求编写和调试一个系统动态分配资源的简单模拟程序,观察死锁产生的条件,并采用银行家算法,有效的防止和防止死锁的发生。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 1 页,共 20 页二、实验内容:用银行家算法实现资源分配:设计五个进程 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; 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 2 页,共 20 页 Allocation=Allocation+Request; Need=Need-Request; (4)系统执行安全性算法,检查此次资源分配后,系统是否处于安全状态。3、安全性算法步骤:1设置两个向量工作向量Work。它表示系统可提供进程继续运行所需要的各类资源数目,执行安全算法开始时,
4、Work=Allocation; 布尔向量 Finish 。它表示系统是否有足够的资源分配给进程,使之运行完成,开始时先做Finishi=false,当有足够资源分配给进程时,令 Finishi=true。2从进程集合中找到一个能满足下述条件的进程:Finishi=false Needor=Work 如找到,执行步骤 3 ;否则,执行步骤 4 。3当进程 P 获得资源后,可顺利执行,直至完成,并释放出分配给它的资源,故应执行: Work=Work+Allocation; Finishi=true; 转向步骤 2 。4如果所有进程的Finishi=true,则表示系统处于安全状态;否则,系统处于
5、不安全状态。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 3 页,共 20 页4、流程图:系统主要过程流程图银行家算法流程图精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 4 页,共 20 页安全性算法流程图精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 5 页,共 20 页5、主要数据结构假设有 M个进程 N类资源,则有如下数据结构:int maxM*N M个进程对 N类资源的最大需求量int availableN 系统可用资源数int allocate
6、dM*N M个进程已经得到 N类资源的资源量int needM*N M个进程还需要 N类资源的资源量int worked 系统提供应进程继续运行所需的各类资源数目精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 6 页,共 20 页四、 源代码import java.awt.*; import javax.swing.*; import java.util.*; import java.awt.event.*; import javax.swing.border.*; public class OsBanker extends JFrame / 界面
7、设计JLabel labelInfo; JLabel labelInfo1; int resourceNum, processNum; int count = 0; JButton buttonRequest, buttonSetInit, button, button1, buttonsearch,button2; JTextField tf1, tf2; JTextField textAvailable; JTextField textAllocation; JTextField textNeed; JTextField textProcessName; JTextField textRe
8、quest; 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 = BorderFactory.createLoweredBevelBorder(); Border borderTitled = BorderFactory.createT
9、itledBorder(border, 按钮区 ); textAvailable = new JTextField5; textAllocation = new JTextField65; textNeed = new JTextField65; textProcessName = new JTextField(); textProcessName.setEnabled(false); textRequest = new JTextField5; tf1 = new JTextField(20); 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 7
10、 页,共 20 页tf2 = new JTextField(20); labelInfo = new JLabel(请先输入资源个数和进程个数16 ,后单击确定 ); JPanel contentPane; contentPane = (JPanel) this.getContentPane(); contentPane.setLayout(null); contentPane.setBackground(Color.pink); labelInfo.setBounds(50, 10, 300, 40); labelInfo.setOpaque(true); labelInfo.setFore
11、ground(Color.red); labelInfo.setBackground(Color.pink); contentPane.add(labelInfo, null); JLabel b1 = new JLabel(资源个数 :); b1.setForeground(Color.blue); JLabel b2 = new JLabel(进程个数 :); b2.setForeground(Color.blue); b1.setBounds(50, 80, 80, 30); contentPane.add(b1, null); tf1.setBounds(180, 80, 170, 3
12、0); 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
13、, 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 = new JFrame(); labelInfo1 = new JLabel(请先输入最大需求和分配矩阵,然后单击初始化); JPanel cont
14、entPane1; contentPane1 = (JPanel) f1.getContentPane(); contentPane1.setLayout(null); contentPane1.setBackground(Color.pink); labelInfo1.setOpaque(true); labelInfo1.setBounds(75, 10, 400, 40); 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 8 页,共 20 页labelInfo1.setBackground(Color.pink); labelInfo1.se
15、tForeground(Color.blue); contentPane1.add(labelInfo1, null); JLabel labelAvailableLabel = new JLabel(AllResource:); JLabel labelNeedLabel = new JLabel(MaxNeed:); JLabel labelAllocationLabel = new JLabel(allocated:); JLabel labelRequestLabel = new JLabel(request process:); labelNeedLabel.setBounds(75
16、, 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,
17、 100, 20); contentPane1.add(labelRequestLabel, null); JLabel labelProcessLabel1 = new JLabel(进程 1), new JLabel(进程 2), new JLabel(进程 3), new JLabel(进程 4), new JLabel(进程 5), new JLabel(进程 6) ; JLabel labelProcessLabel2 = new JLabel(进程 1), new JLabel(进程 2), new JLabel(进程 3), new JLabel(进程 4), new JLabe
18、l(进程 5), new JLabel(进程 6) ; JPanel pPanel1 = new JPanel(), pPanel2 = new JPanel(), pPanel3 = new JPanel(), pPanel4 = new JPanel(); pPanel1.setLayout(null); pPanel2.setLayout(null); /* * pPanel4.setLayout(null); pPanel4.setBounds(440,120,90,270); * pPanel4.setBorder(borderTitled); */ buttonSetInit =
19、new JButton(初始化 ); buttonsearch = new JButton(检测安全性 ); button2 = new JButton(重置 ); buttonRequest = new JButton(请求资源 ); buttonSetInit.setBounds(420, 140, 100, 30); contentPane1.add(buttonSetInit, null); buttonsearch.setBounds(420, 240, 100, 30); contentPane1.add(buttonsearch, null); button2.setBounds
20、(420, 340, 100, 30); contentPane1.add(button2, null); buttonRequest.setBounds(420, 425, 100, 30); contentPane1.add(buttonRequest, null); for (int pi = 0; pi 6; pi+) 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 9 页,共 20 页labelProcessLabel1pi.setBounds(0, 0 + pi * 20, 60, 20); labelProcessLabel2pi.s
21、etBounds(0, 0 + pi * 20, 60, 20); pPanel1.setBounds(75, 120, 60, 120); pPanel2.setBounds(75, 270, 60, 120); for (int pi = 0; pi 6; pi+) pPanel1.add(labelProcessLabel1pi, null); pPanel2.add(labelProcessLabel2pi, null); contentPane1.add(pPanel1); contentPane1.add(pPanel2); contentPane1.add(pPanel4); f
22、or (int si = 0; si 5; si+) for (int pi = 0; pi 6; pi+) textNeedpisi = new JTextField(); textNeedpisi .setBounds(150 + si * 50, 120 + pi * 20, 50, 20); textNeedpisi.setEditable(false); textAllocationpisi = new JTextField(); textAllocationpisi.setBounds(150 + si * 50, 270 + pi * 20, 50, 20); textAlloc
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年操作系统实验报告-利用银行家算法避免死锁 2022 操作系统 实验 报告 利用 银行家 算法 避免 死锁
限制150内