《2023年时间片轮转调度算法实验报告.docx》由会员分享,可在线阅读,更多相关《2023年时间片轮转调度算法实验报告.docx(17页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、XX大学操作系统实验报告姓名:学号:班级:实脸日期:实验名称:时间片轮转RR进程调度算法实验二时间片轮转R R进程调度算法I.实验目的:通过这次实验,理解时间片轮转RR进程调度算法的运营原理,进一步 掌握进程状态的转变、进程调度的策略及对系统性能的评价方法。2.需求分析(1 ) 输入的形式和输入值的范围;输入:进程个数n输入:进程个数n范围:0 vnv= 1 0 0时间片q依次输入(进程名。进程到达时间a进程服务时间)。(2)输出的形式进程名到达时间服务时间完毕时间周转时间带权周转时间所有进程平均周转时间: 所有进程平均带权周转时间:自己的动手能力,通过实践加深了记忆。5、用户使用说明程序的使
2、用说明,列出每一步的操作环节。输入进程个数和时间篇长度按到达时间从小到大顺序输入进程名,到达时间利预计服务时间运营队首讲科讲程运营时间-时间片时间7、附录带注释的源程序,注释应清楚具体# include #include incl u de # i n c 1 ude def i ne Max Num 10 0usin g n a mespac e s t d;typcdef structchar n am e :1 n t Ar r iva 1 T i me;n t Ser v iceT i me;in t F i n ish e dTim e ;int WhoieT i me;d o u
3、b 1 e We i ghtWhol e T i me;RR;s t atic q u e u e RR q u e u e ; 声明一个队歹Ust a t ic d ouble Average WT=0, Avera g eWWT= 0 ;static i nt q ; 时间片st a t i c int n;进程个数s t a t i c RRRRa rrayMaxNum; 进程结构v o id Input()/文献读取模式ifstr e a m i n D a ta;i nDat a . o p e n (. /dat a 4. t xt);121乩1*1表达0= 4的RR调度算法/da
4、ta2.t x t表达q = 1的R R调度算法in D ata n ;i n D a t aq ;for (int i=0;iRR a rrayi.n a me;)for(i=0;iRRar r ayi. ArrivalT i me;f or ( i =0; in;i+)i n DataRR a r r ayi .Se r vi c e Time;/用户输入模式coutH 大 * * * * * * * * * * * * * * * * * * * * * * *cn d 1 c out n;coutVv”请输入时间片q : ”;cinq;cout ”请按到达时间的顺序依次输入进程名: e
5、 ndl;fo r ( i = 0 ; i RRarrayf i .name;)co u tvv”请从小到大输入进程到达时间:vV e nd 1 ;for ( i =0; i RRarray i .A r r i v a ITime;)cout ”请按到达时间的顺序依次输入进程服务时间:“end 1 ;for ( i =0; in;i+)cinRRarr a yi.Se r vic e T im e ;)co u tn * * * * * * * * * * * * * * * * * *nc n dP输出用户所输入的信息cout The i nf o rmat i on o f pr o c
6、 e sses is the folio wing: e n di;c o utsetw(10) ” 进程名”Vv ”;cout s e t w(10)V到达时间“” ”;cou t setw (10) vV”服务时间“ endl;for ( i=0;in;i+)(cou t setw(10)RR a r r a y i J. n a menc out s etw ( 1 0)RRarray i.Arri v alTim e c o utsetw(l 0 ) R R a r ray i). S er v i c eTim e e n dl;)cout V ”* * * * * * * * *
7、* * * * * 火* * * u=q)Cu r rentTime = q;e IseC u rrent T ime = RRarrayfO .Servic e Time;wh i 1 e(!R Rqu e u e.emp t y ()for (intj=i;j= RRa r r ay j .Arriva 1 T i me)(R Rq u eue.p u sh(RR a rrayfjl);i+;)if (RR q u e u e.fro n t(). S e r v iceTimeq)(temp T i me = R Rqueu e . f ro n t (). S e r v i c e
8、Ti m e ;e 1 se(t e mpTim e = q ;)RRqu e u e.fr o n t().S e rvice T i m e -= q ;进程每执行一次,就将其服务时间-q/将队首进程的名称放入数组中p r oc e ssM o mentfpr o c essMom e n t P oint = RRque u e. f r ont().name;p r oce s sMome n t P oint+;proce s sTimefi n al Proc ess Num b er = t e mpTim e ;f i n al P r ocessNumbe r +;if (R
9、Rq u eu e .fr o nt().Serv i c e T ime = 0 )/把执彳亍完的进程退出队列(/RR q ue u e. fro n t(). Finished Tim e = C urrentTime;RRque u e.popO ;/假如进程的服务时间小于等于,即该进程已经服务完了,将其退栈 el s e(将队首移到队尾RRqueue.pu s h(RR q ueue. front ();RR q ueue. p op();1Current T im e += t em p Tim e ;/进程输出解决每个时间段相应的执行的进程c 各进程的执行时刻信息:end 1 ;c
10、ou t n “VHsetw(2) proc e ssT ime 0 v 时 刻”;proces s Time fin alP r oc e ssNumber=O;int t im e = proce s sTime 0 ;i n t coun t = 0;for (i=(): ifi n alProces s Num b e r ;i + +) (c o u nt = 0;c outsetw(3) p roc essMomentf i s e tw (3) e n dl;w h ile(RRarrayco u n t.name ! = p rocessMomentfi & cou n t n
11、)(count+;)RRa r r a yc o u n t.Finis h edTime = time;i f (i f inalProcessNumbe r - 1 )Ic outsetw (3) t i meVv时刻usetw( 2)t ime + p r oc e ss T im e i +1 v时亥se t w(3);t i me += pr o cessTimei+ 1 ;)c o uten d 1;/周转时间、带权周转时间、平均周转时间、带权平均周转时间的计算 /I.周转时间=完毕时间到达时间/ 2 .带权周转时间 :周转时间/服务时间f or ( i =0; i n ; i +
12、)(RR a rr a y i J. Who 1 eTime = RRarrayi.F inish e dTimeR R a rray i .A r r i v alT i me;R Rarra y iJ.Wci g h tWh o leT i me = ( d o ublc) RRa r ra y i J. W h oleT ime/RR a rra y il.Se r v i ceT ime;d o ubl e x=0, y =0;for (i=0; i n;i+)x += R Rarr a y i . Who 1 eTime;y += RRarrayi.WeightWho 1 eT i
13、me;)Avera geWT = x/n;Averag e WWT = y/ n ;)void d i s pl a y()(cou t * * * * * * * * * * * * * * * * * * * * e n dl;(3)程序所能达成的功能 1)进程个数n,输入时间片大小q,每个进程的到达时间T1,,Tn和服务时间Si,Sn。2)规定期间片轮转法RR调度进程运营,计算每个进程的周转时间和带权周转时间,并且计算所有进程的平均周转时间和带权平均周转时间;3)输出:模拟整个调度过程,输出每个时刻的进程运营状态:4)输出:输出计算出来的每个进程的周转时间、带权周转时间、所有进程的平均周
14、转时间以 及带权平均周转时间。(4)测试数据,涉及对的的输入及其输出结果和具有错误的输入及其输出结果。对的输入:HE:Microsoft Visual StudioMyProjectsRRDebugRR.exe数q的 个需去 、工 TA “茅 更像 青青青数q的 个需去 、工 TA “茅 更像 青青青请从小到大输入迸程到达时间;落按到达时间的顺序依次输入进程服务时间: 2T he infion of processes Is t he fol lowing :迸程名 到达时向 服务时间 a02b13c35牌Ff常丸行场海摘目关猿翳酉牌Ff常丸行场海摘目关猿翳酉完成时间 2周转时间带权周转时间2
15、1c3藕鬻箫髀稠露调-1.4666710错误输入:coutV”RR调度算法执行后:进程相关信息如下:endl;cou t V s etw(10)VV”进程名(ID) * n ”;cout s etw( 1 ()“到达时间“v ;couts e tw(10) 服务时间“ v ” ;c outsetw(l 0 ) H 完毕时间“Vv ” H ;coutsetw(10) 周转时间V ;c o u t s et w (1 0 ) V带权周转时间ve n dl;for ( i nt i = 0;i n ; i +)(c o u t setw( 1 0 ) RR a r r ay i .name ;c o
16、u t s et w (10) RRarr a y i. A r rivalTime;coutsetw (10)RRarrayi.ServiceTime coutsetw (10) R R a rrayi .FinishedTimeH ;cou tsetw(10) RRarra y i .Wh o leT ime cou t setw( 1 0 )RRarra y i. WeightWho 1 eT i m e M end 1 ;)co u tVv”所有进程的平均周转时间=Aver a g eWTen d 1;cout”所有进程的平均带权周转时间=Avera g eWWT of p*ocee:
17、2;t9!; Is t he o llowxng 进程名 到达时茴 服务时间&02c35b132530.911111完成时间208周转时间带权周转时间21-3-0.672.333332、概要设计所有抽象数据类型的定义:static i n t MaxN u m= 1 00int A r r i valTime / / 到达时间i n t Se r v iceTime 服务时间int Fin i shedTime / / 结束时间int Who 1 eTime 周转时间d o u ble Wei g htWholeTime / / 带权周转时间doub 1 e A v erageWT 平均周转时
18、间do u b 1 e Aver a geWW T / /平均带权周转时间主程序的流程:变量初始化接受用户输入的n, q ,T 1Tn,S 1 .S n; 进行进程调度,计算进程的开始运营时间、结束时间、执行 顺序、周转时间、带权周转时间;计算所有进程的平均周转时间、平均带权周转时间; 按照格式输出调度结果。各程序模块之间的层次(调用)关系Main函数通过对Input函数进行调用,对函数的成员变量进行赋 值,再通过RRA 1 gorithm函数求出题目规定的各个数据结果,最后 通过displa v函数对结果进行格式输出。3、具体设计实现程序模块的具体算法。void RRAIgorilhm ()
19、(char pro cess Mom e nt 1 00;存储每个时间片p相应的进程名称RR q u e ue. p ush(R R array 0J);1 n t p ro c e s sM o mcnt P o int = 0 ;in t CurrentTim e = 0 ;i nt tempT i me;声明此变量控制Cu r r e n t Time的累加时间,当前进程的服务时间小于时间片q的时候,起到重要作用inti=l; /指向尚未解决的进程的下标i n t fin a IProc e s sNumber = 0 ;/执行RR算法后,进程的个数i nt p r ocessTime
20、50;/ / C urr e ntTim e 的初始化i f (RR a r r ayO.S e r v i c eTim e =q)(Cu r r e ntTim e = q;)e Is e(C u rre n t Tim e = RRarr ay O.Servi c eTime;)w h il e (! RRqu e ue. e mp t y()(f or(in t j =i;j = R Rarray j .Ar r ivalTime)(RRqu e u e .push( R Rarra y j);i+;)i f (R Rque u e .front().Se r v iceT i m e
21、 q )t empTime = RRqu e ue. f r ont() .Serv i ceTim e ;e Iset em p T i me = q ;RRqu e ue.front(). S e r v iccTimc = q; / / 进程每执行一次,就将其服务时间-q/将队首进程的名称放入数组中pro c essM o m e nt p roce s s MomentPoint = R Rqueue. front().name;pr o c es s Mome n t P oi n t+;proc essT i mefinalProce s s Numbe r = tempTim e
22、 ;fi n alPro c e s sNumbe r +;if (RRqueue.fron t (). Serv i ceT i me = 0) 把执行完的进程退出队列/RRqu e ue. f ro n t ().Fini s h e d T im e = Cur r entTim e ;RRqu e ue. p op();/假如进程的服务时间小于等于,即该进程己经服务完了,将其退栈/将队首移到队尾RR q ueue.push( R Rq u eu e .fro n t ();RR q ueue. po p ();)Cuit e ntTime += t em p Time;/ /进程输出解
23、决每个时间段相应的执行的进程co u t setw( 2 )proce s s T im e 0vv时刻 p r o c es s T ime f i nalPro c essNumbe r =0;int t im e = pro c essT i me0;i n t count = 0 ;fo r (i=0; i finalProc ess Numb e r; i +)(cou n t =0;c outse t w(3) pr o c e ssMomentf i setw( 3 )endl;whi 1 e(RRar r aycoun t . n ame!=proce s sMomen t i
24、 & c ountn)c o u n l+;RR a iTa y coun t .Fin ishedTime = t ime;i f (if i nal Proces s N u mb e r - 1) (c o u t setw(3) t ime时刻”set w(2)tim e + proc e ssTim e i+lvV时刻”setw( 3 );t ime += proce s sTimei+l ;I)coutendl;周转时间、带权周转时间、平均周转时间、带权平均周转时间的计算 / 1.周转时间 =完毕时间到达时间/ 2.带权周转时间=周转时间/服务时间for(i=0;in;i+)(R
25、Rarr a y i .Who 1 eT ime = RR a rra y iJ.FinishedTime - RRarra y i. Arriva 1 Time;RRar r a y i . WeightWholeTime = (do u b le) RRarra yi .WholeTim e /RRa r ray i . Serv i ceTime;) double x=0, y=0;f or ( i =0;i n ;i+)x += RR a rray i .W h o 1 e Tim e ;y += R R a rrayi .W e i g h t W h o leTime; )Ave
26、rageW T = x/n ;Aver ageWWT = y / n ;4、调试分析(1)调试过程中碰到的问题以及解决方法,设计与实现的回顾讨论和分析在算法设计时,由于一开始不知道如何将位于队首的进程,在执行完后如何 移至队尾进行循环,所以思考了很久,后来想到将队首进程进行重新压入队列从 而解决了此问题。(2)算法的性能分析每个进程被分派一个时间段,即该进程允许运营的时间。假如在时间片结束 时进程还在运营,则CPU将被剥夺并分派给另一个进程。假如进程在时间片结 束前阻塞或结束,则CPU当即进行切换。调度程序所要做的就是维护一张就绪 进程列表,当进程用完它的时间片后,它被移到队列的末尾。(3)经验体会通过本次实验,进一步理解了时间片轮转RR进程调度算法的思想,培养了