ImageVerifierCode 换一换
格式:DOCX , 页数:23 ,大小:299.62KB ,
资源ID:6153931      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/6153931.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(操作系统实验报告利用银行家算法避免死锁.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

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

1、操作系统实验报告利用银行家算法避免死锁 计算机操作系统实验报告 题 目 利用银行家算法避免死锁 一、 实验目的: 1、加深了解有关资源申请、避免死锁等概念,并体会和了解死锁和避免死锁的具体实施方法。 2、要求编写和调试一个系统动态分配资源的简单模拟程序,观察死锁产生的条件,并采用银行家算法,有效的防止和避免死锁的发生。2、实验内容: 用银行家算法实现资源分配: 设计五个进程p0,p1,p2,p3,p4共享三类资源A,B,C的系统,例如,A,B,C的资源数量分别为10,5,7。进程可动态地申请资源和释放资源,系统按进程的申请动态地分配资源,要求程序具有显示和打印各进程的某一个时刻的资源分配表和安

2、全序列;显示和打印各进程依次要求申请的资源号以及为某进程分配资源后的有关资源数据。3、问题分析与设计:1、算法思路:先对用户提出的请求进行合法性检查,即检查请求是否大于需要的,是否大于可利用的。若请求合法,则进行预分配,对分配后的状态调用安全性算法进行检查。若安全,则分配;若不安全,则拒绝申请,恢复到原来的状态,拒绝申请。2、银行家算法步骤:(1)如果Requestior =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。它表示系统是否有足够的资源分配给进程,使之运行完成,开始时先做Finishi=false,当有足够资源分配给进程时,令Finishi

4、=true。(2)从进程集合中找到一个能满足下述条件的进程: Finishi=false Needor=Work 如找到,执行步骤(3);否则,执行步骤(4)。(3)当进程P获得资源后,可顺利执行,直至完成,并释放出分配给它的资源,故应执行: Work=Work+Allocation; Finishi=true; 转向步骤(2)。(4)如果所有进程的Finishi=true,则表示系统处于安全状态;否则,系统处于不安全状态。4、流程图:系统主要过程流程图银行家算法流程图安全性算法流程图5、主要数据结构 假设有M个进程N类资源,则有如下数据结构:int maxM*N M个进程对N类资源的最大需求

5、量int availableN 系统可用资源数int allocatedM*N M个进程已经得到N类资源的资源量int needM*N M个进程还需要N类资源的资源量int worked 系统提供给进程继续运行所需的各类资源数目 4、源代码import java.awt.*;import javax.swing.*;import java.util.*;import java.awt.event.*;import javax.swing.border.*;public class OsBanker extends JFrame / 界面设计 JLabel labelInfo; JLabel l

6、abelInfo1; 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 textRequest; int available; int ma

7、x; 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.createTitledBorder(border, 按钮区); te

8、xtAvailable = new JTextField5; textAllocation = new JTextField65; textNeed = new JTextField65; textProcessName = new JTextField(); textProcessName.setEnabled(false); textRequest = new JTextField5; tf1 = new JTextField(20); tf2 = new JTextField(20); labelInfo = new JLabel(请先输入资源个数和进程个数(16),后单击确定); JP

9、anel contentPane; 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, nul

10、l); 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, 30); contentPane.add(tf1, null); b2.setBounds(50, 150, 80, 30); contentPane.add(b2, null)

11、; 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)

