时间片轮转调度算法试验报告材料_第1页
时间片轮转调度算法试验报告材料_第2页
时间片轮转调度算法试验报告材料_第3页
时间片轮转调度算法试验报告材料_第4页
时间片轮转调度算法试验报告材料_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

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

文档简介

1、实用标准XX大学操作系统实验报告姓名:学号:班级:实验日期:实验名称:时间片轮转RR进程调度算法实验二时间片轮转RR进程调度算法1.实验目的: 通过这次实验,理解时间片轮转 RR进程调度算法的运行原理,进一步掌握进程状态的转变、进程调度的策略及对系统性能的评价方法。2. 需求分析(1)输入的形式和输入值的范围;输入:进程个数 n范围:0<*=100时间片q依次输入(进程名进程到达时间进程服务时间)(2)输出的形式进程名到达时间服务时间完成时间周转时间带权周转时间所有进程平均周转时间:所有进程平均带权周转时间:(3)程序所能达到的功能1) 进程个数n,输入时间片大小 q,每个进程的到达时间

2、 Ti,,Tn和服务时间Si,,Sn。2) 要求时间片轮转法 RR调度进程运行,计算每个进程的周转时间和带权周转时间,并且计算所有进程的平均周转时间和带权平均周转时间;3) 输出:模拟整个调度过程,输出每个时刻的进程运行状态;4 )输出:输出计算出来的每个进程的周转时间、带权周转时间、所有进程的平均周转时间以及带权平均周转时间。(4)测试数据,包括正确的输入及其输出结果和含有错误的输入及其输出结果。正确输入:文案大全80 J uiscLsz&o/MyprqjmM/RR“t>x.ZMJg/RF! r5c*II汀丁世汁盏A里憧侨气a”ST4冃5牛|>*尸 icH OF 石临盂旳

3、9:艮|=|=RK<?= f u JL !£!.=!« u谕吵 里悦工斗画 爭纳茸.a tr严 ftw 5vlsq审甜En+pfug斗.芒- iy豊莎 IVVi¥ 4- IV *严-紗.s-一百J0畫画 爭s-=.-匚一2!7/Mnr-oclfT V.7'UL<Amdi dM YurajerlI5FRR#D>eblJg=Rr<exeaIMy J! 4 鼻.!M J鼻 Mif 里 *,*K*iM>h* iHLIT JK JI 工 “ iH 黑*“ * * X K iH * * 冨-去,.* 示曹>fe谧->簿=“ *

4、K<AFT自 H n - z孫舉蛭趾星fsa常喬券輩>構戯曲”铲匸->谕二舊 > 霹融迪篮斗色“ k卜*«£-特cMMt. ,iu=e气 匸 ru"4-nl*tlb 一-工 Ly4吕el 16 瓦jLsUEiillI#訓閑 Hr4fHs莞曹亠昌"国M丁言 丁 h * 二:制 小n> X H>卅:斟i fr-4l隆< 4U =沏溟3_®j同若同画 IMM实用标准2、概要设计所有抽象数据类型的定义:static int MaxNum=100int ArrivalTime / 到达时间int ServiceT

5、ime/ 服务时间int FinishedTime/ 结束时间int WholeTime / 周转时间double WeightWholeTime/ 带权周转时间double AverageWT /平均周转时间double AverageWWT/平均带权周转时间主程序的流程:变量初始化接受用户输入的n , q , T1.Tn, S1.Sn;进行进程调度,计算进程的开始运行时间、结束时间、执行顺序、周转时间、带权周转时间;计算所有进程的平均周转时间、平均带权周转时间;按照格式输出调度结果。各程序模块之间的层次(调用)关系Ma in函数通过对In put函数进行调用,对函数的成员变量进行赋 值,再

6、通过RRAlgorithm 函数求出题目要求的各个数据结果,最后 通过display函数对结果进行格式输出。3、详细设计实现程序模块的具体算法。void RRAIgorithm()char processMoment1OO;/存储每个时间片p对应的进程名称RRqueue.push(RRarrayO);int processMome ntPo int = 0;int Curre ntTime=0;int tempTime; /声明此变量控制 CurrentTime 的累加时间,当前进程的服务时间小于时间片q的时候,起到重要作用int i=1;/指向还未处理的进程的下标int finalProce

