优先级和时间片轮转调度_时间片轮转调度讲解

2020-02-29 其他范文 下载本文

优先级和时间片轮转调度由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“时间片轮转调度讲解”。

实验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.调试程序并写出运行结果。

《优先级和时间片轮转调度.docx》
将本文的Word文档下载,方便收藏和打印
推荐度:
优先级和时间片轮转调度
点击下载文档
相关专题 时间片轮转调度讲解 优先级 时间 时间片轮转调度讲解 优先级 时间
[其他范文]相关推荐
    [其他范文]热门文章
      下载全文