时间片轮转调度算法
一.实验目的: 1)学习时间片轮转调度算法。
2)学习 C++程序设计的方法。
二.实验环境:
1)一台运行 Windows2000Professional操作系统计算机。
2)计算机中需要安装VisualC++6.0企业版。
三.实验内容:本实验主要是实现时间片轮转调度算法。
1)进入 VisualC++的窗口,新建一个 C++的文件,命名为 01.cpp.2)在源程序编辑窗口输入如下的源程序:
#include
#include
#include
usingnamespacestd;
intn;
classPCB
{
public:
intpri;// 进程优先数
intruntime;// 进程运行 CPU时间
intpieceOftime;// 轮转时间片
stringprocname;// 进程名
1 / 14
stringstate;// 进程状态
intneedOftime;// 还需要时间
intCounter;
PCB*next;
};
PCB*run=NULL;
PCB*ready=NULL;
PCB*finish=NULL;
PCB*tial=ready;
voidDtime(intt);
voidPrinft(inta)
{
if(a==1)
{
cout<
}
else
cout<
}
voidPrinft(intb,PCB*p)
2 / 14
{
if(b==1)
{
cout<procname<pri<needOftime<r untime<state<
}
else
cout<procname<runtime<needOftime<Counter<pieceOftime<state<
}
voiddisplay(intc)
{
PCB*p;
if(run!=NULL)/* 如果运行指针不空 */
Prinft(c,run);/* 输出当前正在运行的PCB*/
//Dtime(2);
p=ready;/* 输出就绪队列PCB*/
while(p!=NULL)
{
Prinft(c,p);
p=p->next;
}
3 / 14
//Dtime(2);
p=finish;/* 输出完成队列的PCB*/
while(p!=NULL)
{
Prinft(c,p);
p=p->next;
}
}
voidinsert(PCB*p)// 插入就绪队列按Pri 大小
{
PCB*S1,*S2;
if(ready==NULL)
{
p->next=NULL;
ready=p;
}
else
{
S1=ready;
S2=S1;
while(S1!=NULL)
4 / 14
{
if(S1->pri>=p->pri)
{
S2=S1;
S1=S1->next;
}
else
break;
}
if(S2->pri>=p->pri)
{
S2->next=p;
p->next=S1;
}
else
{
p->next=ready;
ready=p;
}
}
}
5 / 14
boolCTProcessOfPri()
{
PCB*Node;
cout<
cin>>n;
for(intj=0;j
{
Node=newPCB;
if(Node==NULL)
returnfalse;
else
{
cout<
cin>>Node->procname>>Node->needOftime;
Node->runtime=0;
Node->state="就绪 ";
Node->pri=Node->needOftime;
cout<procname<
}
insert(Node);
}
6 / 14
returntrue;
}
voi