操作系统课程设计(银行家算法).docx
《操作系统课程设计(银行家算法).docx》由会员分享,可在线阅读,更多相关《操作系统课程设计(银行家算法).docx(42页珍藏版)》请在三一办公上搜索。
1、操作系统课程设计题目:银行家算法的设计与实现院、 系: 计算机信息与技术系 学科专业: 计算机科学与技术 学 号: B10060123 学生姓名: 徐飞 指导教师 : 姜虹 2012年06月目录一、绪论1二、需求分析22.1银行家算法的描述22.2银行家算法模拟系统流程图32.3模拟系统用况分析42.4模拟系统用况规约42.4.1用况名称:创建进程42.4.2用况名称:执行进程5三、总体设计73.1系统的分层模型73.2系统部署73.3系统的静态模型8四、详细设计94.1交互层设计94.2交互逻辑层设计94.3控制层设计114.3进程层设计124.4资源层设计12五、系统实现145.1交互层的
2、实现145.2交互逻辑层的实现155.3控制层的实现185.3进程层的实现215.4资源层的实现22六、测试与分析246.1系统资源初始化测试246.2系统资源初始状态的设置246.3进程初始化测试246.4进程初始化设置256.5执行进程测试25课程设计总结26参考文献27附录A28一、绪论在具有多道程序并发执行能力的系统中,系统资源的利用率、进程执行的效率都大幅增加,但可能发生“死锁”的危险。所谓死锁,是指多个进程因竞争资源而造成的一种僵局,若无外力作用,这些进程都将永远不能再向前推进。而死锁产生的原因有两点:竞争资源和进程推进的顺序不合法。为了避免死锁,使得进程的执行能够顺利完成,引入银
3、行家算法进行解决。银行家算法是具有代表性的避免死锁的算法,由于该算法能用于银行系统现金贷款的发放而得名。银行家算法包含三个方面的内容:1) 相应的数据结构。2) 银行家算法。3) 安全性算法。其中相应的数据结构定义了银行家算法中需要使用的若干数据结构,银行家算法操作数据结构以为安全性算法提供检测现场,安全性算法则是检测现场是否出于安全态。系统的安全状态是指能够按照某种顺序,来为每个进程分配其所需资源,直至最大需求,使每个进程都可顺序完成。若系统不存在这样一个安全序列,则称系统出于不安全状态。39二、需求分析问题描述:银行家算法是避免死锁的有效办法,为了验证银行家算法可以避免死锁,需要编写程序模
4、拟银行家算法并加以验证。2.1银行家算法的描述银行家算法所涉及的数据结构:1) 可利用资源向量Avaliable它是一个vector向量,可被初始化任意长度,其中每一个元素代表一类可利用资源的数目。其值随着该类资源的分配和回收而动态的改变。2) 最大需求矩阵Max这是一个nm的矩阵,他定义了系统中n个进程中的每一个进程对m类资源的最大需求。3) 分配矩阵Allocation这是一个nm的矩阵,他定义了系统中每一类资源当前已分配给每一进程的资源数。4) 需求矩阵Need它是一个nm的矩阵,用以表示每一个进程尚需的各类资源数。以上三个矩阵间存在下述关系:Need=Max-Allocation银行家
5、算法:设Request是某一进程的请求向量。当进程发出请求后,系统按下列步骤进行检查:1) 如果RequestNeed,则转向步骤2;否则认为出错,因为他所需要的资源数已超过他所宣布的最大值。2) 如果RequestAvaliable,则转向步骤3;否则表示系统中尚无足够的资源,进程必须等待。3) 系统进行试分配:Avaliable=Avaliable-RequestAllocation=Allocation=RequestNeed=Need-Request4)系统执行安全性检查,若系统处于安全态,则正式将资源分配给进程;若处于不安全态,则将此次分配作废,回滚到分配前的状态,并通知进程等待。安
6、全性算法:1)设置两个工作向量工作向量Work。他表示系统可提供给进程继续运行所需要的各类资源数目,他含有m个元素,执行安全性算法开始时,Work=Avaliable。Finish。他表示系统是否有足够的资源分配给进程,使之运行完成,初始状态为Finishi=false;当有足够资源分配给进程时,Finishi=true。2)从进程集合中找到一个能满足下列条件的进程: Finishi=false NeedWork如找到,执行步骤3,否则,执行步骤43)当某一进程获得资源后,可顺利执行,直至完成,并释放出分配给他的资源,故应执行:Work= Work+ AllocationFinishi=tru
7、eGo to step 24)如果所有进程的Finishitrue,则表示系统处于安全状态;否则系统处于不安全状态。2.2银行家算法模拟系统流程图银行家算法模拟系统流程图如图2.1所示图 2.1 系统流程图2.3模拟系统用况分析银行家算法模拟系统的用况图如图2.2所示图 2.2 模拟系统用况图2.4模拟系统用况规约2.4.1用况名称:创建进程1.简要说明该用况描述用户如何通过使用模拟系统进行创建进程的工作。2.事件流2.1基本流1.数据合法性检查用户选择“创建进程”选项,系统对用户输入的合法性进行检查。2.提示用户输入创建进程的个数用户输入进程的个数。3.数据合法性检查对用户输入的数据进行合法
8、性检查4.初始化进程所需的资源量提示用户输入进程所需的资源量。5.数据合法性检查对用户输入的数据进行合法性检查2.2备选流备选流一:在基本流步骤1中,规则检查不通过,提示输入数据不合法,请重新输入。备选流二:在基本流步骤3中,规则检查不通过,提示输入数据不合法,请重新输入。备选流三:在基本流步骤5中,规则检查不通过,提示输入数据不合法,请重新输入。3.用例场景3.1成功场景成功初始化进程信息:基本流。3.2失败场景数据合法性检查不通过:备选流一。数据合法性检查不通过:备选流二。数据合法性检查不通过:备选流三。4.特殊需求无5.前置条件用户已初始化系统。6.后置条件显示安全序列。显示各数据结构信
9、息。显示输入数据有误,请重新输入。显示系统初始状态处于不安全态,进程创建失败,并退出系统。7.扩展点无2.4.2用况名称:执行进程1.简要说明该用况描述管理员如何使用执行进程功能测试银行家算法。2.事件流2.1基本流1.数据合法性检查用户选择“执行进程”选项,系统对用户输入的合法性进行检查。2.提示用户需要执行的进程编号用户输入进程号。3.数据合法性检查对用户输入的数据进行合法性检查4.输入进程请求向量用户按照提示输入请求向量。5.数据合法性检查检查用户输入数据的合法性。6.返回安全序列和各数据结构系统处理进程的请求向量,并返回安全序列和数据结构。2.2备选流备选流一:在基本流步骤1中,规则检
10、查不通过,提示输入数据不合法,请重新输入。备选流二:在基本流步骤3中,规则检查不通过,提示输入数据不合法,请重新输入。备选流三:在基本流步骤5中,规则检查不通过,提示输入数据不合法,请重新输入。备选流四:在基本流步骤6中,规则检查不通过,提示输入的请求向量有问题,请进程等待。3.用例场景3.1成功场景进程成功被分配资源:基本流。3.2失败场景数据合法性检查不通过:备选流一。数据合法性检查不通过:备选流二。数据合法性检查不通过:备选流三。数据不满足系统要求:备选流四。4.特殊需求无5.前置条件用户已创建进程。6.后置条件显示安全序列。显示各数据结构信息。显示输入数据有误,请重新输入。显示系统资源
11、不足进程需要等待。显示系统处于不安全态,进程需要等待。7.扩展点无三、总体设计3.1系统的分层模型图3.1 系统分层模型图系统的分层模型如图3.1所示。交互层:主要功能是为了与用户进行交互,包括系统的初始化,创建多个进程,置进程的请求向量。交互逻辑层:负责将用户的交互信息与控制层交换。进程层:主要功能是为了创建进程,并交给控制层进行管理。控制层:负责管理进程与资源,是整个系统的核心部分,银行家算法与安全性算法均在这一层中。资源层:主要负责管理各种资源向量或矩阵。3.2系统部署系统被部署在控制台运行。之所以选择控制台是因为可以让我们开发模拟系统的时候更加专注于业务,而不是花太多精力在非业务功能上
12、。3.3系统的静态模型图3.2 系统静态模型图模拟系统共有3个类、4中新的数据类型(其中4种新的数据类型用衍形加以定义)。1)_Resource类掌管全局的资源,各种数据结构都在其中定义,目的是要把操作与数据分离,便于程序的设计以及维护。其中M是资源的种类数,Available是可利用资源向量,Max是最大需求矩阵,Allocation是分配矩阵,Need是需求矩阵。2)_Process类是进程类,用来实例化进程。其中Request是需求向量。可用_Process来实例化任意个进程,从而使程序的扩展性、安全性以及结构都得到极大的提升。3)_Control类负责对系统现有的资源以及进程进行控制。
13、其中add_Process方法负责将进程添加到控制类中,run_Process方法就是银行家算法,而safeChecked方法就是系统安全性算法。四、详细设计4.1交互层设计由于系统是被部署在控制台上,所以交互层的实现比较简单。交互层的界面显示如图4.1所示。图4.1 模拟系统选择菜单4.2交互逻辑层设计交互逻辑层的作用是将用户的输入信息与控制层进行协作。vector create(_Resource &r,_Control &c)(创建进程)的设计如图4.2所示。图4.2 create函数流程图void run(vector &p,_Resource &r,_Control &c)(执行进程
14、)的设计如图4.3所示。图4.3 run函数流程图void out(vector &p,_Resource &r,_Control &c) 的设计如图4.4所示。图4.4 out函数流程图4.3控制层设计_Control类的设计。1) void add_Process(_Process &p,_Resource &r)方法的设计如图4.5所示。图4.5 add_Process方法流程图2) int run_Process(_Process &p,int n,_Resource &r)(银行家算法)的设计如图4.6所示。图4.6 银行家算法流程图3) bool safeChecked(_Reso
15、urce &r_2)(安全性算法)的设计如图4.7所示图4.7 安全性算法流程图4.3进程层设计类_Process的设计void init(_Resource &r)方法的设计如图4.8所示。图4.8 init方法的流程图4.4资源层设计类_Resource的设计void init()方法的设计如图4.9所示。图4.9 init方法的流程图五、系统实现系统的实现采用C+语言,并使用Microsoft Visual Studio 2010作为平台进行实现。5.1交互层的实现交互层被直接设计成main函数:int main()_Resource r;r.init();_Control c(r);v
16、ector p;bool is=false;while(true)int x;coutendl;cout1.创建进程endl;cout2.执行一个进程endl;cout3.退出x;if(cin.fail()cout您输入的数据不合法,请重新输入!endl;cin.clear();cin.sync();continue;elseif(x=0)cout您输入的数据不合法,请重新输入!endl;cin.clear();cin.sync();continue;cin.clear();cin.sync();break;switch(x)case 1:p=create(r,c),is=true;break
17、;case 2:if(is)run(p,r,c);elsecout您还未创建进程!endl;break;case 3:exit(0);default:cout输入数据不合法,请重新输入!endl;/输出各矩阵的状态out(p,r,c);return 0;5.2交互逻辑层的实现1.vector create(_Resource &r,_Control &c)(创建进程)的实现。vector create(_Resource &r,_Control &c)cout请输入需要创建的进程数目:i;if(cin.fail()cout您输入的数据不合法,请重新输入!endl;cin.clear();cin
18、.sync();continue;elseif(i=0)cout您输入的数据不合法,请重新输入!endl;cin.clear();cin.sync();continue;cin.clear();cin.sync();break;vector p;/进程初始化_Process aaa;for(int j=0;ji;j+)p.push_back(aaa);int x=0;for(vector:iterator iter=p.begin();iter!=p.end();iter+)coutPx初始化endl;(*iter).init(r);x+;/添加进程for(vector:size_type i
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 课程设计 银行家 算法

链接地址:https://www.31ppt.com/p-1651028.html