欢迎来到天天文库
浏览记录
ID:49869140
大小:75.66 KB
页数:14页
时间:2020-03-05
《时间片轮转调度算法实验报告.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、xx大学 操作系统 实验报告姓名:学号:班级:实验日期:实验名称:时间片轮转RR进程调度算法实验二时间片轮转RR进程调度算法1.实验目的:通过这次实验,理解时间片轮转RR进程调度算法的运行原理,进一步掌握进程状态的转变、进程调度的策略及对系统性能的评价方法。2.需求分析(1)输入的形式和输入值的范围;输入:进程个数n范围:02、个进程的到达时间T1,…,Tn和服务时间S1,…,Sn。2)要求时间片轮转法RR调度进程运行,计算每个进程的周转时间和带权周转时间,并且计算所有进程的平均周转时间和带权平均周转时间;3)输出:模拟整个调度过程,输出每个时刻的进程运行状态;4)输出:输出计算出来的每个进程的周转时间、带权周转时间、所有进程的平均周转时间以及带权平均周转时间。(4)测试数据,包括正确的输入及其输出结果和含有错误的输入及其输出结果。正确输入:错误输入:2、概要设计所有抽象数据类型的定义:staticintMaxNum=100intArrivalTime//到达时间intServic3、eTime//服务时间intFinishedTime//结束时间intWholeTime//周转时间doubleWeightWholeTime//带权周转时间doubleAverageWT//平均周转时间doubleAverageWWT//平均带权周转时间主程序的流程:l变量初始化l接受用户输入的n,q,T1…..Tn,S1….Sn;l进行进程调度,计算进程的开始运行时间、结束时间、执行顺序、周转时间、带权周转时间;l计算所有进程的平均周转时间、平均带权周转时间;l按照格式输出调度结果。各程序模块之间的层次(调用)关系Main函数通过对Input函数进行调用4、,对函数的成员变量进行赋值,再通过RRAlgorithm函数求出题目要求的各个数据结果,最后通过display函数对结果进行格式输出。3、详细设计实现程序模块的具体算法。voidRRAlgorithm(){charprocessMoment[100];//存储每个时间片p对应的进程名称RRqueue.push(RRarray[0]);intprocessMomentPoint=0;intCurrentTime=0;inttempTime;//声明此变量控制CurrentTime的累加时间,当前进程的服务时间小于时间片q的时候,起到重要作用inti=1;//指5、向还未处理的进程的下标intfinalProcessNumber=0;//执行RR算法后,进程的个数intprocessTime[50];//CurrentTime的初始化if(RRarray[0].ServiceTime>=q){CurrentTime=q;}else{CurrentTime=RRarray[0].ServiceTime;}while(!RRqueue.empty()){for(intj=i;j=6、RRarray[j].ArrivalTime){RRqueue.push(RRarray[j]);i++;}}if(RRqueue.front().ServiceTime7、++;processTime[finalProcessNumber]=tempTime;finalProcessNumber++;if(RRqueue.front().ServiceTime<=0)//把执行完的进程退出队列{//RRqueue.front().FinishedTime=CurrentTime;RRqueue.pop();//如果进程的服务时间小于等于,即该进程已经服务完了,将其退栈}else{//将队首移到队尾RRqueue.push(RRqueue.front());RRqueue.pop();}CurrentTime+=tempTime8、;}//进程输出处理每个时间段对应的执行的进程cou
2、个进程的到达时间T1,…,Tn和服务时间S1,…,Sn。2)要求时间片轮转法RR调度进程运行,计算每个进程的周转时间和带权周转时间,并且计算所有进程的平均周转时间和带权平均周转时间;3)输出:模拟整个调度过程,输出每个时刻的进程运行状态;4)输出:输出计算出来的每个进程的周转时间、带权周转时间、所有进程的平均周转时间以及带权平均周转时间。(4)测试数据,包括正确的输入及其输出结果和含有错误的输入及其输出结果。正确输入:错误输入:2、概要设计所有抽象数据类型的定义:staticintMaxNum=100intArrivalTime//到达时间intServic
3、eTime//服务时间intFinishedTime//结束时间intWholeTime//周转时间doubleWeightWholeTime//带权周转时间doubleAverageWT//平均周转时间doubleAverageWWT//平均带权周转时间主程序的流程:l变量初始化l接受用户输入的n,q,T1…..Tn,S1….Sn;l进行进程调度,计算进程的开始运行时间、结束时间、执行顺序、周转时间、带权周转时间;l计算所有进程的平均周转时间、平均带权周转时间;l按照格式输出调度结果。各程序模块之间的层次(调用)关系Main函数通过对Input函数进行调用
4、,对函数的成员变量进行赋值,再通过RRAlgorithm函数求出题目要求的各个数据结果,最后通过display函数对结果进行格式输出。3、详细设计实现程序模块的具体算法。voidRRAlgorithm(){charprocessMoment[100];//存储每个时间片p对应的进程名称RRqueue.push(RRarray[0]);intprocessMomentPoint=0;intCurrentTime=0;inttempTime;//声明此变量控制CurrentTime的累加时间,当前进程的服务时间小于时间片q的时候,起到重要作用inti=1;//指
5、向还未处理的进程的下标intfinalProcessNumber=0;//执行RR算法后,进程的个数intprocessTime[50];//CurrentTime的初始化if(RRarray[0].ServiceTime>=q){CurrentTime=q;}else{CurrentTime=RRarray[0].ServiceTime;}while(!RRqueue.empty()){for(intj=i;j=
6、RRarray[j].ArrivalTime){RRqueue.push(RRarray[j]);i++;}}if(RRqueue.front().ServiceTime7、++;processTime[finalProcessNumber]=tempTime;finalProcessNumber++;if(RRqueue.front().ServiceTime<=0)//把执行完的进程退出队列{//RRqueue.front().FinishedTime=CurrentTime;RRqueue.pop();//如果进程的服务时间小于等于,即该进程已经服务完了,将其退栈}else{//将队首移到队尾RRqueue.push(RRqueue.front());RRqueue.pop();}CurrentTime+=tempTime8、;}//进程输出处理每个时间段对应的执行的进程cou
7、++;processTime[finalProcessNumber]=tempTime;finalProcessNumber++;if(RRqueue.front().ServiceTime<=0)//把执行完的进程退出队列{//RRqueue.front().FinishedTime=CurrentTime;RRqueue.pop();//如果进程的服务时间小于等于,即该进程已经服务完了,将其退栈}else{//将队首移到队尾RRqueue.push(RRqueue.front());RRqueue.pop();}CurrentTime+=tempTime8、;}//进程输出处理每个时间段对应的执行的进程cou
7、++;processTime[finalProcessNumber]=tempTime;finalProcessNumber++;if(RRqueue.front().ServiceTime<=0)//把执行完的进程退出队列{//RRqueue.front().FinishedTime=CurrentTime;RRqueue.pop();//如果进程的服务时间小于等于,即该进程已经服务完了,将其退栈}else{//将队首移到队尾RRqueue.push(RRqueue.front());RRqueue.pop();}CurrentTime+=tempTime
8、;}//进程输出处理每个时间段对应的执行的进程cou
此文档下载收益归作者所有