进程模拟调度算法课程设计(4)

2019-05-17 17:41

}

void main() { }

}

}

run=ready; /*重新置就绪队列的头指针*/ run->state='R';

ready=ready->next;

}

prt();

printf(\scanf(\

create(); /*模拟创建进程,并输入相关信息*/ count(); /*优先数调度算法*/

2.3.4.测试结果及说明

时间片轮转调度算法运行情况如图1,图2,图3所示

图1 所有的进程都在队列中

图2 其中一个进程执行完毕

图4 所有的进程都执行完毕

2.4.多级反馈队列调度 2.4.1算法思想

允许进程在队列之间移动。在系统中设置多个就绪队列,每个队列对应一个优先级,第一个队列的优先级最高,第二队列次之。以下各队列的优先级逐步低。各就绪队列中的进程的运行时间片不同,高优先级队列的时间片小,低优先级队列的时间片大。进程并非总是固定在某一队列中,新进程进入系统后,被存放在第一个队列的末尾。如果某个进程在规定的时间片内没有完成工作,则把它转入到下一个队列的末尾,直至进入最后一个队列。系统先运行第一个队列中的进程。当第一队列为空时,才运行第二个队列中的进程。依此类推,仅当前面所有的队列都为空时,才运行最后一个队列中的进程。当处理器正在第i个队列中为某个进程服务时,又有新进程进入优先级最高的队列(第1—(i-1)中的任何一个对列),则此新进程要抢占正在运行进程的处理器,即由调度程序把正在运行的进程放回第i队列的末尾,把处理器分配给新到的高优先级进程。除最低优先权队列外的所有其他队列,均采用相同的进程调度算法,即按时间片轮转的FIFO(先进先出)算法。最后一个队列中的进程按按时间片轮转或FCFS策略进行调度。它是综合了FIFO、RR和剥夺式HPF的一种进程调度算法。

2.4.2算法流程图

2.4.3程序代码

#include #include #include #define NULL 0

typedef struct node { char name[10]; /*进程名*/ int num; /*进程所在队列数,也是该队列的时间片*/

int cputime; /*占用cpu时间*/ int needtime; /*要求运行时间*/ struct node *next; /*指针*/

}PCB;

PCB *qf1,*ql1;

PCB *qf2,*ql2;

PCB *qf3,*ql3;//定义三个队列的头指针和尾指针

int blog1,blog2,blog3; /*分别记录队列1,、队列2、队列3中进程数*/

void insert(PCB *q,PCB *qf,PCB *ql) {

q->num++;

if(qf==NULL&&ql==NULL) { //队列为空 qf=ql=q; }

else

{//队列不为空

ql->next=q; ql=q;

}

ql->next=NULL;

}

void create(int n)

{//创建进程,刚来的进程都进入队列1

PCB *p;

p=(PCB *)malloc(sizeof(PCB)); int i;

blog1=blog2=blog3=0; //各队列中进程数均为0 printf(\ /*输入进程名和所需时间*/

for(i=0;i

scanf(\ /*输入进程要求运行时间*/ p->cputime=0;

p->num=0;

insert(p,qf1,ql1);

blog1++; //队列中进程数加1

}

int run(PCB *q,PCB *qf,PCB *ql) {

PCB *p,*f,*l;

/*p=(PCB *)malloc(sizeof(PCB)); f=(PCB *)malloc(sizeof(PCB)); l=(PCB *)malloc(sizeof(PCB));*/

p=q;

f=qf; l=ql;

if(q->needtime<=q->num) /*在时间片内完成*/ {

//q->cputime+=q->needtime; q->needtime=0; free(q); return 0;

}

else /*不能在时间片内完成*/ { }

//q->cputime+=q->num; q->needtime-=q->num;

if(q->num<3) q->num++;

insert(p,f,l); //进入下一个队列 return 1;

}

void prt() /*输出函数,可以方便看到进程执行的演示*/ {

PCB *p;

//p=(PCB *)malloc(sizeof(PCB)); int a;

printf(\ NAME CPUTIME NEEDTIME STATUS\\n\while(blog1>0||blog2>0||blog3>0) { if(blog1>0) /*第一个队列不为空*/

{

p=qf1;

qf1=qf1->next; p->next=NULL; blog1--;

printf(\ %-10s%-10d%\\n\ a=run(p,qf2,ql2); if(a==1)

blog2++;

}

else if(blog2>0) {

/*第二个队列不为空*/


进程模拟调度算法课程设计(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:实验二光纤干涉仪实验

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: