时间片轮转RR进程调度算法.docx
- 文档编号:26130251
- 上传时间:2023-06-17
- 格式:DOCX
- 页数:13
- 大小:85.45KB
时间片轮转RR进程调度算法.docx
《时间片轮转RR进程调度算法.docx》由会员分享,可在线阅读,更多相关《时间片轮转RR进程调度算法.docx(13页珍藏版)》请在冰豆网上搜索。
时间片轮转RR进程调度算法
实验二
时间片轮转RR进程调度算法
【实验目的】
通过这次实验,加深对进程概念的理解,进一步掌握进程状态的转变、进程调度的策略及对系统性能的评价方法。
【实验内容】
问题描述:
设计程序模拟进程的时间片轮转RR调度过程。
假设有n个进程分别在T1,…,Tn时刻到达系统,它们需要的服务时间分别为S1,…,Sn。
分别利用不同的时间片大小q,采用时间片轮转RR进程调度算法进行调度,计算每个进程的完成时间、周转时间和带权周转时间,并且统计n个进程的平均周转时间和平均带权周转时间。
程序要求:
1)进程个数n;每个进程的到达时间T1,…,Tn和服务时间S1,…,Sn;输入时间片大小q。
2)要求时间片轮转法RR调度进程运行,计算每个进程的周转时间和带权周转时间,并且计算所有进程的平均周转时间和带权平均周转时间;
3)输出:
要求模拟整个调度过程,输出每个时刻的进程运行状态,如“时刻3:
进程B开始运行”等等;
4)输出:
要求输出计算出来的每个进程的周转时间、带权周转时间、所有进程的平均周转时间以及带权平均周转时间。
实验要求:
1)上机前认真复习时间片轮转RR进程调度调度算法,熟悉进程调度的执行过程;
2)上机时独立编程、调试程序;
3)根据具体实验要求,完成好实验报告(包括实验的目的、内容、要求、源程序、实例运行结果截图、发现的问题以及解决方法)
【实验分析】
需求分析:
(1)按提示输入进程个数,不得大于MaxNum;依次输入进程队列标识,到达时间,服务时间,一个进程占一行;输入时间片的大小。
(2)输出的形式:
先输出时刻,正在运行的进程,再总的输出所有进程的完成时间,周转时间,带权周转时间。
最后输出平均周转时间与平均带权周转时间。
(3)程序所能达到的功能:
根据时间片轮转RR进程调度调度算法调度进程运行,模拟整个调度过程,计算每个进程的周转时间和带权周转时间,并且计算所有进程的平均周转时间和带权平均周转时间。
(4)测试数据:
输入数据分别为:
5
a04
b13
c25
d32
e44
1
输出为:
时刻0:
进程a开始运行
时刻1:
进程b开始运行
时刻2:
进程a开始运行
时刻3:
进程c开始运行
时刻4:
进程b开始运行
时刻5:
进程d开始运行
时刻6:
进程a开始运行
时刻7:
进程e开始运行
时刻8:
进程c开始运行
时刻9:
进程b开始运行
时刻10:
进程d开始运行
时刻11:
进程a开始运行
时刻12:
进程e开始运行
时刻13:
进程c开始运行
时刻14:
进程e开始运行
时刻15:
进程c开始运行
时刻16:
进程e开始运行
时刻17:
进程c开始运行
a的完成时间为12周转时间为12带权周转时间为3
b的完成时间为10周转时间为9带权周转时间为3
c的完成时间为18周转时间为16带权周转时间为3.2
d的完成时间为11周转时间为18带权周转时间为4
e的完成时间为17周转时间为13带权周转时间为3.25
平均周转时间11.6
平均带权周转时间3.29
输入数据分别为:
5
a04
b13
c25
d32
e44
4
输出为:
时刻0:
进程a开始运行
时刻4:
进程b开始运行
时刻7:
进程c开始运行
时刻11:
进程d开始运行
时刻13:
进程c开始运行
时刻14:
进程e开始运行
a的完成时间为4周转时间为4带权周转时间为1
b的完成时间为7周转时间为6带权周转时间为2
c的完成时间为18周转时间为16带权周转时间为3.2
d的完成时间为13周转时间为10带权周转时间为5
e的完成时间为17周转时间为13带权周转时间为3.25
平均周转时间9.8
平均带权周转时间2.89
概要设计:
(1)本程序中用到的抽象数据类型的定义:
classprocess{
public:
charname;//标识
intArrivalTime;//到达时间
intServiceTime;//服务时间
intFinishTime;//完成时间
intWholeTime;//周转时间
doubleWeightWholeTime;//带权周转时间
intPServiceTime;//剩余的服务时间
};//表示一个进程的类
(2)主程序的流程:
输入进程个数=》输入进程,到达时间,服务时间=》输入时间片=》按到达时间的前后放入进程数组中=》将分别第一个进程加入等待序列=》将队首进程压出等待序列=》判断是否所有元素都加入过等待序列,若没有,将其中序号最小的元素压入等待序列=》判断被压出的元素的剩余服务时间是否小于时间片=》若大于,总的完成时间为之前的时间片的时间,并将次进程压入序列尾部;若小于或等于,完成时间为之前总的完成时间加剩余服务时间,//找到进程在进程数组中的位置,修改其完成时间=》输出完成时间,周转时间,带权周转时间=》输出平均周转时间与平均带权周转时间
(3)各程序模块之间的层次(调用)关系。
主程序调用输入模块,进程进等待队列模块,计算完成时间,周转时间,带权周转时间模块
详细设计
实现程序模块的具体算法。
#include
#include
usingnamespacestd;
constintMaxNum=100;//进程个数的最大值
classprocess{
public:
charname;
intArrivalTime;
intServiceTime;
intFinishTime;
intWholeTime;
doubleWeightWholeTime;
intPServiceTime;
};//表示一个进程的类,包括其标识,到达时间,服务时间,完成时间,周转时间,带权周转时间,以及剩余的服务时间
processpr[MaxNum];//进程数组
voidmain(){
queue
cout<<"输入进程个数"< intlen;//表示进程个数 cin>>len; cout<<"依次输入进程队列标识,到达时间,服务时间"< for(inti=0;i processa; cin>>a.name>>a.ArrivalTime>>a.ServiceTime; a.PServiceTime=a.ServiceTime; pr[i]=a; } intq;//表示时间片 cout<<"输入时间片"< cin>>q; L1.push(pr[0]);//先将第一个进程加入等待序列 intsum=0;//总的完成时间 intn=1;//记录加入等待序列的是数组中的第几个元素 inty=0; while(L1.empty()! =1){//等待序列不为空,则循环 processb=L1.front();//提出等待序列的首元素,并压出序列 L1.pop(); cout<<"时刻"< 进程"< if(q b.PServiceTime=b.PServiceTime-q;//若大于,总的完成时间为之前的时间片的时间,并将次进程压入序列尾部,剩余时间 sum=sum+q; if(n while(! (pr[n].ArrivalTime>sum)&&n L1.push(pr[n]); n++; } } L1.push(b); } else{ //若小于或等于,完成时间为之前总的完成时间加剩余服务时间 sum=sum+b.PServiceTime; b.FinishTime=sum; for(intp=0;p if(pr[p].name==b.name) pr[p]=b; } if(n while(! (pr[n].ArrivalTime>sum)&&n L1.push(pr[n]); n++; } } } } intWT=0;//总的周期时间 doubleWWT=0;//总的带权周期时间 for(intk=0;k processb=pr[k]; b.WholeTime=b.FinishTime-b.ArrivalTime;//周转时间为完成时间减到达时间 WT=WT+b.WholeTime; b.WeightWholeTime=double(b.WholeTime)/b.ServiceTime;//带权周转时间为周转时间除以服务时间 WWT=WWT+b.WeightWholeTime; cout< cout<<"---------------------------------------------------------"< } cout<<"平均周转时间"< cout<<"平均带权周转时间"< } 调试分析 1、执行算法问前,要先创建抽象数据类型process。 2、执行算法时,要注意判断被压出的元素的剩余服务时间是否小于时间片。 3、执行算法后,改变了进程的完成时间,要将修改后的加入到进程数组中。 4、时间的复杂度是O(n*m). 用户使用说明 先输出时刻,正在运行的进程,再输出进程的完成时间,周转时间,带权周转时间。 按提示信息依次输入。 测试结果 输入数据分别为: 5 a04 b13 c25 d32 e44 1 输出为: 时刻0: 进程a开始运行 时刻1: 进程b开始运行 时刻2: 进程a开始运行 时刻3: 进程c开始运行 时刻4: 进程b开始运行 时刻5: 进程d开始运行 时刻6: 进程a开始运行 时刻7: 进程e开始运行 时刻8: 进程c开始运行 时刻9: 进程b开始运行 时刻10: 进程d开始运行 时刻11: 进程a开始运行 时刻12: 进程e开始运行 时刻13: 进程c开始运行 时刻14: 进程e开始运行 时刻15: 进程c开始运行 时刻16: 进程e开始运行 时刻17: 进程c开始运行 a的完成时间为12周转时间为12带权周转时间为3 b的完成时间为10周转时间为9带权周转时间为3 c的完成时间为18周转时间为16带权周转时间为3.2 d的完成时间为11周转时间为18带权周转时间为4 e的完成时间为17周转时间为13带权周转时间为3.25 平均周转时间11.6 平均带权周转时间3.29 输入数据分别为: 5 a04 b13 c25 d32 e44 4 输出为: 时刻0: 进程a开始运行 时刻4: 进程b开始运行 时刻7: 进程c开始运行 时刻11: 进程d开始运行 时刻13: 进程c开始运行 时刻14: 进程e开始运行 a的完成时间为4周转时间为4带权周转时间为1 b的完成时间为7周转时间为6带权周转时间为2 c的完成时间为18周转时间为16带权周转时间为3.2 d的完成时间为13周转时间为10带权周转时间为5 e的完成时间为17周转时间为13带权周转时间为3.25 平均周转时间9.8 平均带权周转时间2.89
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 时间 轮转 RR 进程 调度 算法