银行家死锁避免算法模拟实现(Java)_第1页
银行家死锁避免算法模拟实现(Java)_第2页
银行家死锁避免算法模拟实现(Java)_第3页
银行家死锁避免算法模拟实现(Java)_第4页
银行家死锁避免算法模拟实现(Java)_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

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

文档简介

1、*大学计算机学院实 验 报 告 册院系名称: 计算机科学学院 课程名称: 操作系统 实验学期 2009 年至 2010 年 第 二 学期专业班级: 计算机科学与技术 2008级1班 姓名: HORACE 学号: 20081* 指导教师: *老师 实验最终成绩: 实验报告须知1学生填写实验报告应按规范填写,填写格式见由任课老师给出的实验报告样本;2学生应填写的内容包括:封面相关栏目、第一页中本学期(年)开设实验课程情况一览表中的实验名称、学时数;每次报告中的实验性质、同组人姓名、实验日期、以及实验报告中的一至五项;3教师填写内容为:实验评价、每次报告成绩、第一页中本学期(年)开设实验课程情况一览

2、表中成绩、及封面的实验最终成绩;4学生实验结束后,教师应对学生实验结果进行核实,学生方可离开实验室。5、实验成绩等级分为(90100分)优,(8089分)良,(70-79分)中,(6069分)及格,(59分)不及格。6本实验册应妥善保管,本课程实验结束后应交回实验室。实验报告(7)实验名称死锁避免算法实现同组人姓名实验性质 基本操作 设计性 综合性 验证性实验日期2010-05-10实验成绩教师评价:实验预习 实验操作 实验结果 实验报告 其它 教师签名:一、实验目的及要求(1)了解操作系统如何处理死锁(2)通过编写程序掌握如何利用银行家算法来实现死锁的避免。二、实验内容(1)用熟悉的计算机编

3、程语言编写一实现计算机资源动态分配的程序。(2)要求接收用户输入数据,利用银行家算法来判断该次请求能否分配。(3)掌握操作系统是如何在资源的动态分配过程中防止系统死锁的发生。三、主要设备及软件PC、WindowsXP操作系统、MyEclipse Java编译环境四、实验流程、操作步骤或核心代码、算法片段本人以Java语言模拟实现银行家避免死锁算法,其中分别把银行家算法和安全性检测算法封装在不同的类中,即class Banker和class SafeTest,最终在主类中创建Banker类对象进行测试。具体实现代码如下:1、银行家类Banker的实现:package com.kaiping.Av

4、oidDeadlock;import java.util.Scanner;public class Banker int ProcessNum;/进程数int SourceNum;/资源类型数int Available;/可利用资源向量int Max;/最大需求矩阵int Allocation;/分配矩阵int Need;/需求矩阵public Banker(int pN, int sN)ProcessNum = pN;SourceNum = sN;Available = new intSourceNum;Max = new intProcessNumSourceNum;Allocation

