操作系统课程设计_第1页
操作系统课程设计_第2页
操作系统课程设计_第3页
操作系统课程设计_第4页
操作系统课程设计_第5页
已阅读5页,还剩59页未读 继续免费阅读

下载本文档

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

文档简介

1、搬百操作系统摆课程设计般题目捌:氨银行家算法的设皑计与实现昂院、 系佰: 办计算机信息与技敖术系 澳学科专业凹: 绊 叭计算机科学与技办术 哀学 号:吧 办 B1白0060123柏 啊学生姓名碍: 安 叭 埃 碍徐飞跋 懊 艾指导教师 翱:靶 办 姜虹 爸 奥 肮白挨201般2氨年隘06安月目录TOC o 1-3 h z u HYPERLINK l _Toc327507516 一、绪论 PAGEREF _Toc327507516 h 1 HYPERLINK l _Toc327507517 二、需求分析 PAGEREF _Toc327507517 h 2 HYPERLINK l _Toc3275

2、07518 2.1银行家算法的描述 PAGEREF _Toc327507518 h 2 HYPERLINK l _Toc327507519 2.2银行家算法模拟系统流程图 PAGEREF _Toc327507519 h 3 HYPERLINK l _Toc327507520 2.3模拟系统用况分析 PAGEREF _Toc327507520 h 4 HYPERLINK l _Toc327507521 2.4模拟系统用况规约 PAGEREF _Toc327507521 h 4 HYPERLINK l _Toc327507522 2.4.1用况名称:创建进程 PAGEREF _Toc3275075

3、22 h 4 HYPERLINK l _Toc327507523 2.4.2用况名称:执行进程 PAGEREF _Toc327507523 h 5 HYPERLINK l _Toc327507524 三、总体设计 PAGEREF _Toc327507524 h 7 HYPERLINK l _Toc327507525 3.1系统的分层模型 PAGEREF _Toc327507525 h 7 HYPERLINK l _Toc327507526 3.2系统部署 PAGEREF _Toc327507526 h 7 HYPERLINK l _Toc327507527 3.3系统的静态模型 PAGEREF

4、 _Toc327507527 h 8 HYPERLINK l _Toc327507528 四、详细设计 PAGEREF _Toc327507528 h 9 HYPERLINK l _Toc327507529 4.1交互层设计 PAGEREF _Toc327507529 h 9 HYPERLINK l _Toc327507530 4.2交互逻辑层设计 PAGEREF _Toc327507530 h 9 HYPERLINK l _Toc327507531 4.3控制层设计 PAGEREF _Toc327507531 h 11 HYPERLINK l _Toc327507532 4.3进程层设计 P

5、AGEREF _Toc327507532 h 12 HYPERLINK l _Toc327507533 4.4资源层设计 PAGEREF _Toc327507533 h 12 HYPERLINK l _Toc327507534 五、系统实现 PAGEREF _Toc327507534 h 14 HYPERLINK l _Toc327507535 5.1交互层的实现 PAGEREF _Toc327507535 h 14 HYPERLINK l _Toc327507536 5.2交互逻辑层的实现 PAGEREF _Toc327507536 h 15 HYPERLINK l _Toc32750753

6、7 5.3控制层的实现 PAGEREF _Toc327507537 h 18 HYPERLINK l _Toc327507538 5.3进程层的实现 PAGEREF _Toc327507538 h 21 HYPERLINK l _Toc327507539 5.4资源层的实现 PAGEREF _Toc327507539 h 22 HYPERLINK l _Toc327507540 六、测试与分析 PAGEREF _Toc327507540 h 24 HYPERLINK l _Toc327507541 6.1系统资源初始化测试 PAGEREF _Toc327507541 h 24 HYPERLIN

7、K l _Toc327507542 6.2系统资源初始状态的设置 PAGEREF _Toc327507542 h 24 HYPERLINK l _Toc327507543 6.3进程初始化测试 PAGEREF _Toc327507543 h 24 HYPERLINK l _Toc327507544 6.4进程初始化设置 PAGEREF _Toc327507544 h 25 HYPERLINK l _Toc327507545 6.5执行进程测试 PAGEREF _Toc327507545 h 25 HYPERLINK l _Toc327507546 课程设计总结 PAGEREF _Toc3275

8、07546 h 26 HYPERLINK l _Toc327507547 参考文献 PAGEREF _Toc327507547 h 27 HYPERLINK l _Toc327507548 附录A PAGEREF _Toc327507548 h 28一、绪论蔼在具有多道程序案并发执行能力的邦系统中,系统资坝源的利用率、进叭程执行的效率都笆大幅增加,但可肮能发生“死锁”稗的危险。所谓死邦锁,是指多个进氨程因竞争资源而半造成的一种僵局霸,若无外力作用颁,这些进程都将佰永远不能再向前啊推进。暗而死锁产生的原柏因有两点:竞争哎资源和进程推进罢的顺序不合法。熬为了避免死锁,哎使得进程的执行笆能够顺利完成

9、,敖引入银行家算法白进行解决。颁银行家算法是具扒有代表性的避免岸死锁的算法,由矮于该算法能用于搬银行系统现金贷蔼款的发放而得名敖。稗银行家算法包含搬三个方面的内容拌:颁相应的数据结构懊。银行家算法。安全性算法。袄其中相应的数据绊结构定义了银行澳家算法中需要使碍用的若干数据结蔼构,银行家算法安操作数据结构以爱为安全性算法提啊供检测现场,安巴全性算法则是检熬测现场是否出于案安全态。扳案系统的安全状态捌是指能够按照某爸种顺序,来为每捌个进程分配其所办需资源,直至最背大需求,使每个斑进程都可顺序完矮成。若系统不存碍在这样一个安全吧序列,则称系统皑出于不安全状态颁。二、需求分析暗问题描述:银行板家算法是

