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

2019-05-17 17:41

2.2.4.测试结果及说明

优先级调度算法运行情况如图1,图2,图3,图4所示

图1.输入进程块的数量

图2.输入每个进程的名称、时间、优先级

图3.输入所有的进程的相关信息

图4.所有进程调度算法完成

2.3.时间片轮转调度 2.3.1.算法思想

所有就绪进程按先来先服务的原则排成一个队列,将新来的进程加到就绪对列的末尾,每当执行进程调度时,总是把处理机分配给队首的进程,各进程占用CPU的时间片相同。也就是说CPU的处理时间划分成一个个相同的时间片,就绪队列的所有进程轮流运行一个时间片。当一个时间片结束时,如果运行进程用完它的时间片后还未完成,就强迫运行进程让出CPU,就把它送回到就绪队列的末尾,等待下一次调度。同时,进程调度又去选择就绪队列中的队首进程,分配给它一时间片,以投入运行。直至所有的进程运行完毕。

2.3.2.算法流程图

2.3.3.程序代码

#include #include #include typedef struct node {

char name[10]; /*进程名*/

int count; /*计数器,判断是否=时间片的大小*/ int cputime; /*占用cpu时间*/

int needtime; /*要求运行时间*/ char state; /*状态*/ struct node *next; /*指针*/

}PCB;

PCB *ready,*run,*finish,*tail; /*就绪 执行 结束 尾指针*/ int N,round;

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

printf(\ NAME CPUTIME NEEDTIME STATUS\\n\ if(run!=NULL)

printf(\ %-10s%-10d%-10d %c\\n\me,run->state); /*输出执行的进程的信息*/ p=ready;

while(p!=NULL) {

printf(\ %-10s%-10d%-10d %c\\n\state); /*输出就绪进程的信息*/ p=p->next;

p=finish; while(p!=NULL) {

printf(\ %-10s%-10d%-10d %c\\n\state); /*输出结束队列的信息*/ p=p->next; } getchar();

}

void insert(PCB *q) /*在队尾插入新的进程*/ {

PCB *p; p=ready;

while(p->next!=NULL) {

p=ready->next; }

tail=p;

tail->next=q; q->next=NULL; }

}

void create() { int i; */

for(i=0;i

{ p=(PCB *)malloc(sizeof(PCB)); /*为新进程开辟空间*/ scanf(\ /*输入进程名*/

PCB *p;

ready=NULL; run=NULL; finish=NULL;

printf(\ /*输入进程名、和

scanf(\ /*输入进程要求运行时间*/

p->cputime=0;

p->state='W'; /*表示就绪队列中未在队首先执行,但也是就绪状态*/ if (ready!=NULL) insert(p); /*就绪队首不为NULL,插入新进程*/ else

{

p->next=ready; ready=p; tail=p; } }

printf(\ Display is going to start: \\n\ printf(\ prt();

getchar();

run=ready; /*队列排好,run指向就绪队列队首*/ ready=ready->next; /*ready指向下一个进程*/ run->state='R';

} /*队首进程的状态为就绪*/ void count() {

队尾*/

while(run!=NULL)

{

run->cputime=run->cputime+1; /*运行一次cpu占用时间加一*/ run->needtime=run->needtime-1; /*运行一次要求运行时间减一*/ run->count=run->count+1; /*运行一次计数器加一*/ if(run->needtime==0) /*若要求运行时间为0时*/ { run->next=finish; /*退出队列*/

finish=run; /*finish为结束进程的队列 */ run->state='E'; /*修改状态为结束*/ run=NULL; /*释放run指针*/

if (ready!=NULL) /*创建新就绪队列的头指针*/ {

run=ready; run->state='R'; ready=ready->next; }

} else if(run->count==round) /*如果时间片到*/

{ run->count=0; /*计数器置0*/

if(ready!=NULL) /*如就绪队列不空*/ {

run->state='W';

insert(run); /*在进程队列中重新插入原来进程,插入


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

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

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

马上注册会员

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