logo资料库

c语言 进程调度FCFS SJF HRRN RR.pdf

第1页 / 共11页
第2页 / 共11页
第3页 / 共11页
第4页 / 共11页
第5页 / 共11页
第6页 / 共11页
第7页 / 共11页
第8页 / 共11页
资料共11页,剩余部分请下载后查看
#include "stdio.h" #include "stdlib.h" #define true 1 #define false 0 /*创建 PCB*/ typedef struct PCB { int name; int pre; int needTime; int reachTime; int runTime; struct PCB *next; }PCB,*Top1; /*栈初始化*/ int initStack(Top1 *t) { *t=NULL; return true; } /*添加元素*/ int push(Top1 *t,int name,int pre,int needTime,int reachTime,int runTime) { Top1 p=(Top1)malloc(sizeof(PCB));/* 开内存 */ if(p==NULL) return false; p->name=name; p->pre=pre; p->needTime=needTime; p->reachTime=reachTime; p->runTime=runTime; p->next=*t; *t=p; return true; } /*设置各参量*/ void setname(Top1 *t,int Name) { (*t)->name=Name; } void setpre(Top1 *t,int Pre)
{ (*t)->pre=Pre; } void setneedTime(Top1 *t,int NeedTime) { (*t)->needTime=NeedTime; } void setreachTime(Top1 *t,int ReachTime) { (*t)->reachTime=ReachTime; } void setrunTime(Top1 *t,int RunTime) { (*t)->runTime=RunTime; } /*删除栈顶元素*/ int pop(Top1 *t) { Top1 p=*t; *t=p->next; free(p); /* 释放所占内存 */ return true; } /*取得各参量*/ int getname(Top1 *t) { return (*t)->name; } int getpre(Top1 *t) { return (*t)->pre; } int getneedTime(Top1 *t) { return (*t)->needTime; } int getreachTime(Top1 *t) { return (*t)->reachTime; } int getrunTime(Top1 *t) {
return (*t)->runTime; } /*先来先服务*/ void FCFS(Top1 *Top,int num) { int i,j; int Name,Pre,NeedTime,ReachTime,RunTime; Top1 pcb; initStack(&pcb); /*将栈个元素翻转*/ for(i=0;i
Name,Pre,NeedTime,ReachTime,RunTime++); } NeedTime--; } pop(&pcb); } } /*段作业优先*/ void SJF(Top1 *Top,int num) { int i,j,temp,sum=0; int Name,Pre,NeedTime,ReachTime,RunTime; int Name1,Pre1,NeedTime1,ReachTime1,RunTime1; Top1 pcb; Top1 pcb1; Top1 pcb2; initStack(&pcb); initStack(&pcb1); /*翻转放入另一栈中*/ for(i=0;i
ReachTime=getreachTime(&pcb); RunTime=getrunTime(&pcb); push(&pcb1,Name,Pre,NeedTime,ReachTime,RunTime); pop(&pcb); } else if(itemp) { Name1=getname(&pcb1); Pre1=getpre(&pcb1); NeedTime1=getneedTime(&pcb1); ReachTime1=getreachTime(&pcb1); RunTime1=getrunTime(&pcb1); pop(&pcb1); push(&pcb1,Name,Pre,NeedTime,ReachTime,RunTime); push(&pcb1,Name1,Pre1,NeedTime1,ReachTime1,RunTime1); } else push(&pcb1,Name,Pre,NeedTime,ReachTime,RunTime); pop(&pcb); } Name=getname(&pcb1); Pre=getpre(&pcb1)-1; NeedTime=getneedTime(&pcb1)-1; ReachTime=getreachTime(&pcb1); RunTime=getrunTime(&pcb1)+1; if(NeedTime<0||NeedTime==0) { printf("%d %d %d %d %d \n", Name,Pre,NeedTime,ReachTime,RunTime);
printf("process %d is over.\n",Name); pop(&pcb1); } else { printf("%d %d %d %d %d \n", Name,Pre,NeedTime,ReachTime,RunTime); setneedTime(&pcb1,NeedTime); setrunTime(&pcb1,RunTime); setpre(&pcb1,Pre); } } } /*时间片轮转*/ void RR(Top1 *Top,int num) { int i,j,temp,sum=0; int Name,Pre,NeedTime,ReachTime,RunTime; int Name1,Pre1,NeedTime1,ReachTime1,RunTime1; Top1 pcb; Top1 pcb1; Top1 pcb2; initStack(&pcb); initStack(&pcb1); for(i=0;i
{ Name=getname(&pcb); Pre=getpre(&pcb); NeedTime=getneedTime(&pcb); ReachTime=getreachTime(&pcb); RunTime=getrunTime(&pcb); push(&pcb1,Name,Pre,NeedTime,ReachTime,RunTime); pop(&pcb); Name=getname(&pcb1); Pre=getpre(&pcb1)-1; NeedTime=getneedTime(&pcb1)-1; ReachTime=getreachTime(&pcb1); RunTime=getrunTime(&pcb1)+1; if(NeedTime<0||NeedTime==0) { printf("%d %d %d %d \n", Name,NeedTime,ReachTime,RunTime); printf("process %d is over.\n",Name); pop(&pcb1); num--; } else { printf("%d %d %d %d \n", Name,NeedTime,ReachTime,RunTime); setneedTime(&pcb1,NeedTime); setrunTime(&pcb1,RunTime); } i++; } temp=num; for(i=0;i
push(&pcb,Name,Pre,NeedTime,ReachTime,RunTime); pop(&pcb1); } } } /*高响应比优先*/ void HRRN(Top1 *Top,int num) { int i,j,temp,sum=0; int Name,Pre,NeedTime,ReachTime,RunTime; int Name1,Pre1,NeedTime1,ReachTime1,RunTime1; Top1 pcb; Top1 pcb1; Top1 pcb2; initStack(&pcb); initStack(&pcb1); for(i=0;i
分享到:
收藏