7、ssNumber = 0;/执行RR算法后,进程的个数int processTime50;/Curre ntTime的初始化if (RRarray0.ServiceTime>=q)Curre ntTime = q; elseCurre ntTime = RRarrayO.ServiceTime;while(!RRqueue.empty()for (int j=i;j<n;j+)/使得满足进程的到达时间小于当前时间的进程都进入队列if (RRarrayj. name!=NULL &&Curre ntTime>=RRarrayj.ArrivalTime)RRque

8、ue.push(RRarrayj);i+;if (RRqueue.fro nt().ServiceTime<q)tempTime = RRqueue.fr on t().ServiceTime;elsetempTime = q;/进程每执行一次,就将其RRqueue.fr on t().ServiceTime -= q;服务时间-q/将队首进程的名称放入数组中processMome ntprocessMome ntPoi ntRRqueue.fro nt( ).n ame;processMome ntPo in t+;processTimefi nalProcessNumber = te

9、mpTime;fin alProcessNumber+;if (RRqueue.front().ServiceTime <= 0)/ 把执行完的进程退出队/RRqueue.fro nt().Fi nishedTime = Curre ntTime;RRqueue.pop();/如果进程的服务时间小于等于,即该进程已经服务完了,将其退栈else /将队首移到队尾RRqueue.push(RRqueue.fro nt();RRqueue.pop();Curre ntTime += tempTime;/进程输出处理每个时间段对应的执行的进程时刻"coutvv"各进程的执行时

10、刻信息:"<<endl;cout<<""<<"0 时刻->"v<setw(2)vvprocessTime0vv"processTimefi nalProcessNumber=0;int time = processTime0;int count = 0;for (i=0;i<fi nalProcessNumber;i+)count = 0;cout<<setw(3)vvprocessMome ntiv<setw(3)v<e ndl;while(RRarray

11、co un t. name!=processMome nti && countvn)coun t+;RRarrayco un t.Fi nishedTime = time;if (i<fi nalProcessNumber - 1)cout<<setw(3)<<time<<"->"<<setw(2)<<time + processTimei+1<<" time += processTimei+1;时刻时刻"<<setw(3);"<

12、;<IIcout«e ndl;/周转时间、带权周转时间、平均周转时间、带权平均周转时间的计算/1.周转时间=完成时间-到达时间2.带权周转时间=周转时间/服务时间for ( i=0;i< n;i+)RRarrayi.WholeTimeRRarrayi.Fi nishedTimeRRarrayi.ArrivalTime;RRarrayi.WeightWholeTime(double)RRarrayi.WholeTime/RRarrayi.ServiceTime; double x=0,y=0;for (i=0;i< n;i+)x += RRarrayi.WholeTi

13、me;y += RRarrayi.WeightWholeTime;AverageWT = x/n;AverageWWT = y/n;文案大全4、调试分析(1)调试过程中遇到的问题以及解决方法,设计与实现的回顾讨论和分析在算法设计时,由于一开始不知道如何将位于队首的进程,在执行完后如 何移至队尾进行循环,所以思考了很久,后来想到将队首进程进行重新压入队列 从而解决了此问题。(2)算法的性能分析每个进程被分配一个时间段,即该进程允许运行的时间。如果在时间片结束 时进程还在运行,则CPU将被剥夺并分配给另一个进程。如果进程在时间片结 束前阻塞或结束,则CPU当即进行切换。调度程序所要做的就是维护一张

14、就绪 进程列表,当进程用完它的时间片后,它被移到队列的末尾。(3)经验体会通过本次实验,深入理解了时间片轮转 RR进程调度算法的思想,培养了自 己的动手能力,通过实践加深了记忆。5、用户使用说明程序的使用说明,列出每一步的操作步骤文案大全运行完成,将进程从队列中取出N中短进程,进程调至队列尾部输出结果结束7、附录带注释的源程序,注释应清楚具体#i nclude <iostream>#in elude <queue>#i nclude <ioma nip>#in elude <fstream>#defi ne MaxNum 100using n a

15、mespace std;typedef structchar n ame;int ArrivalTime;int ServiceTime;int Fini shedTime;int WholeTime;double WeightWholeTime;RR;static queue<RR>RRqueue; / 声明一个队列static double AverageWT =0,AverageWWT=0;static int q;/ 时间片static int n;/ 进程个数static RR RRarrayMaxNum; / 进程结构实用标准void In put()/文件读取模式if

16、stream in Data;in Data.ope n("./data4.txt");/data.txt 表示q = 4的RR调度算法/data2.txt 表示q = 1的RR调度算法 in Data> >n;in Data»q;for (int i=0;i<n;i+)in Data>>RRarrayi. name;for (i=0;i <n ;i+)in Data>>RRarrayi.ArrivalTime;for (i=0;i <n ;i+)in Data>>RRarrayi.ServiceT

17、ime;文案大全实用标准/用户输入模式cout<v"*"v ven dl;coutvv"请输入进程个数n :"cin>>n;coutvv"请输入时间片q :"cin»q;coutvv"请按到达时间的顺序依次输入进程名:"vvendl;for (i=0;i vn ;i+)cin> >RRarrayi. name;coutvv"请从小到大输入进程到达时间:"<<endl;for (i=0;i vn ;i+)cin> >RRarrayi.

18、ArrivalTime;文案大全实用标准coutvv"请按到达时间的顺序依次输入进程服务时间:"<<endl;for (i=0;i <n ;i+)cin> >RRarrayi.ServiceTime;cout<v"*"vven dl;/输出用户所输入的信息cout<<"The information of processes is the following:"<<endl;cout<vsetw(10)vv" 进程名"<<"&q

19、uot;cout<vsetw(10)vv"到达时间"vv""coutvvsetw(10)vv"服务时间"vv""vvendl;for ( i=0;i vn ;i+)coutvvsetw(10)vvRRarrayi. namevv""coutvvsetw(10)vvRRarrayi.ServiceTimevv""vve ndl;cout<v"*"vven dl;void RRAIgorithm()char processMoment1OO;/存储

20、每个时间片p对应的进程名称RRqueue.push(RRarrayO);int processMome ntPo int = 0;int Curren tTime=0;int tempTime; /声明此变量控制CurrentTime的累加时间,当前进程的服务时间小于时间片q的时候,起到重要作用int i=1;/指向还未处理的进程的下标int finalProcessNumber = 0;/执行RR算法后,进程的个数int processTime50;/Curre ntTime 的初始化if (RRarray0.ServiceTime>=q)文案大全实用标准Curre ntTime =

21、q;elseCurre ntTime = RRarrayO.ServiceTime;while(!RRqueue.empty()for (int j=i;j<n;j+)/使得满足进程的到达时间小于当前时间的进程都进入队列if (RRarrayj. name!=NULL &&Curre ntTime>=RRarrayj.ArrivalTime)RRqueue.push(RRarrayj);i+;if (RRqueue.fro nt().ServiceTime<q)tempTime = RRqueue.fr on t().ServiceTime;elsetempT

22、ime = q;/进程每执行一次,就将其服RRqueue.fr on t().ServiceTime -= q;务时间-q/将队首进程的名称放入数组中processMome ntprocessMome ntPoi nt = RRqueue.fro nt( ).n ame;processMome ntPo in t+;processTimefi nalProcessNumber = tempTime;fin alProcessNumber+;if (RRqueue.front().ServiceTime <= 0)/ 把执行完的进程退出队列/RRqueue.fro nt().Fi nish

23、edTime = Curre ntTime;RRqueue.pop();/如果进程的服务时间小于等于,即该进程已经服务完了,将其退栈文案大全else/将队首移到队尾RRqueue.push(RRqueue.fro nt();RRqueue.pop();Curre ntTime += tempTime;/进程输出处理每个时间段对应的执行的进程时刻"coutvv"各进程的执行时刻信息:"<<endl;cout<<""<<"0 时刻->"v<setw(2)vvprocessTime0

24、vv"processTimefi nalProcessNumber=0;int time = processTime0;int count = 0;for (i=0;i<fi nalProcessNumber;i+)count = 0;cout<<setw(3)vvprocessMome ntiv<setw(3)v<e ndl;while(RRarrayco un t. name!=processMome nti && countvn)coun t+;RRarrayco un t.Fi nishedTime = time;if (i<

25、;fi nalProcessNumber - 1)cout<<setw(3)<<time<<" 时刻"<<"->"<<setw(2)<<timeprocessTimei+1<<" 时刻"<<setw(3);time += processTimei+1;cout«e ndl;/周转时间、带权周转时间、平均周转时间、带权平均周转时间的计算/1.周转时间=完成时间-到达时间2.带权周转时间=周转时间/服务时间实用标准for ( i

26、=0;i <n ;i+)RRarrayi.WholeTimeRRarrayi.Fi nishedTime文案大全RRarrayi.ArrivalTime;RRarrayi.WeightWholeTime(double)RRarrayi.WholeTime/RRarrayi.ServiceTime;double x=0,y=0;for (i=0;i <n ;i+)x += RRarrayi.WholeTime;y += RRarrayi.WeightWholeTime;AverageWT = x/n;AverageWWT = y/n;void display()实用标准cout«"*"<<e ndl;cout<v"RR 调度算法执行后:进程相关信息如下:"<<e ndl;cout<<setw(10)vv"进程名(ID)"<<""cout<<set

温馨提示

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

评论

0/150

提交评论