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

2019-05-17 17:41

p=qf2;

qf2=qf2->next;p->next=NULL; blog2--;

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

blog3++; }

else if(blog3>0) /*第三个队列不为空*/ { }

p=qf3;

qf3=qf3->next;p->next=NULL;

blog3--;

printf(\ %-10s%-10d%\\n\ a=run(p,qf3,ql3); if(a==1) blog3++;

}

} /*使用getchar()函数可以让输出时停留画面,等待人按回车继续*/ void main() { qf1=ql1=(PCB *)malloc(sizeof(PCB)); }

qf2=ql2=(PCB *)malloc(sizeof(PCB)); qf2=ql2=(PCB *)malloc(sizeof(PCB)); int n;

blog1=blog2=blog3=0;

printf(\请输入进程的个数: \scanf(\create(n); prt();

2.4.4测试结果及说明

2.5.短作业调度

2.5.1.算法思想

短作业优先调度算法是指对短作业进行调度的算法。它从后备队列总选择一个或若干

个运行时间最短的作业,将他们调入内存运行。

2.5.2.算法流程图:

短作业优先算法流程图 执行程序 N 按时间服务进行排序 就绪队列空? Y 结束 输入进程名 开始 2.5.3.程序代码

#include #include #include

typedef struct node

{ char name[10]; /*进程名*/ int cputime; /*占用cpu时间*/ int needtime; /*要求运行时间*/

char state; /*状态*/ struct node *next; /*指针*/

}PCB;

PCB *ready, *run, *finish; //就绪、执行、结束指针 int N; //进程数量 void print() //输出函数 {

PCB *p;

printf(\ NAME CPUTIME NEEDTIME STATUS\\n\if(run != NULL) printf(\ %-10s%-10d%-10d %c\\n\

run->name, run->cputime, run->needtime,

run->state); /*输出执行的进程的信息*/

p=ready;

while(p != NULL) { printf(\ %-10s%-10d%-10d %c\\n\ p->name, }

p->cputime, p->needtime,

p->state); /*输出就绪进程的信息*/

p=p->next;

p=finish;

while(p != NULL) {

printf(\ %-10s%-10d%-10d %c\\n\

p->name, p->cputime,

p->needtime, p->state); /*输出结束队列的信息*/ p=p->next;

}

getchar(); /*使用getchar()函数可以让输出时停留画面, 等待人按回车继续*/

}

void insert(PCB *q) /*插入新进程,把进程按进程到来时间大小排序*/

{

PCB *p1,*s,*r; int b;

s=q; /*指针s指向新要插入的进程*/

p1=ready; /*指针p1指向原来的进程队列的队首*/ r=p1; /*使用指针r是指向p1前面的进程*/ b=1;

while((p1!=NULL)&&b) if(p1->needtimeneedtime)

{

r=p1; p1=p1->next;

} /*新进程的开始时间大,则p1 指向下一个进程继续比*/ else b=0; if(r!=p1) {

r->next=s; s->next=p1;

} /*新进程找到位置,插在r和p1之间*/ else {

s->next=p1; ready=s;

} /*新进程的开始时间按最小,插在队首,并修改就绪队首ready指针*/

}

void create() {

PCB *p; int i;

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

printf(\ /*输入进程名、运行时间和开始时间*/

for(i=0;i

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

p->cputime=0;

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

{ /*否则先插在NULL前*/

p->next=ready;

ready=p;

} }

printf(\ Display is going to start: \\n\

printf(\print();

getchar();

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

}

void SJF() { }

while(run != NULL) { }

run->cputime=run->cputime+run->needtime; run->needtime=0; run->next=finish; finish = run; run->state='E'; run = NULL; if(ready != NULL) { run = ready; run->state='R'; }

ready=ready->next;

print();

void main() { }

printf(\scanf(\

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

2.5.4.测试结果截图及操作说明

首先输入2个控制进程快,分别命名s1和s2 ,并且时间分别是2和5.短作业优先调度算法运行情况如4-7到4-9所示


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

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

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

马上注册会员

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