欢迎来到天天文库
浏览记录
ID:42017777
大小:89.50 KB
页数:8页
时间:2019-09-05
《进程调度模拟实验(bbs)》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、进程调度模拟实验1.实验目的通过对进程调度算法的模拟加深对进程概念和进程调度过程的理解。2.实验内容和要求用C语言实现对N(N=5)个进程的调度模拟,可以采用如简单轮转法RoundRobin>优先权高者优先算法HighestPriorityFirst等,分别进行模拟调度。每个用来标识进程的进程控制块PCB用结构(记录)来描述,根据需要,它包括以下字段:◊进程标识数ID。◊进程优先数Priority,并规定优先数越大的进程,其优先权越高。采用简单轮转法时该字段无用。◊进程已经占用的CPU时间CPUTIMEo◊进程还需占用的CPU时间ALLTIMEo当进程运行完毕吋,ALLTIME变为0
2、。◊进程状态STATE。◊队列指针NEXT,用来将PCB排成队列。优先数改变的原则(采用简单轮转法时该字段无用):◊进程在就绪队列中等待一个时间片,优先数增加1;◊进程每运行一个吋间片,优先数减3。假设在进行调度前,系统中有5个进程,它们的初始状态可以编程输入(更具有灵活性),也可以初始化为如下内容:IDPRIORITYCPUTIMEALLTIMESTATE0903READY13803READY23006READY32903READY4004READY为了清楚地观察诸进程的调度过程,程序应该将每个时间片内各进程的情况显示出来并暂停,参考格式如2Running:IReadyQueue:
3、Idi,Idj,・・.IDPRIORITYCPUTIMEALLTIMESTATE0P0COAOSO1PlClAlSI2P2C2A2S23P3C3A3S34P4C4A4S4三、源代码#include#include#include#definegctpch(typc)(typc*)malloc(sizcof(typc))#defineNULL0#defineTIME2〃时间片长度typedefstructpcb{〃进程管理块charname[10];//进程名字charstate;〃进程状态intqueue;〃进程所在的队列int
4、ntime;〃进程需要运行的时间intrtimc;〃进程已经运行的时间intetime;〃进程在本队列可运行的时间片structpeb*link;}PCB;PCB*rcady=NULL,*pinscrt=NULL,*pfcnd=NULL,*p=NULL;〃就绪队列,进程插入位置的变量intgeti()〃使用户仅能输入整数{charch;inti=0;fflush(stdin);ch=getchar();whilc(ch=='){printf("tf输入不能为空•.请重新输入");fflush(stdin);ch=getchar();}whilc(ch!=*){if(ch
5、>911ch<*0'){printf(Mt输入有误!!输入只能为正整数,请重新输入.An”);fflush(stdin);i=();ch=gctchar();}else{i=i*10+(chch=getchar();returni;}voidfindpos()//更新状态虽{PCB*ps=pfend;if(!psII!ps->linkII(ps->link->queue・ps->queue)>1)pinsert=ps;clsc{while(ps->link&&ps->link->queue!=(pfend->queue+2))ps=ps->link;pinsert=ps;voidi
6、nscil()〃插入进程{if(!ready){ready=p;pfend=p;pinsert=p;}elseif(ready->queue==1){〃第一队列存在p->link=pfend->link;pfend->link=p;pfend=p;findpos();)else)p->link=ready;ready=p;findpos();voidinput()/*建立进程控制块函数*/inti,num;printf(M请输入进程的个数?”);num=geti();for(i=0;i7、CB);printf(H输入进程名scanf(M%s",p->name);printf(M输入进程运行时间:”);p->ntimc=gcti();printf(Hn);p->rtime=O;p->state='w,;p->queue=1;p->ctimc=TIME;p->link=NULL;insert();/*调用insert函数*/}}voiddisp(PCB*p“/*建立进程现实函数,用于显示当前进程*/{printf(Hnamet
7、CB);printf(H输入进程名scanf(M%s",p->name);printf(M输入进程运行时间:”);p->ntimc=gcti();printf(Hn);p->rtime=O;p->state='w,;p->queue=1;p->ctimc=TIME;p->link=NULL;insert();/*调用insert函数*/}}voiddisp(PCB*p“/*建立进程现实函数,用于显示当前进程*/{printf(Hnamet
此文档下载收益归作者所有