您好,欢迎来到华佗养生网。
搜索
您的当前位置:首页进程调度模拟实验--源代码

进程调度模拟实验--源代码

来源:华佗养生网


#include \"stdio.h\"

#include \"stdlib.h\"

#include \"string.h\"

typedef struct node /*创建PCB*/

{ char name[10]; /*进程标识*/

int prio; /*进程优先数*/

int cputime; /*进程占用CPU时间*/

int needtime; /*进程完成所需时间*/

int count; /*计数器*/

char state; /*进程的状态*/

struct node *next; /*链指针*/

}PCB;

PCB *finish,*ready,*tail,*run;

int N;

//*************************************************************************

void firstin() /*创建就绪队列对头指针*/

{

run=ready;

run->state='R';

ready=ready->next;

}

//*************************************************************************

void prt(char algo) /*演示进程调度*/

{

PCB *p;

printf(\" 标识 占用CPU时间 完成所需时间 优先数 状态\\n\");

if(run!=NULL)

printf(\" %-6s%-14d%-14d%-8d %c\\n\

run->cputime,run->needtime,run->prio,run->state);

p=ready;

while(p!=NULL)

{ printf(\" %-6s%-14d%-14d%-8d %c\\n\

p->cputime,p->needtime,p->prio,p->state);

p=p->next;

}

p=finish;

while(p!=NULL)

{ printf(\" %-6s%-14d%-14d%-8d %c\\n\

p->cputime,p->needtime,p->prio,p->state);

p=p->next;

}

getchar();

}

//*************************************************************************

void insert(PCB *q)

{

PCB *p1,*s,*r;

int b;

s=q;

p1=ready;

r=p1;

b=1;

while((p1!=NULL)&&b)

if(p1->prio>=s->prio)

{

r=p1;

p1=p1->next;

}

else

b=0;

if(r!=p1)

{

r->next=s;

s->next=p1;

}

else

{

s->next=p1;

ready=s;

}

}

//*************************************************************************

void create(char alg) /*创建各个进程*/

{

PCB *p;

int i,time;

char na[10];

ready=NULL;

finish=NULL;

run=NULL;

for(i=1;i<=N;i++)

{

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

printf(\"输入进程的标识:\\n\");

scanf(\"%s\

printf(\"输入进程的时间(不要超过50):\\n\");

scanf(\"%d\

strcpy(p->name,na);

p->cputime=0;

p->needtime=time;

p->state='w';

p->prio=50-time; /*假设优先级与耗时之和为50*/

if(ready!=NULL)

insert(p);

else

{

p->next=ready;

ready=p;

}

}

// clrscr();

printf(\" 显示进程\\n\");

printf(\"************************************************\\n\");

prt(alg);

run=ready;

ready=ready->next;

run->state='R';

}

//*************************************************************************

void priority(char alg) /*优先级算法调度*/

{

while(run!=NULL&&run->prio>=0)

{

run->cputime=run->cputime+1;

run->needtime=run->needtime-1;

run->prio=run->prio-3;

if(run->needtime==0)

{

run->next=finish;

finish=run;

run->state='F';

run=NULL;

if(ready!=NULL)

firstin();

}

else

if((ready!=NULL)&&(run->prioprio))

{

run->state='W';

insert(run);

firstin();

}

prt(alg);

}

}

//*************************************************************************

void main()

{ char algo;

// clrscr();

loop: printf(\"输入进程的总数(不要超过10个):\\n\");

scanf(\"%d\

if(N>10)

{printf(\"输入的数字太大,请重新输入.\\n\");

goto loop;}

create(algo);

priority(algo);

}

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo7.cn 版权所有 湘ICP备2022005869号-9

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务