您好,欢迎访问三七文档
当前位置:首页 > 金融/证券 > 金融资料 > 操作系统课程设计 银行家算法报告
操作系统课程设计报告院(系):计算机工程学院专业:计算机科学与技术专业学生姓名:__班级:__计算073_学号:题目:仿真模拟银行家算法对死锁的避免起迄日期:__2010-7-6至2010-7-16_设计地点:2号实验楼402指导教师:2009—2010年度第2学期完成日期:2010年7月16日一、课程设计目的《操作系统》是一门重要的专业基础课,是涉及较多硬件知识的计算机系统软件课程。在计算机软硬件课程的设置上,它起着承上启下的作用。操作系统对计算机系统资源实施管理,是所有其他软件与计算机硬件的唯一接口,所有用户在使用计算机时都要得到操作系统提供的服务。操作系统课程设计的主要任务是研究计算机操作系统的基本原理和算法,掌握操作系统的进程管理、存储管理、文件管理和设备管理的基本原理与主要算法。目的是使学生掌握常用操作系统(如DOS、Windows或Linux)的一般管理方法,了解它是如何组织和运作的,对操作系统的核心概念和算法有一个透彻的理解,并对系统运行的机制有一个全面的掌握,从而充分理解系统调用与程序设计之间的关系。二、课程设计内容仿真模拟银行家算法对死锁的避免。对于进程死锁的避免问题,分为两种状态:安全状态和非安全状态。在避免死锁的方法中,允许进程动态地申请资源分配之前,应先计算此次资源分配的安全性。若此次分配不会导致系统进入不安全状态,则将资源分配给进程;否则,令进程等待。所谓安全状态是指系统能按某种进程顺序,来为每个进程pi分配所需的资源,直至满足每个进程对资源的最大需求,使每个进程都可顺利地完成。如果系统无法找到这样一个序列,则系统处于不安全状态。只要系统处于安全状态,系统便可避免进入死锁状态。因此避免死锁的实质在于:系统在进行资源分配时,如何使系统不进入不安全状态。银行家算法就是一种最有代表性的避免死锁的算法。三、系统分析与设计1、系统分析系统分析的主要任务是将在系统详细调查中所得到的文档资料集中到一起,对组织内部整体管理状况和信息处理过程进行分析。目的是将用户的需求及其解决方法确定下来,这些需要确定的结果包括:开发者关于现有组织管理状况的了解;用户对信息系统功能的需求;数据和业务流程;管理功能和管理数据指标体系;新系统拟改动和新增的管理模型等等。系统分析所确定的内容是今后系统设计、系统实现的基础。根据银行家算法,设计这个银行家算法的模拟系统。算法中涉及到进程的个数,资源的种类。进程当前占有的资源保存在数组allocation中,需要的资源数目need数组中。用户添加进程数目,并且设置每个进程对于每一类资源的占有情况和需要情况,还可以设置每一类资源的库存容量。根据算法,找出安全序列,如果不存在安全序列的话,会显示安全序列不存在。2、系统设计程序是利用java语言编写的,直接调用java中的GUI接口进行界面的设计。设计出两个窗口,一个主窗口,一个执行算法并且将结果显示的对话框。涉及到java中的JFrame、JPanel、JDialog主要是这三个。其中面板类用到了最多的。下面将这两个窗口的任务叙述如下:1、对于主窗口,包括添加进程的功能、设置每个进程的Allocation的数目、设置Available的数值。可以设置每个进程的Request的情况。(1)添加进程的功能。利用了一个JtextField输入进程的名字。利用JcomboBox选择各个给进程所需要的资源的最大数目。利用按钮添加监听器实现添加功能。如果进程名字没有添加的话,默认是:进程+序号。(2)设置Allocation。与上面的基本相同。利用了一个JtextField输入进程的名字。利用JcomboBox选择各个给进程所占有的各类资源的数目。利用按钮添加监听器实现添加功能。如果没有见输入进程的名字,功能不能执行。根据算法,所占有的各类的资源的数目不能超过给进程所需要的各类资源的最大数目。否则不会执行。(3)设置Request。功能执行的时候,用JtextField输入进程的名字。利用JcomboBox选择各个给进程所申请的各类资源的数目。利用按钮添加监听器实现添加功能。如果没有见输入进程的名字,功能不能执行。根据算法,所申请的各类的资源的数目不能超过给进程所需要的数目,即不能超过Need中的数目。如果满足的话,还必须检查是否超过了Available中的数目。只有这两个条件同时满足了,才能够继续执行。2、对于另一个窗口,主要是通过内部类来实现的。这个窗口相当于主窗口中的一个变量。这个窗口实现了算法和显示结果。(1)显示Request后的各个变量的结果。利用Jlist控件将结果显示。因为使用的是内部类,所以可以自由调用外部的变量。(2)显示执行算法后的结果。同样也是利用Jlist控件将结果显示。执行算法的时候,先将数据的字符串形式转化为数字形式。然后根据银行家算法执行,查找到安全序列。将结果显示。3、设计的过程,填入了两个实例。一个是正确的存在安全序列的实例。一个是不存在安全序列的实例。3、模块设计:程序的设计主要有两个模块,分别是设置数值和检查安全性序列模块。对于设置数值模块,主要有添加进程、清空进程、进程申请资源(即,Request资源)。对于检查安全性序列就是执行银行家算法。程序运行的时候,先是设置数据,通过点击添加进程、设置Allocation和Request的值来设置数据。在点击“执行算法”,弹出对话框显示申请资源后的结果。在点击对话框中的执行算法按钮进行查找安全序列。其中涉及的数据结构和模块调用图如下:1、对于设置数值模块(包括添加进程、清空进程、申请资源)用到的数据结构是一个类:publicclassMyJlistextendsJFrameimplementsActionListener{privateJTextFieldcurrent_text=newJTextField();//添加到标签(当前进程资源非配情况:)之后,添加到容器panel1的中间privateJListthreadName_list;//显示添加的进程名字privateJListmax_resource1_list;//显示各个进程所用到的资源1的最大数量privateString[]max_resource1_list_num=newString[10];//存储各个进程所用到的资源1的最大数量privateJListmax_resource2_list;//显示各个进程所用到的资源2的最大数量privateString[]max_resource2_list_num=newString[10];//存储各个进程所用到的资源2的最大数量privateJListmax_resource3_list;//显示各个进程所用到的资源3的最大数量privateString[]max_resource3_list_num=newString[10];//存储各个进程所用到的资源3的最大数量privateJListallocation_resource1_list;//显示各个进程所占有的资源1的数量privateString[]allocation_resource1_list_num=newString[10];//存储各个进程所占有的资源1的数量privateJListallocation_resource2_list;//显示各个进程所占有的资源2的数量privateString[]allocation_resource2_list_num=newString[10];//存储各个进程所占有的资源2的数量privateJListallocation_resource3_list;//显示各个进程所占有的资源3的数量privateString[]allocation_resource3_list_num=newString[10];//存储各个进程所占有的资源3的数量privateJListneed_resource1_list;//显示各个进程所需要的资源1的数量privateString[]need_resource1_list_num=newString[10];//存储各个进程所需要的资源1的数量privateJListneed_resource2_list;//显示各个进程所需要的资源2的数量privateString[]need_resource2_list_num=newString[10];//存储各个进程所需要的资源2的数量privateJListneed_resource3_list;//显示各个进程所需要的资源3的数量privateString[]need_resource3_list_num=newString[10];//存储各个进程所需要的资源3的数量privateJListavailable_resource1_list;//显示资源1的库存数量privateString[]available_resource1_list_num=newString[]{10};//存储资源1的库存数量privateJListavailable_resource2_list;//显示资源2的库存数量privateString[]available_resource2_list_num=newString[]{5};//存储资源2的库存数量privateJListavailable_resource3_list;//显示资源3的库存数量privateString[]available_resource3_list_num=newString[]{7};//存储资源3的库存数量privateJTextFieldadd_ThreadName;//添加的进程的名字privateString[]name_num_add_ThreadName=newString[10];//存储所要添加的进程的名字}2、对于执行银行家算法的所用到的数据结构是一个内部类:classComputeDialogextendsJDialogimplementsActionListener{//银行家算法所用的变量privateint[][]work=newint[10][3];privateint[][]need=newint[10][3];privateint[][]allocation=newint[10][3];//以下是显示申请资源后进程和资源中类的情况privateJListthreadName0_list;privateJListmax0_resource1_list;privateJListmax0_resource2_list;privateJListmax0_resource3_list;privateJListneed0_resource1_list;privateJListneed0_resource2_list;privateJListneed0_resource3_list;privateJListallocation0_resource1_list;privateJListallocation0_resource2_list;privateJListallocation0_resource3_list;privateJListavailable0_resource1_list;privateJListavailable0_resource2_list;privateJListavailable0_resource3_list;//以下显示利用银行家算法执行后的各个进程和资源的结果privateJListthreadName1_list;privateJListmax1_resource1_list;privateString[]max1_resource1_list_num=newString[num_add_ThreadName];privateJListmax1_resource2_list;privateString[]max1_resource2
本文标题:操作系统课程设计 银行家算法报告
链接地址:https://www.777doc.com/doc-3169450 .html