欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

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

    • 资源ID:25483512       资源大小:921.73KB        全文页数:20页
    • 资源格式: PDF        下载积分:4.3金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要4.3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

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

    电脑操作系统实验报告题目利用银行家算法防止死锁一、 实验目的: 1 、加深了解有关资源申请、防止死锁等概念,并体会和了解死锁和防止死锁的具体实施方法。 2 、要求编写和调试一个系统动态分配资源的简单模拟程序,观察死锁产生的条件,并采用银行家算法,有效的防止和防止死锁的发生。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 1 页,共 20 页二、实验内容:用银行家算法实现资源分配:设计五个进程 p0,p1,p2,p3,p4共享三类资源 A,B,C 的系统,例如,A,B,C 的资源数量分别为10,5,7。进程可动态地申请资源和释放资源, 系统按进程的申请动态地分配资源,要求程序具有显示和打印各进程的某一个时刻的资源分配表和安全序列;显示和打印各进程依次要求申请的资源号以及为某进程分配资源后的有关资源数据。三、问题分析与设计:1、算法思路:先对用户提出的请求进行合法性检查,即检查请求是否大于需要的,是否大于可利用的。假设请求合法,则进行预分配,对分配后的状态调用安全性算法进行检查。假设安全,则分配;假设不安全,则拒绝申请,恢复到原来的状态,拒绝申请。2、银行家算法步骤:1如果 Requesti or =Need, 则转向步骤 (2) ;否则,认为出错,因为它所需要的资源数已超过它所宣布的最大值。2如果 Requestor=Available,则转向步骤 3 ;否则,表示系统中尚无足够的资源,进程必须等待。3系统试探把要求的资源分配给进程Pi, 并修改下面数据结构中的数值: Available=Available-Requesti; 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 2 页,共 20 页 Allocation=Allocation+Request; Need=Need-Request; (4)系统执行安全性算法,检查此次资源分配后,系统是否处于安全状态。3、安全性算法步骤:1设置两个向量工作向量Work。它表示系统可提供进程继续运行所需要的各类资源数目,执行安全算法开始时,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,则表示系统处于安全状态;否则,系统处于不安全状态。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 3 页,共 20 页4、流程图:系统主要过程流程图银行家算法流程图精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 4 页,共 20 页安全性算法流程图精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 5 页,共 20 页5、主要数据结构假设有 M个进程 N类资源,则有如下数据结构:int maxM*N M个进程对 N类资源的最大需求量int availableN 系统可用资源数int allocatedM*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 / 界面设计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 textRequest; 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.createTitledBorder(border, 按钮区 ); textAvailable = new JTextField5; textAllocation = new JTextField65; textNeed = new JTextField65; textProcessName = new JTextField(); textProcessName.setEnabled(false); textRequest = new JTextField5; tf1 = new JTextField(20); 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 7 页,共 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.setForeground(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, 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 = new JFrame(); labelInfo1 = new JLabel(请先输入最大需求和分配矩阵,然后单击初始化); JPanel contentPane1; 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.setForeground(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, 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 = 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 JLabel(进程 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 = 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(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.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); contentPane1.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(); 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(); textRequestsi.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); textProcessName.setBounds(80, 430, 50, 20); contentPane1.add(textProcessName, null); f1.setSize(550, 500); 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 10 页,共 20 页f1.setResizable(false); f1.setTitle(银行家算法 (SXJ); f1.setLocationRelativeTo(null); f1.setDefaultCloseOperation(EXIT_ON_CLOSE); / f1.setVisible(true); f1.setVisible(false); f2 = new JFrame(安全序列显示框); 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.setDefaultCloseOperation(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,后单击初始化按钮 ); 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.setEditable(true); ); buttonSetInit.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) Init(); buttonsearch.setEnabled(true); ); buttonsearch.addActionListener(new ActionListener() 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 11 页,共 20 页public void actionPerformed(ActionEvent e) count = 0; SafeSequence = new intprocessNum; worked = 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; RequestResource(); ); button2.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) /* * tf1.setText(); tf2.setText(); */ f2.setVisible(false); jt.setText(); for (int i = 0; i processNum; i+) 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 12 页,共 20 页for (int j = 0; j resourceNum; j+) textNeedij.setText(); textAllocationij.setText(); textAvailablej.setText(); textRequestj.setText(); / textNeedij.setEditable(false); / textAllocationij.setEditable(false); / textAvailablej.setEditable(false); textRequestj.setEditable(false); textProcessName.setText(); Finishi = false; flag = false; buttonsearch.setEnabled(false); / labelInfo.setText(请先输入资源个数和进程个数,后单击确定); ); button.addActionListener(new ActionListener() public void actionPerformed(ActionEvent e) tf1.setText(); tf2.setText(); f2.setVisible(false); jt.setText(); flag = false; ); void copyVector(int v1, int v2) for (int i = 0; i v1.length; i+) v1i = v2i; void Add(int v1, int v2) for (int i = 0; i v1.length; i+) v1i += v2i; void Sub(int v1, int v2) for (int i = 0; i v1.length; i+) 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 13 页,共 20 页v1i -= v2i; boolean Smaller(int v1, int v2) boolean value = true; for (int i = 0; i v2i) value = false; break; return value; public static void main(String args) OsBanker ob = new OsBanker(); ob.display(); / System.out.println( +count); void Init() / 初始化操作矩阵 available = new intresourceNum; for (int i = 0; i resourceNum; i+) availablei = Integer.parseInt(textAvailablei.getText(); max = new intprocessNumresourceNum; allocated = new intprocessNumresourceNum; need = new intprocessNumresourceNum; for (int i = 0; i processNum; i+) for (int j = 0; j resourceNum; j+) maxij = Integer.parseInt(textNeedij.getText(); allocatedij = Integer.parseInt(textAllocationij .getText(); for (int i = 0; i resourceNum; i+) for (int j = 0; j processNum; j+) needji = maxji - allocatedji; for (int i = 0; i resourceNum; i+) for (int j = 0; j processNum; j+) availablei -= allocatedji; if (availablei 0) labelInfo.setText(您输入的数据有误, 请重新输入 ); 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 14 页,共 20 页 void Safety(int n) / 查找所有安全序列 if (n = processNum) count+; for (int i = 0; i processNum; i+) jt.append(进程 + (SafeSequencei + 1) + ); jt.append(n); flag = true; return; for (int i = 0; i processNum; i+) if (Finishi = false) boolean OK = true; for (int j = 0; j workedj) OK = false; break; if (OK) for (int j = 0; j resourceNum; j+) workedj += allocatedij; Finishi = true; SafeSequencen = i; Safety(n + 1); Finishi = false; SafeSequencen = -1; / num+; for (int j = 0; j resourceNum; j+) workedj -= allocatedij; 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 15 页,共 20 页void RequestResource() / 请求资源jt.setText(); int processname = (Integer.parseInt(textProcessName.getText() - 1); request = new intresourceNum; for (int i = 0; i resourceNum; i+) requesti = Integer.parseInt(textRequesti.getText(); if (!Smaller(request, needprocessname) labelInfo.setText(资源请求不符该进程的需求量.); else if (!Smaller(request, available) labelInfo1.setText(可用资源不足以满足请求, 进程需要等待 .); else Sub(available, request); Add(allocatedprocessname, request); Sub(needprocessname, request); copyVector(worked, available); Safety(0); if (flag) labelInfo1.setText(可立即分配给该进程!); else labelInfo1.setText(分配后导致系统处于不安全状态!, 不可立即分配); Add(available, request); Sub(allocatedprocessname, request); Add(needprocessname, request); / 五、实验结果:初始界面:精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 16 页,共 20 页初始化:检测安全性:精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 17 页,共 20 页请求资源:1进程 21,0,2精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 18 页,共 20 页2进程 53,3,0精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 19 页,共 20 页3进程 10,2,0六、 遇到的问题及不足之处:1、程序编写的时候规定最大资源数和最大进程数均=6。2、程序直接初始化了6 个进程框,既浪费了内存空间,又对可视化界面的美观造成影响。3、未对输入异常进行处理:比方在请求资源的第一个方框中只能填入进程的数字编号,当填入的为非整数时,程序会抛出异常。4、未解决进程名中对字符串的处理,直接固定进程名为数字,用户不能直接输入原有的进程名,造成不好的用户体验。精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 20 页,共 20 页

    注意事项

    本文(2022年操作系统实验报告-利用银行家算法避免死锁 .pdf)为本站会员(Che****ry)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开