12、; this.setTitle(银行家算法(SXJ); this.setLocationRelativeTo(null); this.setDefaultCloseOperation(EXIT_ON_CLOSE); this.setVisible(true); f1 = new JFrame(); labelInfo1 = new JLabel(请先输入最大需求和分配矩阵,然后单击初始化); JPanel contentPane1; contentPane1 = (JPanel) f1.getContentPane(); contentPane1.setLayout(null); conten

13、tPane1.setBackground(Color.pink); labelInfo1.setOpaque(true); labelInfo1.setBounds(75, 10, 400, 40); labelInfo1.setBackground(Color.pink); labelInfo1.setForeground(Color.blue); contentPane1.add(labelInfo1, null); JLabel labelAvailableLabel = new JLabel(AllResource:); JLabel labelNeedLabel = new JLab

14、el(MaxNeed:); JLabel labelAllocationLabel = new JLabel(allocated:); JLabel labelRequestLabel = new JLabel(request process:); labelNeedLabel.setBounds(75, 90, 100, 20); / x,y,width,height contentPane1.add(labelNeedLabel, null); labelAllocationLabel.setBounds(75, 240, 100, 20); contentPane1.add(labelA

15、llocationLabel, null); labelAvailableLabel.setBounds(75, 70, 100, 20); contentPane1.add(labelAvailableLabel, null); labelRequestLabel.setBounds(75, 400, 100, 20); contentPane1.add(labelRequestLabel, null); JLabel labelProcessLabel1 = new JLabel(进程1), new JLabel(进程2), new JLabel(进程3), new JLabel(进程4)

16、, new JLabel(进程5), new JLabel(进程6) ; JLabel labelProcessLabel2 = 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.setLayout(null); pPan

17、el2.setLayout(null); /* * pPanel4.setLayout(null); pPanel4.setBounds(440,120,90,270); * pPanel4.setBorder(borderTitled); */ buttonSetInit = new JButton(初始化); buttonsearch = new JButton(检测安全性); button2 = new JButton(重置); buttonRequest = new JButton(请求资源); buttonSetInit.setBounds(420, 140, 100, 30); c

18、ontentPane1.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 (int pi = 0; pi 6; pi+)

19、 labelProcessLabel1pi.setBounds(0, 0 + pi * 20, 60, 20); labelProcessLabel2pi.setBounds(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); con

20、tentPane1.add(pPanel1); contentPane1.add(pPanel2); contentPane1.add(pPanel4); for (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()

21、; textAllocationpisi.setBounds(150 + si * 50, 270 + pi * 20, 50, 20); textAllocationpisi.setEditable(false); for (int si = 0; si 5; si+) textAvailablesi = new JTextField(); textAvailablesi.setEditable(false); textAvailablesi.setBounds(150 + si * 50, 70, 50, 20); textRequestsi = new JTextField(); tex

22、tRequestsi.setEditable(false); textRequestsi.setBounds(150 + si * 50, 430, 50, 20); contentPane1.add(textAvailablesi, null); contentPane1.add(textRequestsi, null); for (int pi = 0; pi 6; pi+) for (int si = 0; si 5; si+) contentPane1.add(textNeedpisi, null); contentPane1.add(textAllocationpisi, null)

23、; 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 = new JFrame(安全序列显示

24、框); jt = new JTextArea(75, 40); jt.setBackground(Color.pink); jt.setForeground(Color.blue); JScrollPane scrollPane = new JScrollPane(jt); / 加滚动条 scrollPane.setBorder(BorderFactory.createLoweredBevelBorder();/ 边界 (f2.getContentPane().add(scrollPane); f2.setSize(450, 400); f2.setResizable(false); f2.s

25、etDefaultCloseOperation(EXIT_ON_CLOSE); f2.setVisible(false); buttonSetInit.setEnabled(false); buttonRequest.setEnabled(false); buttonsearch.setEnabled(false); button1.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) / labelInfo.setText(请先初始化allocated和Maxneed,后单击初始化按

26、钮); f1.setVisible(true); buttonSetInit.setEnabled(true); resourceNum = Integer.parseInt(tf1.getText(); processNum = Integer.parseInt(tf2.getText(); for (int i = 0; i processNum; i+) for (int j = 0; j resourceNum; j+) textNeedij.setEditable(true); textAllocationij.setEditable(true); textAvailablej.se

27、tEditable(true); ); buttonSetInit.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) Init(); buttonsearch.setEnabled(true); ); buttonsearch.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) count = 0; SafeSequence = new intprocessNum; wo

28、rked = new intresourceNum; Finish = new booleanprocessNum; copyVector(worked, available); Safety(0); jt.append(安全序列数量: + count); if (flag) labelInfo1.setText(当前系统状态:安全); f2.setVisible(true); buttonRequest.setEnabled(true); textProcessName.setEnabled(true); for (int i = 0; i resourceNum; i+) textRequesti.setEditable(true); else labelInfo1.setText(当前系统状态:不安全); buttonSetInit.setEnabled(false); ); buttonRequest.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) count = 0; for (int i = 0; i processNum; i+) Finishi = false; jt.setText(); flag = false;

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1