10、避免死氨锁的有效办法,搬为了验证银行家靶算法可以避免死爸锁,需要编写程扳序叭模拟银行家算法颁并袄加以验证。艾2.1白银行家算法的描敖述吧银行家算法所涉暗及的数据结构:拌可利用资源向量傲Avaliab矮le办它是一个扳vector扳向量,可被初始蔼化任意长度,其百中每一个元素代盎表一败类埃可利用资源的数绊目。其值随着该百类资源的分配和袄回收而动态的改瓣变。扳最大需求矩阵爱Max般这是一个背n鞍艾m颁的矩阵,他定义扒了系统中案n摆个进程中的每一昂个进程对把m佰类资源的最大需唉求。背分配矩阵芭Allocat碍ion懊这是一个癌n拌八m稗的矩阵,他定义唉了系统中每一类搬资源当前已分配捌给每一进程的资八

11、源数。佰需求矩阵搬Need笆它是一个哀n拌翱m背的矩阵,用以表捌示每一个进程尚办需的各类资源数扒。霸袄以上三个矩阵间把存在下述关系:按Need哀=傲Max蔼-傲Allocat鞍ion银行家算法:凹跋设摆Request板是某一进程的请靶求向量。当进程鞍发出请求后,系绊统按下列步骤进吧行检查:班如果邦Request叭Need隘,则转向步骤耙2爱;否则认为出错胺,因为他所需要袄的资源数已超过版他所宣布的最大啊值。胺如果扮Request跋Avaliab颁le耙,则败转向步骤哀3搬;否则表示系统碍中尚无足够的资熬源,进程必须等笆待。办系统进行试分配傲:艾Avaliab耙le芭=跋Avaliab罢le芭-

12、敖Request白Allocat埃ion熬=坝Allocat扮ion俺=把Request白Need捌=稗Need澳-按Request白4)矮阿系统执行安全性邦检查,若系统处澳于安全态,则正版式将资源分配给柏进程;若处于不哀安全态,则将此柏次分配作废,回扮滚到分配前的状肮态,并通知进程懊等待。安全性算法:搬埃1)瓣靶设置两个工作向唉量捌 eq oac(坝绊,1)跋工作向量奥Work搬。袄他表示系统可提熬供给进程继续运哎行所需要的各类哎资源数目,他含懊有笆m扒个元素,执行安案全性算法开始时隘,般Work版=百Avaliab埃le叭。靶 eq oac(搬败,2)佰Finish半。他表示系统是奥否有足

13、够的资源罢分配给进程,使皑之运行完成,初拜始状态为拔Finish鞍i=fal皑se靶;碍当有足够资源分爱配给进程时,跋Finish扮i=tru跋e拜。搬暗2)巴安从进程集合中找跋到一个能满足下蔼列条件的进程:案耙 eq oac(捌岸,1)昂 耙Finish靶i翱=false爸柏 eq oac(蔼艾,2)伴 哎Need疤Work袄绊如找到,执行步罢骤半3胺,否则,执行步鞍骤跋4疤版3)吧熬当某一进程获得稗资源后,可顺利罢执行,直至完成哀,并释放出分配澳给他的资源,故办应执行:艾皑瓣Work稗=绊 疤Work斑+稗 耙Allocat埃ion跋埃敖Finish癌i斑=true袄八伴G癌o to st

14、坝ep 2爸斑4)暗柏把如果所有进程的俺Finish爱i霸背true般,则表示系统处跋于安全状态;否把则系统处于不安瓣全状态。凹2.2笆银行家算法扮模拟系统吧流程图傲银行家算法模拟把系统流程图如图矮2.1伴所示笆图般 2.1 敖系统流程图跋2.3胺模拟系统用况分爱析澳银行家算法模拟罢系统的用况图如埃图扒2.2奥所示把图扒 2.2 邦模拟系统用况图瓣2.4埃模拟系统用况规傲约班2.4.1扮用况名称:斑创建进程版1.袄肮简要说明八唉矮该用况描述用户颁如何通过使用模懊拟系统进行创建啊进程的工作。2.事件流2.1基本流斑1.隘案数据合法性检查罢唉用户选择“创建拜进程”选项,系拔统对用户输入的邦合法性进

15、行检查伴。败2.败哎提示用户输入创柏建进程的个数班埃用户输入进程的跋个数。扮3.隘班数据合法性检查矮傲对用户输入的数扒据进行合法性检捌查挨4.版搬初始化进程所需俺的资源量颁爱提示用户输入进霸程所需的资源量澳。奥5.胺摆数据合法性检查唉罢对用户输入的数扒据进行合法性检摆查2.2备选流哎般备选流一:在基哀本流步骤岸1绊中,规则检查不霸通过,提示输入埃数据不合法,请吧重新输入。拔罢备选流办二按:在基本流步骤鞍3唉中,规则检查不敖通过,提示输入摆数据不合法,请斑重新输入。傲肮备选流三八:在基本流步骤癌5皑中,规则检查不疤通过,提示输入哎数据不合法,请版重新输入。3.用例场景盎3.1颁叭成功场景疤颁成功

16、初始化进程盎信息芭:基本流。爸3.2佰艾失败场景矮笆数据合法性检查扳不通过板:备选流一。皑昂数据合法性检查哀不通过拜:备选流袄二挨。般耙数据合法性检查拜不通过把:备选流绊三拔。4.特殊需求无5.前置条件蔼用户已奥初始化系统般。6.后置条件袄绊显示安全序列。疤盎显示各数据结构叭信息。跋叭显示输入数据有俺误,请重新输入拜。芭瓣显示系统初始状班态处于不安全态版,进程创建失败芭,并退出系统。7.扩展点无佰2.4.哎2扳用况名称:皑执行巴进程阿1.盎碍简要说明阿巴该用况描述管理俺员如何使用笆执行进程般功能安测试银行家算法安。2.事件流2.1基本流啊1.扒般数据合法性检查绊叭用户选择“熬执行胺进程”选项,

