时间片轮转RR进程调度算法实验报告.docx
《时间片轮转RR进程调度算法实验报告.docx》由会员分享,可在线阅读,更多相关《时间片轮转RR进程调度算法实验报告.docx(14页珍藏版)》请在冰豆网上搜索。
时间片轮转RR进程调度算法实验报告
时间片轮转RR进程调度算法
学生姓名:
学生学号:
专业班级:
指导老师:
2013年6月20日
1、实验目的
通过这次实验,加深对进程概念的理解,进一步掌握进程状态的转变、进程调度的策略及对系统性能的评价方法。
2、问题描述
设计程序模拟进程的时间片轮转RR调度过程。
假设有n个进程分别在T1,…,Tn时刻到达系统,它们需要的服务时间分别为S1,…,Sn。
分别利用不同的时间片大小q,采用时间片轮转RR进程调度算法进行调度,计算每个进程的完成时间、周转时间和带权周转时间,并且统计n个进程的平均周转时间和平均带权周转时间。
3、需求分析
1)进程个数n;每个进程的到达时间T1,…,Tn和服务时间S1,…,Sn;输入时间片大小q。
2)要求时间片轮转法RR调度进程运行,计算每个进程的周转时间和带权周转时间,并且计算所有进程的平均周转时间和带权平均周转时间;
3)输出:
要求模拟整个调度过程,输出每个时刻的进程运行状态,如“时刻3:
进程B开始运行”等等;
4)输出:
要求输出计算出来的每个进程的周转时间、带权周转时间、所有进程的平均周转时间以及带权平均周转时间。
4、概要设计
(1)程序中进程调度时间变量描述如下:
2)程序流程:
Ø变量初始化;
Ø接收用户输入n,T1,…,Tn,S1,…,Sn;时间片大小q;
Ø按照时间片轮转RR算法进行进程调度,计算进程的完成时间、周转时间和带权周转时间;
Ø计算所有进程的平均周转时间和平均带权周转时间;
Ø按格式输出调度结果。
5、详细设计
构造一个队列
intInitQueue(LinkQueue&Q)//构造一个空队列Q
{
Q.front=Q.rear=(QueuePtr)malloc(sizeof(QNode));
if(!
Q.front)exit(OVERFLOW);
Q.front->next=NULL;
returnOK;
}
时间片轮转RR进程调度算法
voidRR(int*ArrivalTime,int*ServiceTime,intn,intq,LinkQueue&Q)
{
cout<<"--------------------------------------------------------------"<cout<<"时间片轮转RR进程调度算法"<cout<<"--------------------------------------------------------------"<intcountTime=0;
inte;
intSTime[MaxNum];
intPT[MaxNum];
for(inti=0;i{
STime[i]=ServiceTime[i];PT[i]=0;}
InitQueue(Q);
EnQueue(Q,0);PT[0]=1;
inttime=0;
while(QueueEmpty(Q)==false)
{
e=DeQueue(Q,e);
if(STime[e]>q)
{
STime[e]=STime[e]-q;
countTime+=q;
}
else
{
countTime+=STime[e];STime[e]=0;FinishedTime[e]=countTime;
}
while(time{
if(STime>0)
{
cout<<"时刻"<(2)<