时间片轮转RR进程调度算法实验报告Word文档格式.docx
- 文档编号:22621748
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:14
- 大小:54.50KB
时间片轮转RR进程调度算法实验报告Word文档格式.docx
《时间片轮转RR进程调度算法实验报告Word文档格式.docx》由会员分享,可在线阅读,更多相关《时间片轮转RR进程调度算法实验报告Word文档格式.docx(14页珍藏版)》请在冰豆网上搜索。
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;
}
voidRR(int*ArrivalTime,int*ServiceTime,intn,intq,LinkQueue&
Q)
cout<
<
"
--------------------------------------------------------------"
endl;
时间片轮转RR进程调度算法"
intcountTime=0;
inte;
intSTime[MaxNum];
intPT[MaxNum];
for(inti=0;
i<
n;
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<
countTime)
if(STime>
0)
{
cout<
时刻"
setw
(2)<
time<
:
进程"
e<
正在运行"
}
time++;
for(i=1;
if(STime!
=0&
&
i!
=e&
ArrivalTime[i]<
countTime&
PT[i]==0||STime!
ArrivalTime[i]==countTime)
EnQueue(Q,i);
PT[i]=1;
if(STime[e]>
EnQueue(Q,e);
}
for(i=0;
WholeTime[i]=FinishedTime[i]-ArrivalTime[i];
WeightWholeTime[i]=(double)(WholeTime[i]*1.000/ServiceTime[i]);
Average_WT+=WholeTime[i];
Average_WWT+=WeightWholeTime[i];
Average_WT/=n;
Average_WWT/=n;
完成:
"
;
for(i=0;
setw(6)<
FinishedTime[i]<
周转:
WholeTime[i]<
带权:
setiosflags(ios:
fixed)<
setprecision
(2)<
WeightWholeTime[i]<
平均周转时间为:
Average_WT<
平均带权周转时间为:
Average_WWT<
DestroyQueue(Q);
实现程序模块的具体调用:
Q)//构造一个空队列Q用于存放所有就绪进程
{}
voidRR()
时间片轮转RR进程调度算法
voidmain()//主函数
输入进程个数
输入每个进程的到达时间
输入每个进程的服务时间
输入时间片q
voidRR()
6、调试分析
1、输出的时候没有进行各个状态的输出,所以在代码书写的时候使得这一块很难添加进去,最后经过在合适的输出链表的状态显示出了各个时刻进程的状态。
2、使用链表的时候往往会忘记判断链表是否为空的情况,所以导致结果错误。
7、用户使用说明
用C++语言实现提示;
输入值要在合法范围内。
8、测试结果
9、存在问题
算法复杂,不够简便。
10、心得体会
通过使用C++程序设计语言对基于时间片的轮转调度算法进行编程设计,使我对该算法有了更深的了解和更完整的掌握,也在编程过程中对该算法的优缺点有了体会,知道了时间片轮转调度算法的优点是响应时间短,并且加强了自己的编程能力。
11、附录
程序源代码:
//*******************************************************************
//**时间片轮转RR进程调度算法张迪1025116022**
#include<
iostream.h>
iomanip.h>
stdlib.h>
#defineOK1
#defineERROR0
#defineOVERFLOW-1
staticconstintMaxNum=100;
intn;
intq;
intArrivalTime[MaxNum];
intServiceTime[MaxNum];
intFinishedTime[MaxNum];
intWholeTime[MaxNum];
doubleWeightWholeTime[MaxNum];
doubleAverage_WT=0,Average_WWT=0;
//初始化为零
typedefintQElemType;
typedefstructQNode{
QElemTypedata;
structQNode*next;
}QNode,*QueuePtr;
typedefstruct{
QueuePtrfront;
QueuePtrrear;
}LinkQueue;
LinkQueueQ;
intEnQueue(LinkQueue&
Q,QElemTypee)//插入e为Q的新的队尾元素
QueuePtrp=(QueuePtr)malloc(sizeof(QNode));
p)exit(OVERFLOW);
p->
data=e;
p->
Q.rear->
next=p;
Q.rear=p;
intDeQueue(LinkQueue&
Q,QElemTypee)//删除队列Q
QueuePtrp;
if(Q.front==Q.rear)returnERROR;
p=Q.front->
next;
e=p->
data;
next=p->
if(Q.rear==p){Q.rear=Q.front;
free(p);
returne;
intDestroyQueue(LinkQueue&
Q)//销毁队列Q
while(Q.front){
Q.rear=Q.front->
free(Q.front);
Q.front=Q.rear;
}
boolQueueEmpty(LinkQueue&
Q)//判断队列是否为空
if(Q.front==Q.rear)
returntrue;
elsereturnfalse;
/*-----------时间片轮转RR进程调度------*/
cout<
for(i=0;
voidmain()
请输入进程数n:
cin>
>
请输入各个进程的到达时间:
ArrivalTime[i];
请输入各个进程的服务时间:
for(i=0;
ServiceTime[i];
请输入时间片q:
q;
RR(ArrivalTime,ServiceTime,n,q,Q);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 时间 轮转 RR 进程 调度 算法 实验 报告