17、系稗统对用户输入的埃合法性进行检查蔼。耙2.爱扮提示用户班需要执行的进程敖编号吧霸用户输入进程胺号懊。斑3.爸哎数据合法性检查绊傲对用户输入的数皑据进行合法性检斑查癌4.胺翱输入进程请求向坝量啊按用户按照提示输百入请求向量。绊5.佰半数据合法性检查爸拌检查用户输入数爸据的合法性板。哀6.昂摆返回安全序列和胺各数据结构翱碍系统处理进程的暗请求向量,并返氨回安全序列和数翱据结构。2.2备选流白挨备选流一:在基扮本流步骤隘1阿中,规则检查不隘通过,提示输入半数据不合法,请稗重新输入。蔼暗备选流袄二哀:在基本流步骤扮3艾中,规则检查不唉通过,提示输入百数据不合法,请拌重新输入。扳败备选流三靶:在基本流

18、步骤拔5霸中,规则检查不懊通过,提示输入办数据不合法,请班重新输入。爱叭备选流四背:在基本流步骤捌6柏中,规则检查不氨通过,提示输入百的请求向量有问百题捌,请半进程等待稗。3.用例场景扳3.1俺笆成功场景胺进程成功被分配白资源哎:基本流。般3.2绊办失败场景坝数据合法性检查翱不通过八:备选流一。肮数据合法性检查傲不通过暗:备选流搬二瓣。懊数据合法性检查盎不通过鞍:备选流佰三摆。邦数据不满足系统拔要求半:备选流傲四隘。4.特殊需求无5.前置条件敖用户已叭创建进程隘。6.后置条件拔拌显示安全序列罢。扮摆显示各数据结构俺信息。熬佰显示输入数据有扮误,请重新输入邦。案伴显示系统资源不耙足进程需要等待把

19、。扮八显示系统处于不案安全态,进程需翱要等待。7.扩展点无三、总体设计斑3.1芭系统的分层模型暗图败3.1 袄系统分层模型图挨系统的分层模型皑如图扳3.1肮所示。捌交互层:主要功捌能是为了与用户拜进行交互,包括案系统的初始化,蔼创建多个进程,癌置进程的请求向奥量。柏交互逻辑层:负哎责将用户的交互扒信息与控制层交版换。傲进程层:主要功懊能是为了创建进敖程,并交给控制哀层进行管理。阿控制层:负责管扮理进程与资源,笆是整个系统的核柏心部分,银行家跋算法与安全性算敖法均在这一层中邦。哀资源层:主要负埃责管理各种资源坝向量或矩阵。3.2系统部署斑疤系统被般部署坝在控制台运行。袄之所以选择控制岸台是因为可

20、以让坝我们开发模拟系拌统的时候更加专办注于业务,而不百是花太多精力在摆非业务功能上。般3唉.3耙系统的静态模型傲图懊3.2 碍系统静态模型图摆模拟系统共有扮3稗个类、背4敖中新的数据类型皑(其中搬4般种新的数据类型按用衍形加以定义拌)。鞍1)袄癌_Resour捌ce皑类掌管全局的资疤源,各种数据结佰构都在其中定义胺,目的是要把操凹作与数据分离,耙便于程序的设计版以及维护。其中笆M懊是资源的种类数案,稗Availab般le绊是吧可利用资源向量败,挨Max安是最大需求矩阵哀,芭Allocat袄ion碍是分配矩阵,巴Need蔼是需求矩阵。澳2)伴袄_Proces斑s颁类是进程类,用疤来实例化进程。昂

21、其中碍Request白是需求向量。可哀用岸_Proces疤s败来实例化任意个矮进程,从而使程绊序的扩展性、安凹全性以及结构都耙得到极大的提升暗。般3)八傲_Contro奥l办类负责对系统现扮有的资源以及进哎程进行控制。其胺中白add_Pro捌cess拔方法负责将进程邦添加到控制类中靶,奥run_Pro熬cess捌方法就是银行家拔算法,而熬safeChe八cked芭方法就是系统安哎全性算法。四、详细设计俺4.1皑交互层设计艾半由于系统是被部懊署在控制台上,班所以交互层的实案现比较简单。交摆互层的界面显示般如图敖4.1埃所示。半图哎4.1 埃模拟系统选择菜爱单扮4.2霸交互逻辑层设计艾百交互逻辑层

22、的作靶用是将用户的输版入信息与控制层挨进行协作。把vector crea熬te(_Res拌ource &罢r,_Cont岸rol &c板)背(创建进程)的靶设计如图柏4.2巴所示。阿图吧4.2 cre安ate办函数流程图唉void俺 run(ve癌ctor罢 &p,_Re肮source 奥&r,_Con挨trol &c爱)把(执行进程)的唉设计如图败4.3佰所示。蔼图半4.3 笆run熬函数流程图傲void斑 out(ve碍ctor八 &p,_Re艾source 埃&r,_Con板trol &c般)败 昂的设计如图罢4.4办所示。艾图摆4.4 out皑函数流程图肮4.3板控制层设计皑_Cont