5、= new intProcessNumSourceNum;Need = new intProcessNumSourceNum;public void Initilize()/初始化方法Scanner s = new Scanner(System.in); System.out.println("=初始化="); for(int i = 0; i < Max.length; i+) System.out.print("请依次输入第" + i + "进程的各资源数:"); for(int j = 0; j < Maxi.len

6、gth; j+) Maxij = s.nextInt(); for(int i=0;i<Allocation.length;i+) System.out.print("请依次输入第" + i + "进程中已分配资源的数量:"); for(int j=0;j<Allocationi.length;j+) Allocationij = s.nextInt(); Needij = Maxij - Allocationij; for(int i=0;i<Available.length;i+) System.out.print("请输

7、入系统中第" + i + "种资源的剩余量:"); Availablei = s.nextInt(); System.out.println("=初始化结果="); System.out.println(" MAX ALLOCATION NEED AVAILABLE"); for(int i = 0; i < ProcessNum; i+) System.out.print("P" + i + ": "); for(int j = 0; j < SourceNum; j+)

8、 if(Maxij>9)/如果是两位数,控制格式,在数字前少输出一个" "。 System.out.print(Maxij + " "); else System.out.print(" " + Maxij + " "); System.out.print(" "); for(int j = 0; j < SourceNum; j+) if(Allocationij>9) System.out.print(Allocationij + " "); else

9、System.out.print(" " + Allocationij + " "); System.out.print(" "); for(int j = 0; j < SourceNum; j+) if(Needij>9) System.out.print(Needij + " "); else System.out.print(" " + Needij + " "); if(i=0) System.out.print(" "); for(

10、int j=0;j<SourceNum;j+) if(Availablej>9) System.out.print(Availablej + " "); else System.out.print(" " + Availablej + " "); System.out.println(); System.out.println("=完成初始化="); System.out.println();public void BakerAlgorithm()/银行家算法具体实现int Request= new i

11、ntSourceNum;int number;/进程号Scanner s=new Scanner(System.in);int i;/循环计数器System.out.print("请输入要申请资源的进程号:");number = s.nextInt();System.out.print("请输入请求向量:");for(i=0; i<SourceNum; i+)Requesti = s.nextInt();for(i=0; i<SourceNum; i+)if(Requesti > Neednumberi)/所需资源数大于需求量Syste

12、m.out.println("进程所要求分配的资源数已超过其宣布的最大值,系统不予分配!");return;if(Requesti > Availablei)/所需资源大于可利用资源System.out.println("系统中无足够的资源满足进程的申请,系统不予分配!");return;for(i=0; i<SourceNum; i+)/假设系统将申请资源数分配给该进程,对数据进行相关修改Availablei -= Requesti;Neednumberi -= Requesti;Allocationnumberi += Requesti;

13、SafeTest safetest = new SafeTest(this);if(safetest.SafeTestAlgorithm()/安全性检查结果为安全System.out.println("系统可以为该进程分配资源!");return;elseSystem.out.println("系统不为该进程分配资源!");for(i=0; i<SourceNum; i+)/系统不能为该进程分配资源,前面的假设作废,对数据进行相关修改Availablei += Requesti;Neednumberi += Requesti;Allocationn

14、umberi -= Requesti;return;2、安全性检测算法类SafeTest的实现:package com.kaiping.AvoidDeadlock;class SafeTest int ProcessNum;/进程数int SourceNum;/资源类型数int SafeSequence;/安全序列向量int Work;/空闲资源矩阵boolean Finish;/进程资源分配完成标志Banker banker;/银行家实例public SafeTest(Banker bK)banker = bK;ProcessNum = bK.ProcessNum;SourceNum = b

15、K.SourceNum;SafeSequence = new intProcessNum;Work = new intSourceNum;Finish = new booleanProcessNum;for(int i = 0; i < ProcessNum; i+)/初始化向量SafeSequence、FinishSafeSequencei = 0;Finishi = false;for(int i = 0;i < SourceNum; i+)/初始化向量WorkWorki = bK.Availablei;public boolean SafeTestAlgorithm()/安全

16、性测试算法具体实现int k = 0;int i,j;/循环计数器for(i=0; i<ProcessNum; i+)if(Finishi=false)for(j=0; j<SourceNum; j+)/*判断当前进程需求矩阵能否得到满足*/if(banker.Needij > Workj)break;/不满足则跳出if(j = SourceNum)/第i个进程满足SafeSequencek+=i;/将进程号存入安全序列for(int q=0; q<SourceNum; q+)/修改空闲资源矩阵Workq += banker.Allocationiq;Finishi =

17、 true;/标志该进程可完成i = -1;/下次检查重头开始for(i=0; i<ProcessNum; i+)/检查标志数组,若尚有false则未找到安全序列if(!Finishi)System.out.println("找不到安全序列,系统处于不安全状态!");return false;System.out.println("找到安全序列:");for(i=0; i<ProcessNum; i+)/显示安全序列System.out.print("P"+SafeSequencei+" ");Syst

18、em.out.println();System.out.println("系统处于安全状态!");return true;3、主类AvoidDeadlockImplement的实现:package com.kaiping.AvoidDeadlock;import java.util.Scanner;public class AvoidDeadlockImplement public static void main(String args) int ProNum,SouNum;/进程数、资源类型数Banker banker;/银行家算法对象SafeTest safetest;/安全性测试算法对象Scanner scanner=new Scanner(System.in);System.out.print("请依次输入系统中的【进

温馨提示

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

评论

0/150

提交评论