优先级和时间片轮转调度_时间片轮转调度讲解
优先级和时间片轮转调度由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“时间片轮转调度讲解”。
实验4 优先级和时间片轮转调度
一、实验要求
通过编写程序实现进程高优先权和按时间片轮转调度算法,使学生进一步掌握进程调度的概念和算法,加深对处理机分配的理解。
二、实验内容
进程调度算法有优先数调度算法,时间片轮转调度算法,分级调度算法。选两种种算法实现。进程调度算法的数据结构主要有:进程函数定义,建立进程函数,进程调度函数。源程序代码部分:
#include “stdio.h” #include #define max 100 #define etime 4 #define pfree 0 #define running 1 #define aready 2 #define blocking 3 typedef struct node {
char name;
int status;int pri;
int ptime;int ax,bx,cx,dx;
int pc;
int psw;
}pcb;pcb *procearray[max];static int procenum;pcb *createproce(pcb *procearray[])组 {
pcb *p,*q;
int a,b,c,d,m,n,r,t;
char ID;
q=NULL;printf(“input the first nine status pcb:”);
scanf(“n%c%d%d%d%d%d%d%d%d”,&ID,&a,&b,&c,&d,&m,&n,&r,&t);
for(int i=0;i
p=(pcb*)malloc(sizeof(pcb));
p->name=ID;
p->ax=a;
p->bx=b;
p->cx=c;
p->dx=d;
p->pc=m;
p->psw=n;
p->pri=r;
p->ptime=t;
p->status=aready;
procenum++;
procearray[i]=p;
printf(“input the next seven status pcb: ”);
scanf(“n%c”,&ID);
if(ID == '*')
break;
scanf(“%d%d%d%d%d%d%d%d”,&a,&b,&c,&d,&m,&n,&r,&t);}
for(int j=0;j
{
q=procearray[j];printf(“n proce name.status.ax.bx.cx.dx.pc.psw.pri.ptimen ”);
printf(“%10c%5d%5d%5d%5d%5d%5d%5d%5d%5d”,q->name,q->status,q->ax,q->bx,q->cx,q->dx,q->pc,q->psw,q->pri,q->ptime);
}
return *procearray;}
void proceRR(pcb *procearray[]){int i;int j;
pcb *q;int totaltime=0;
for(i=0;i
ptime%4==0)
totaltime+=procearray[i]->ptime;
else
totaltime+=(procearray[i]->ptime/4+1)*4;}
printf(“nUsing RR method:”);
printf(“n proce name.status.ax.bx.cx.dx.pc.psw.pri.ptimen ”);
for(i=0;i
if(q->ptime==0)
j=0;
else if(q->ptime
{
q->status=pfree;
q->ptime=0;
printf(“n%10c%5d%8d%5d%5d%5d%5d%5d%5d%5d”,q->name,q->status,q->ax,q->bx,q->cx,q->dx,q->pc,q->psw,q->pri,q->ptime);/*check proce running status */
totaltime-=etime;}
else if(q->ptime>etime)
{q->status=running;
q->ptime=q->ptime-etime;
printf(“n%10c%5d%8d%5d%5d%5d%5d%5d%5d%5d”,q->name,q->status,q->ax,q->bx,q->cx,q->dx,q->pc,q->psw,q->pri,q->ptime);/*check proce running status */
q->status=aready;
totaltime-=etime;}
if(i
i++;
else if(i==procenum-1)
i=0;
}}
void proceStaPri(pcb *procearray[]){
pcb *q;
int i,j;printf(“n the proce use StaPri method.n”);
printf(“running the frist proce:n”);
for(i=0;i
{if(procearray[j]->pri>procearray[j+1]->pri){q=procearray[j];procearray[j]=procearray[j+1];procearray[j+1]=q;}}
for(i=0;i
{
procearray[i]->status=running;
q=procearray[i];
printf(“n proce name.status.ax.bx.cx.dx.pc.psw.pri.ptimen ”);
printf(“n%10c%5d%8d%5d%5d%5d%5d%5d%5d%5d”,q->name,q->status,q->ax,q->bx,q->cx,q->dx,q->pc,q->psw,q->pri,q->ptime);/*check proce running status */
q->status=pfree;}
for(j=0;j
printf(“n检查进程%3c是否结束,进程当前状态:%3d”,q->name,q->status);}
printf(“ngame is over!n”);}
void main(){
*procearray=createproce(procearray);proceRR(procearray);proceStaPri(procearray);
}
三、实验报告
1.在源程序上写出注释。2.画出程序流程图。3.调试程序并写出运行结果。