23、ro八l矮类的设计。芭void啊 般add_Pro奥cess(_P碍rocess 耙&p,_Res盎ource &案r)岸方法的设计如图笆4.5绊所示。隘图巴4.5 啊add_Pro扒cess懊方法流程图鞍int皑 翱run_Pro矮cess(_P按rocess 吧&p,岸int捌 n,_Res坝ource &捌r)挨(银行家算法)版的设计如图拌4.6暗所示。埃图傲4.6 袄银行家算法流程唉图柏bool百 safeCh板ecked(_俺Resourc叭e &r_2)芭(安全性算法)挨的设计如图艾4.7邦所示瓣图敖4.7 白安全性算法流程巴图碍4.3皑进程层设计按类袄_Proces把s办的设计哀

24、void斑 init(_啊Resourc挨e &r)盎方法的设计如图耙4.8扒所示。坝图盎4.8 ini拜t叭方法的流程图唉4.4瓣资源层设计奥类阿_Resour芭ce埃的设计败隘void霸 init()袄方法的设计如图班4.9矮所示。艾图跋4.9 ini伴t半方法的流程图五、系统实现袄系统的实现采用伴C+碍语言,并使用罢Microso拔ft Visu矮al Stud安io 2010挨作为平台进行实肮现。皑5.1霸交互层的实现佰交互层被直接设傲计成罢main挨函数:哎int熬 main()皑盎耙_Resour坝ce r;佰哀r.init(捌);啊搬_Contro搬l c(r);翱版vector

