银行家算法的实现操作系统实验报告利用银行家算法避免死锁_第1页
银行家算法的实现操作系统实验报告利用银行家算法避免死锁_第2页
银行家算法的实现操作系统实验报告利用银行家算法避免死锁_第3页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

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

文档简介

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

2、显示和打印各进程的某一 个时刻的资分配表和安全序列;显示和打印各进程依次要求申请的资号以及为某进程分配资后的有关资数据。三、问题分析p p 与设计:1、算法思路:先对用户提出的请求进行合法性检查,即检查请求是否大于需要的,是 否大于可利用的。若请求合法,则进行预分配,对分配后的状态调用安全性 算法进行检查。若安全,则分配;若不安全,则拒绝申请,恢复到原来的状 态,拒绝申请。2、银行家算法步骤:如果Request v or二Need,则转向步骤 ;否则,认为出错,因 为它所需要的资数已超过它所宣布的最大值。如果Requestv or二Available,则转向步骤(3);否则,表示系统中 尚无足

3、够的资,进程必须等待。系统试探把要求的资分配给进程 Pi, 并修改下面数据结构中的数 值:Available=Available-Requesti;Allocation=Allocation+Request;Need=Need-Request;系统执行安全性算法,检查此次资分配后,系统是否处于安全状 态。3、安全性算法步骤:( 1 )设置两个向量工作向量Work。它表示系统可提供进程继续运行所需要的各类资数 目,执行安全算法开始时, Work=Allocation;布尔向量 Finish 。它表示系统是否有足够的资分配给进程, 使之运 行完成,开始时先做 Finishi=false ,当有足够

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

5、nt ma_M_N M 个进程对N类资的最大需求量int availableN 系统可用资数int allocatedM_N M个进程已经得到N类资的资量int needM_N M 个进程还需要N类资的资量int worked 系统提供给进程继续运行所需的各类资数目四、代码import ._;import ._;import ._;public class OsBanker e_tends JFrame etBounds(0, 0 + pi _20, 60,20);labelProcessLabel2pi.setBounds(0, 0 + pi _20, 60, 20);(75, 120, 6

6、0, 120);(75, 270, 60, 120);for (int pi = 0; pi 6; pi+) (labelProcessLabel1pi, null);(labelProcessLabel2pi, null);(pPanel1);(pPanel2);(pPanel4);for (int si = 0; si 5; si+)for (int pi = 0; pi 6; pi+) te_tNeedpisi = new JTe_tField;te_tNeedpisi.setBounds(150 + si _50, 120 + pi _20, 50, 20); te_tNeedpisi

7、.setEditable(false);te_tAllocationpisi = new JTe_tField; te_tAllocationpisi.setBounds(150 + si _50, 270 +pi _20,50, 20);te_tAllocationpisi.setEditable(false);for (int si = 0; si 5; si+) te_tAvailablesi = new JTe_tField;te_tAvailablesi.setEditable(false);te_tAvailablesi.setBounds(150 + si _50, 70, 50

8、, 20); te_tRequestsi = new JTe_tField;te_tRequestsi.setEditable(false);te_tRequestsi.setBounds(150 + si _50, 430, 50, 20); (te_tAvailablesi, null);(te_tRequestsi, null);for (int pi = 0; pi 6; pi+)for (int si = 0; si 5; si+) (te_tNeedpisi, null);(te_tAllocationpisi, null);(80, 430, 50, 20);(te_tProce

9、ssName, null);(550, 500);(false);(“ 银行家算法 (S_J)”);(null);(E_IT_ON_CLOSE); dd(scrollPane);(450, 400);(false);(E_IT_ON_CLOSE);(false);(false);(false);(false);(new ActionListener public void actionPerformed(ActionEvent e) etEditable(true);te_tAllocationij.setEditable(true); te_tAvailablej.setEditable(t

10、rue););(new ActionListener public void actionPerformed(ActionEvent e) Init;(true););(new ActionListener public void actionPerformed(ActionEvent e) count = 0;SafeSequence = new intprocessNum; worked = new intresourceNum;Finish = new booleanprocessNum; copyVector(worked, available); Safety(0);(“ 安全序列数

11、量: ” + count);if (flag) (“ 当前系统状态:安全 ”);(true);(true);(true);for (int i = 0; i resourceNum; i+) te_tRequesti.setEditable(true); else (“ 当前系统状态:不安全 ”);(false););(new ActionListener public void actionPerformed(ActionEvent e) count = 0;for (int i = 0; i processNum; i+) Finishi = false;(“”);flag = false

12、;RequestResource;);(new ActionListener public void actionPerformed(ActionEvent e) /_(“”); (“”);_/(false);(“”);for (int i = 0; i processNum; i+) for (int j = 0; j resourceNum; j+) te_tNeedij.setTe_t(“”); te_tAllocationij.setTe_t(“”); te_tAvailablej.setTe_t(“”); te_tRequestj.setTe_t(“”); etEditable(fa

13、lse); etEditable(false); etEditable(false); te_tRequestj.setEditable(false); (“”);Finishi = false;flag = false;(false); etTe_t);ma_ = new intprocessNumresourceNum; allocated = new intprocessNumresourceNum; need = new intprocessNumresourceNum;for (int i = 0; i processNum; i+) for (int j = 0; j resour

14、ceNum; j+) ma_ij = (te_tNeedij.getTe_t); allocatedij = (te_tAllocationij .getTe_t);for (int i = 0; i resourceNum; i+)for (int j = 0; j processNum; j+)needji = ma_ji - allocatedji;for (int i = 0; i resourceNum; i+) for (int j = 0; j processNum; j+) availablei -= allocatedji;if (availablei 0) (“ 您输入的数

15、据有误 ,请重新输入 ”);void Safety(int n) etTe_t);if (!Smaller(request, needprocessname) (“ 资请求不符该进程的需求量 .”); else if (!Smaller(request, available) (“ (” 可用资不足以满足请求 , 进程需要等待 .“);(” (“ 可用资不足以满足请求 , 进程需要等待 .”); else Sub(available, request);Add(allocatedprocessname, request);Sub(needprocessname, request);copyVector(worked, available);Safety(0);if (flag) (“ 可立即分配给该进程 !”); else (“ 分配后导致系统处于不安全状态 !, 不可立即分配 ”);Add(available, request);Sub(allocatedprocessname, request);Add(needprocessname, request);/ 五、实验结果:初始界面: 初始化:检测

温馨提示

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

评论

0/150

提交评论