25、 p;澳稗bool霸 is=傲false矮;拌暗while哎(氨true疤)盎敖哎int癌 x;拌邦矮coute哀ndl;般搬绊cout岸1.扮创建进程熬哀endl;把巴罢cout拜2.肮执行一个进程捌绊endl;胺坝阿cout耙3.办退出暗笆x;唉扒瓣扳if澳(cin.fa颁il()盎癌澳熬皑cout笆扒您输入的数据不凹合法,请重新输跋入!案扮endl;暗拌扮氨笆cin.cle耙ar();哀拔唉按奥cin.syn跋c();隘皑拜阿翱continu板e坝;岸扒斑百else鞍把扮摆敖稗if柏(x=0)叭俺鞍办把案cout柏哎您输入的数据不白合法,请重新输拔入!胺挨endl;癌捌半安昂背cin.c

26、le按ar();扳耙伴岸胺盎cin.syn叭c();坝八板扮蔼鞍continu瓣e挨;搬办叭案cin.cle埃ar();背矮艾摆cin.syn白c();半扒疤氨break办;耙版扳switch捌(x)傲熬霸case安 1:p=cr哎eate(r,罢c),is=啊true败;岸break翱;胺奥绊case胺 2:艾if隘(is)run稗(p,r,c)傲;罢else背cout百埃您还未创建进程绊!靶绊endl;熬案break扳;阿案百case邦 3:exit巴(0);埃跋拌default般:cout胺岸输入数据不合法敖,请重新输入!碍俺endl;拔柏肮/佰输出各矩阵的状敖态伴吧半out(p,r俺,

27、c);氨般return拜 0;哀5.2靶交互逻辑层的实氨现搬1.艾岸vector crea翱te(_Res皑ource &半r,_Cont坝rol &c柏)摆(创建进程)的把实现。澳奥vector crea哀te(_Res版ource &佰r,_Cont柏rol &c)按哎挨cout凹隘请输入需要创建翱的进程数目:跋般i;搬白奥if懊(cin.fa奥il()肮艾稗坝cout隘般您输入的数据不矮合法,请重新输败入!版隘endl;佰昂挨靶cin.cle芭ar();绊暗蔼芭cin.syn皑c();懊懊扳佰continu隘e挨;else办碍哀傲if澳(i=0)板坝熬隘爸cout白哀您输入的数据不版合法

28、,请重新输俺入!霸败endl;霸拌挨班扳cin.cle傲ar();摆碍肮办罢cin.syn案c();摆袄白瓣矮continu背e拜;凹邦柏cin.cle俺ar();懊搬办cin.syn柏c();瓣斑袄break罢;拜隘vector p;八袄埃/拌进程初始化傲癌_Proces班s aaa;扮捌for伴(靶int坝 j=0;j氨i;j+)坝稗邦p.push_拜back(aa半a);奥爱int袄 x=0;跋翱for暗(vector翱:it暗erator 坝iter=p.氨begin()哀;iter!=皑p.end()皑;iter+扒)稗案蔼cout瓣P板x案扮初始化俺安endl;疤盎埃(*iter)

29、皑.init(r柏);x+;/添加进程肮瓣for奥(vector盎:si瓣ze_type按 index=艾0;index班!=p.siz坝e();ind摆ex+)暗挨艾c.add_P芭rocess(跋pindex澳,r);罢扮八/盎初始安全态检查柏伴if白(c.safe板Checked百(r);else霸败唉cout背斑系统初始状态不霸安全!板胺endl;啊俺敖system(耙pause伴);搬扮拔exit(0)澳;奥背return绊 p;俺2.蔼稗void阿 run(ve扮ctor扒 &p,_Re拜source 懊&r,_Con佰trol &c艾)霸(执行进程)的凹实现疤瓣void柏 run

30、(ve俺ctor坝 &p,_Re白source 艾&r,_Con霸trol &c疤)昂阿爸int笆 i;敖扒柏cout拌扮请输入需要执行稗的进程号:肮哀i;把癌傲摆if败(cin.fa埃il()隘佰傲版蔼cout蔼矮您输入的数据不傲合法,请重新输懊入!奥唉endl;罢柏胺稗傲cin.cle埃ar();阿奥爸霸爱cin.syn袄c();半板百拔版continu岸e颁;般癌吧办else败斑霸碍碍斑if伴(i0)俺昂哀昂扮奥cout阿稗您输入的数据不胺合法,请重新输暗入!扳绊endl;按矮拔袄坝瓣cin.cle芭ar();吧安背芭啊袄cin.syn八c();板笆俺叭拌熬continu瓣e案;叭拔败靶

31、cin.cle百ar();板疤扳碍cin.syn板c();氨隘哎百break奥;百暗哎cout岸敖初始化第绊袄i癌拌个进程的请求向埃量:安吧endl;皑拔傲/笆置进程的资源请扒求向量巴靶芭for巴(vector翱:size啊_type s坝z=0;sz!挨=pi.R安equest.靶size();百sz+)扒俺败cout捌傲请输入请求向量盎的第捌白sz颁摆个值:蔼芭k;靶斑疤百if拜(cin.fa叭il()扒碍搬芭矮cout案拜您输入的数据不癌合法,请重新输百入!罢败endl;肮昂按百俺cin.cle熬ar();邦疤碍背叭cin.syn安c();芭按坝白班continu唉e捌;伴疤澳绊else

32、稗盎柏拔隘傲if坝(k=0)挨叭芭隘跋啊cout案阿您输入的数据不摆合法,请重新输百入!敖叭endl;办埃俺白氨懊cin.cle班ar();瓣笆翱凹安扒cin.syn把c();罢班坝蔼拌靶continu班e爸;挨败暗鞍cin.cle罢ar();啊唉哎爸cin.syn吧c();百蔼霸伴break胺;皑耙碍pi.Re爱quests办z=k;氨盎c.run_P啊rocess(胺pi,i,般r);澳3.邦扒void懊 out(ve啊ctor矮 &p,_Re按source 颁&r,_Con盎trol &c岸)邦 氨的把实现皑。霸皑void疤 out(ve岸ctor皑 &p,_Re凹source 碍&r,

33、_Con懊trol &c瓣)翱搬/百输出阿Availab绊le摆矩阵扮办cout疤Availa伴ble:隘endl;隘白for吧(vector柏:size爸_type s奥z=0;sz!爸=r.Avai斑lable.s唉ize();s捌z+)搬把俺coutr罢.Availa矮blesz袄碍 爱;盎蔼coute哎ndl;肮八/扳输出敖Max八矩阵半吧cout搬Max:袄endl;氨拜for伴(vector罢:siz敖e_type 熬i=0;ir芭.Max.si巴ze();i+埃+)扳矮半for白(vector笆:size疤_type s颁z=0;sz斑r.Maxi挨.size(矮);sz+)翱办

34、鞍艾跋coutr肮.Maxi按sz摆 凹;艾败啊coute版ndl;拜埃/Alloc柏ation把矩阵颁哎cout白Alloca巴tion:背endl;扮啊for扳(vector案:siz邦e_type 邦i=0;ir拔.Alloca叭tion.si鞍ze();i+佰+)俺坝案for矮(vector叭:size稗_type s哀z=0;sz敖r.Alloc癌ationi坝.size(癌);sz+)摆把邦哀按coutr蔼.Alloca笆tioni扒sz翱 般;靶摆败coute八ndl;搬案/碍输出需求矩阵暗败cout隘Need:跋endl;俺跋for叭(vector拌:si坝ze_type霸 i

35、=0;i袄r.Need.跋size();版i+)叭败搬for败(vector柏:size吧_type s矮z=0;sz败r.Need半i.size鞍();sz+唉)伴澳暗把coutr捌.Needi耙sz敖 癌;敖熬疤coute半ndl;扳5背.3暗控制层的实现翱_Contro拔l凹类的耙实现版。捌1.班碍void斑 add_Pr阿ocess(_颁Process斑 &p,_Re疤source 芭&r)熬方法的实现。阿啊void案 add_Pr胺ocess(_哀Process矮 &p,_Re澳source 背&r)霸蔼N+;昂艾/按进程数加胺1版翱/巴置最大需求矩阵扮搬Max_row笆 mr;疤捌

36、for癌(vector胺:iter把ator it扳er=p.Re班quest.b坝egin();矮iter!=p敖.Reques俺t.end()傲;iter+哀)八柏爱mr.push安_back(*瓣iter);盎哎r.Max.p把ush_bac板k(mr);凹挨/俺置分配矩阵矮芭Allocat俺ion_row拌 ar;拜氨for跋(袄int拌 i=0;i凹r.getM(暗);i+)傲隘扒ar.push霸_back(0办);坝安r.Alloc板ation.p拜ush_bac白k(ar);碍耙/皑置需求矩阵岸扳Need_ro百w nr;哀鞍for瓣(vector氨:iter跋ator it拌e

37、r=p.Re胺quest.b皑egin();蔼iter!=p拌.Reques凹t.end()芭;iter+埃)挨安芭nr.push摆_back(*绊iter);巴敖r.Need.氨push_ba白ck(nr);哎板2.坝肮int俺 run_Pr瓣ocess(_版Process唉 &p,懊int奥 n,_Res肮ource &把r)班(银行家算法)柏的设计如图扳4.6熬所示。巴int阿 run_Pr瓣ocess(_巴Process俺 &p,暗int跋 n,_Res跋ource &敖r)稗叭/柏先判断扮Request矮=Need败盎bool邦 temp_1暗=凹true安;搬奥for摆(vecto

38、r艾:size稗_type i挨ndex=0;般index!=邦p.Reque皑st.size跋();inde暗x+)班懊啊if矮(p.Requ半estind皑exr.N芭eedn白index)敖绊按爸八cout般霸请求出错!因为伴进程所需要的资靶源数已超过它所百宣布的最大值。罢矮endl;把扒稗靶return版 1;奥柏/唉再判断稗Request隘=Avail奥able澳芭for肮(vector盎:size按_type i败ndex=0;皑index!=艾p.Reque版st.size捌();inde傲x+)捌捌稗if阿(p.Requ蔼estind蔼exr.A俺vailabl暗eindex懊

39、)暗百癌熬cout安办系统中尚无足够笆的资源,扒P邦n伴败必须等待!半芭endl;皑巴稗百return按 2;袄敖/胺进行试分配昂矮_Resour巴ce r_1=耙r;瓣半vector:iter罢ator it唉er_2=r_隘1.Avail敖able.be哎gin();半蔼vector:iter拜ator it稗er_3=r_隘1.Alloc翱ationn半.begin阿();扒瓣vector:iter吧ator it阿er_4=r_爱1.Need摆n.begi敖n();安盎for稗(vector隘:iter扮ator it凹er_1=p.矮Request瓣.begin(跋);iter_耙1

40、!=p.Re熬quest.e般nd();it哀er_1+)癌叭拔笆/Avail肮able:=A翱vailabl翱e-Reque稗st盎版跋*iter_2稗=*iter_耙2-*iter叭_1;般扳奥/Alloc癌ation:=癌Allocat百ion+Req罢uest坝般跋*iter_3拜=*iter_拔3+*iter隘_1;隘靶拔/Need:啊=Need-R懊equest碍办佰*iter_4斑=*iter_扳4-*iter办_1;盎拔八/绊迭代器移向下一把个元素挨啊颁iter_2+佰+;懊爱爸iter_3+斑+;扒半败iter_4+安+;耙氨/挨执行安全性检查扒矮if扮(safeCh捌eck

41、ed(r班_1)靶阿瓣r=r_1;扒半败/瓣判断此进程是否疤获得所有资源,哎若获得,则让其坝执行完毕后释放伴扳般bool岸 temp=案true芭;奥翱矮for般(拜int般 i=0;i斑r.getM(跋);i+)艾敖盎笆if败(r.Need盎ni!阿=0)敖暗摆傲皑temp=傲false唉;佰扒傲败按break背;鞍安霸if胺(temp)爸安百/翱置最大需求矩阵百把爱for坝(斑int霸 i=0;i熬r.getM(挨);i+)盎跋奥袄r.Maxn斑i=0;癌懊爱/版且置可利用资源翱向量坝坝奥for啊(靶int班 i=0;i安r.getM(罢);i+)捌艾把艾r.Avail疤ablei蔼+=r

42、.All敖ocation艾ni;哀哀耙澳r.Alloc挨ationn埃i=0;胺拜挨cout拜扮进程袄P拌n背敖执行完毕,已释澳放资源!胺败endl;懊版背return哎 0;else板懊班cout按按系统不处于安全靶态,暗P阿n背艾进程需要等待安熬endl;搬摆般return敖 3;按3.佰懊bool坝 safeCh碍ecked(_吧Resourc捌e &r_2)拔(安全性算法)阿的实现。靶艾bool巴 _Contr板ol:saf稗eChecke唉d(_Reso跋urce &r按_2)捌安vector Work;叭哎/哀初始化工作向量摆胺for敖(vector笆:iter办ator it昂e

43、r=r_2.瓣Availab八le.begi笆n();ite芭r!=r_2.隘Availab癌le.end(鞍);iter+白+)八罢稗Work.pu佰sh_back傲(*iter)斑;岸案vector Finis芭h;柏摆for岸(vector按:it办erator 搬iter=r_邦2.Need.吧begin()瓣;iter!=盎r_2.Nee吧d.end()爱;iter+败)俺耙哀Finish.靶push_ba扳ck(佰false罢);摆佰/碍找出扳Finish胺i=fals盎e唉且懊Need=W半ork昂的项step2:八疤for邦(vector昂:size败_type i稗=0;i!

44、=r暗_2.Need爱.size()半;i+)阿矮八if氨(!Finis昂hi)罢碍斑坝bool斑 temp=背false唉;捌皑案班for安(vector罢:size靶_type i岸ndex=0;唉index!=俺Work.si懊ze();in埃dex+)扮摆背白唉癌if岸(r_2.Ne氨edii瓣ndex=伴Workin瓣dex)叭稗瓣皑熬般氨temp=昂true瓣;败摆凹佰吧盎else安哀艾疤挨俺袄皑temp=版false傲;叭澳凹靶哎吧奥break颁;案啊胺凹if隘(temp)罢敖八板鞍vector:iter按ator it跋er_2=r_笆2.Alloc板ationi蔼.begin

45、案();巴阿扮板拌for摆(vector傲:iter拜ator it唉er_1=Wo拜rk.begi版n();ite罢r_1!=Wo盎rk.end(扮);iter_搬1+)澳百笆邦拔癌*iter_1佰=*iter_澳1+*iter背_2;柏邦巴霸爸巴iter_2+案+;笆半吧芭吧cout爱P疤i笆 半;熬白翱白斑Finish芭i=澳true稗;绊阿懊蔼颁goto哀 step2;叭芭懊半/班本来不应该使用伴goto俺语句,但由于在疤此使用把goto皑语句更显方便,版故坝破例用之笆斑/拔判断所有进程斑Finish半是否都为笆true挨,是则返回颁true凹,否则返回盎false耙案for袄(vec

46、tor哀:size阿_type i肮ndex=0;板index!=伴Finish.败size();伴index+唉)澳懊挨if埃(Finish拔index敖);else盎挨摆拜return阿 盎false伴;扳碍return凹 靶true笆;袄5懊.3绊进程层的实现疤类爸_Proces阿s佰的设计疤void懊 init(_般Resourc稗e &r)耙方法的实现。摆void挨 init(_拔Resourc半e &r)板矮for凹(扮int叭 i=0;i芭r.getM(扒);i+)埃艾挨int鞍 temp;把安颁while奥(暗true摆)盎傲/*稗输入数据合法性八检查版*/埃靶背艾cout扳捌

47、请输入第拌哀i+1罢班类资源的需求量叭:敖疤te矮mp;爸坝板柏if氨(cin.fa巴il()伴版吧鞍艾cout爸搬您输入的数据不皑合法,请重新输奥入!啊皑endl;胺斑捌八袄cin.cle艾ar();佰瓣版版肮cin.syn巴c();阿胺靶斑芭continu扒e胺;百扳百爸else伴斑啊碍罢班if霸(temp=罢0)败巴矮伴稗敖cout瓣板您输入的数据不柏合法,请重新输安入!碍皑endl;扮凹靶艾暗碍cin.cle斑ar();拔奥俺办扒伴cin.syn疤c();哀版碍拌扒矮continu班e扳;靶稗唉跋cin.cle扳ar();稗皑吧俺cin.syn颁c();傲疤埃办break蔼;版芭岸Re

48、quest肮.push_b鞍ack(tem吧p);邦5鞍.4靶资源层的实现疤类皑_Resour案ce岸的设计俺void懊 init()坝方法的实现。昂void柏 _Resou版rce:in袄it()蔼隘while袄(袄true肮)埃/*败输入数据合法性搬检查哀*/爸扮靶胺cout耙袄请初始化系统资胺源种类数:八捌M;败案叭if哀(cin.fa翱il()懊摆安盎cout唉百您输入的数据不疤合法,请重新输罢入!板爸endl;扒艾俺巴cin.cle翱ar();败班板阿cin.syn氨c();吧坝碍啊continu碍e搬;背胺皑叭else芭摆笆耙胺澳if昂(M=0)百暗霸挨拌鞍cout罢哎您输入的数据

49、不氨合法,请重新输袄入!袄耙endl;笆瓣八柏安敖cin.cle阿ar();蔼扳把氨伴吧cin.syn板c();捌办笆办癌哎continu懊e澳;拜疤傲芭cin.cle翱ar();颁跋暗搬cin.syn叭c();稗伴哀稗break鞍;安罢for癌(凹int拌 i=0;i把M;i+)熬斑鞍int百 temp;邦八拜while佰(柏true瓣)般/*拜输入数据合法性安检查半*/笆埃挨傲cout凹昂请初始化系统中暗第哎阿i+1爱背类资源的数目:案败te霸mp;爱把岸爸if暗(cin.fa胺il()埃半疤阿芭cout艾罢您输入的数据不傲合法,请重新输挨入!岸搬endl;绊把哀爱伴cin.cle昂ar(

50、);白拌昂翱般cin.syn袄c();胺扒昂皑摆continu翱e癌;凹搬爸捌else案埃半氨霸般if啊(temp=败0)俺懊胺胺罢盎cout懊胺您输入的数据不矮合法,请重新输耙入!拔扒endl;哎半埃半跋伴cin.cle般ar();皑坝疤坝暗笆cin.syn矮c();案懊坝佰矮把continu盎e扳;懊暗扒蔼cin.cle傲ar();阿啊搬背cin.syn罢c();碍奥绊澳break挨;叭搬艾Availab百le.push班_back(t唉emp);六、测试与分析瓣本测试均采用黑俺盒测试隘6.1扒系统资源初始化唉测试安测试用例拜预期结果爸实际结果肮请输入资源种类绊数:任意非数字斑字符氨1.哎

51、应提示“输入数案据不和法,请重疤新输入!”笆请输入资源种类扳数:负整数爱1.肮应提示“输入数笆据不和法,请重搬新输入!”哎6.2啊系统资源初始状把态的设置吧Availab疤le=7,5斑,3班具体的设置如图疤6.1艾所示。拜图澳6.1 芭初始资源的设置翱6.3叭进程初始化测试拜测试用例盎预期结果岸实际结果按请输入你所需要背创建的进程数:埃3办1.艾不应提示错误信盎息捌初始化各类资源捌需求量百P0八的胺Request艾=4,4,4傲背P半1摆的斑Request胺=1,1,1伴般P鞍2捌的板Request版=1,1,1鞍埃应提示“系统初俺始状态不安全!碍”霸提示“按任意键捌退出系统伴半”百6.4艾

52、进程初始化设置阿P0昂的八Request爱=袄1矮,隘2吧,耙3暗哎P按1稗的奥Request隘=1,爱2斑,耙2扒柏P伴2傲的霸Request俺=1,捌2颁,败2背挨6.5把执行进程测试拔测试用例奥预期结果跋实际结果碍请输入你所需要巴执行的进程号:扳0笆并置奥Request绊=4,4,4哎敖1.摆应提示请求出错盎信息,所需的资拜源超过其所宣布岸的最大值矮请输入你所需要拜执行的进程号:俺1跋并置佰Request八=1,1,1靶碍应直接输出安全袄序列哎输出各数据结构吧现状哎请输入你所需要敖执行的进程号:氨0熬并置摆Request背=1,2,3扒盎应提示系统资源哎不足,拌P0唉进程需等待扳输出各数

53、据结构安现状百请输入你所需要靶执行的进程号:百0坝并置碍Request奥=1,2,2案扒应提示耙系统处于不安全班态,癌P0板进程需等待盎输出各数据结构氨现状伴请输入你所需要疤执行的进程号:奥1阿并置懊Request版=0,1,1按瓣输出安全序列办提示进程鞍P1癌执行完毕并释放笆资源柏输出各数据结构伴现状课程设计总结澳在这次的课程设哎计中,我发现大扮多数情况下我们敖在做一个项目时伴,并不是一开始爸就具备完成这项拌项目的所有知识埃。这就要求我们芭学会怎样去快速隘的学会做项目所班需要的全部知识埃。遇到有些不会背处理的,我会上版网去查,查一些皑对象、容器隘的用法,如翱vector鞍等斑容器巴。以前我对

54、这些白对象叭或容器靶的用法并不是太班熟悉,但现在我案不仅掌握了他们拌的使用方法,更肮重要的是我学会岸了如何去学习,肮然后快速地应用扳到我所需要的项暗目当中。耙在做这个熬银行家算法模拟岸系统敖时,我把它当作唉了一个产品去做扮,所以每个细节版考虑的虽不完全绊,但也周到。但肮这并不能说明什阿么,因为很多软凹件都是通过升级疤的方式来弥补自摆身的缺陷,我的败银行家算法模拟颁系统盎也是如此。在使半用之中发现问题胺后再去积极的修澳改问题,使得软埃件越来越完善。案而且只有这样才隘是软件开发必经敖之路,因为没有叭什么事物一生下岸来就是完美的,靶都是在通过追求啊卓越的过程中完爸善自己,继而达败到巅峰的。笆在这次的

55、课程设蔼计中我还领悟了班一个重大的问题斑:在开发一个软矮件的过程中,把埃整个系统的框架疤准确的描述出来搬是非常重要的。鞍因为我们后面的瓣编码式样在整个挨系统框架的基础白之上进行的,如笆果系统框架在搭拌建的时候出现了敖模块的冲突,那背会影响整个软件白开发的进度,最柏终就会引发软件摆危机。而这是我白们所不希望看到癌的。所以,在软跋件开发之前,一稗定要详细的讨论版整个系统的框架瓣,确保合理的情哎况下再进行下一疤步工作,严格的拌把开发软件真正瓣的当成一项工程背来对待。八在编码方面,我扮发现良好的代码岸风格是成功的一靶半。在编码的过胺程中需要时常进霸行修改,如果程懊序的可读性不强矮,代码量又庞大绊的话,

56、那么对于邦编码人员来说是袄一件非常不幸的版事情,因为他必摆须时常让他的大八脑工作在“超频癌”状态,这样总肮有一天会“烧掉疤”的。所以养成背良好的代码书写安风格是非常重要拌的。笆总而言之,通过敖一次的课程设计蔼,不仅对这门课班程的知识掌握更柏加牢固了,还学昂到了关于以后从拔事计算机方面工般作的一些方法论碍。罢最后,用一句话哀总结这次的课程艾设计收获多伴多。参考文献笆1 佰汤子瀛扮,z熬哲凤屏哎,绊汤小丹唉.案计算机操作系统霸M.隘西安搬:扮西安电子科技大翱学出版社,碍2002佰年芭2鞍月哎.背2 Gra扮dy Booc澳h疤,鞍James R俺umbaugh唉,案Ivar Ja扮ckbson.暗

57、UML办用户指南(第氨2隘版)邦M.叭北京颁:罢人民邮电出版社坝,唉2006熬年拔6拌月吧.案哀3搬 矮张海藩白.皑软件工程导论(爱第耙5翱版)稗M.芭北京败:佰清华大学出版社摆,暗2008胺年鞍8邦月摆.附录A源程序清单:耙_Contro拌l.h版文件白#pragma绊 once爸#includ隘e_Reso埃urce.h柏#includ矮e_Proc邦ess.h耙class _哀Control鞍颁private伴:蔼袄int N;敖板/翱进程的个数俺_Resour拜ce &r;public:百坝_Contro巴l(_Reso懊urce &r摆);熬癌_Contr翱ol(void氨);败把v

58、oid ad败d_Proce哎ss(_Pro哀cess &p暗,_Resou吧rce &r)啊;皑皑啊/艾增加一个新的进芭程芭暗void de肮c_Proce俺ss();暗背肮/拔删除一个进程盎阿int run靶_Proces捌s(_Proc芭ess &p,翱int n,_蔼Resourc八e &r);拌爸蔼/隘开始执行进程(爸银行家算法)唉昂bool sa皑feCheck敖ed(_Res熬ource &拜r_2);搬耙瓣/佰安全性检查程序;颁_Contro绊l.耙cpp啊文件澳#includ坝e _Con暗trol.h颁#includ唉e绊using s稗td:cou拌t;鞍using s奥

59、td:cin版;版using s翱td:end捌l;熬_般Control奥:_Cont跋rol(_Re碍source 跋&r)耙N=0;瓣_Contro捌l:_Co懊ntrol(v熬oid)板void _C爸ontrol:瓣:add_Pr挨ocess(_蔼Process蔼 &p,_Re敖source 熬&r)扮懊爱N+;笆叭/啊进程数加佰1佰绊/办置最大需求矩阵扮拔Max_row袄 mr;办艾for(vec扒tor:iter暗ator it版er=p.Re阿quest.b八egin(埃);iter!般=p.Requ捌est.end柏();iter安+)邦熬拜颁mr.push奥_back(*笆i

60、ter);矮笆r.Max.p班ush_bac暗k(mr);耙哀/把置分配矩阵傲版Allocat背ion_row傲 ar;拌埃for(int拌 i=0;i挨r.getM(坝);i+)阿岸坝ar.push罢_back(0碍);背捌r.Alloc邦ation.p霸ush_bac袄k(ar);安翱/阿置需求矩阵癌八Need_ro拌w nr;耙捌for(vec艾tor:iter把ator it安er=p.Re袄quest.b哀egin(皑);iter!芭=p.Requ皑est.end肮();iter埃+)邦熬挨癌nr.push拔_back(*绊iter);凹扒r.Need.安push_ba败ck(nr)

温馨提示

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

评论

0/150

提交评论