轮转调度算法计算平均周转时间,轮转调度算法怎么求完成时间

2022年 10月 20日 发表评论
腾讯云正在大促:点击直达 阿里云超级红包:点击领取
免费/便宜/高性价比服务器汇总入口(已更新):点击这里了解

一、实验步骤

1、在文档右边的虚拟化操作系统中,打开桌面的 Xfce 终端,输入cd Desktop

2、输入touch 4-1.c

3、输入gedit 4-1.c

4、在 gedit 里面输入源代码,点击 save 保存

5、关掉 gedit 编辑器

6、输入gcc -o 4-1 4-1.c

7、在桌面的 Xfce 终端继续输入命令./4-1

8、按要求输入并运行,观察结果

9、理解与分析源代码,反复调试运行

10、按要求修改程序,增加时间片轮转调度法

11、修改程序:将时间片改为2

二、实验结果

三、实验改进

1、增加时间片轮转调度法;时间片为1;进程运行一次后直接挂入就绪队列队尾。

修改的程序代码:

1)增加函数insert2/轮转法的插入算法,直接插入就绪队列的队尾/ insert2(PCB q)

{

PCB *p1,*s,*r;

int b;

s=q;

p1=ready;

r=p1;

while (p1!=NULL)

{

r=p1;

p1=p1->next;

}

r->next=s;

s->next=NULL;

}

2)增加函数create2/轮转法创建初始PCB信息

void create2(char alg)

{

PCB p;

int i,time;

char na[10];

ready=NULL;

finish=NULL;

run=NULL;

printf("输入进程号和运行时间:n");

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

{

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

scanf("%s",na);

scanf("%d",&time);

strcpy(p->name,na);

p->cputime=0;

p->needtime=time;

p->state='w';

p->count=0;

p->round=1;

if(ready!=NULL)

insert2(p);

else

{

p->next=ready;

ready=p;

}

}

//clrscr();

printf("

printf("****n");

prt(alg);

run=ready;

ready=ready->next;

run->state='R';

}

3)增加函数roundrun/轮转片调度算法

roundrun(char alg)

{

while(run!=NULL)

{

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

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

run->count=run->count+1;

if(run->needtime==0)

{

run->next=finish;

finish=run;

run->state='F';

run=NULL;

if(ready!=NULL)

firstin();

}

else

if (ready!=NULL)

{

run->state='W';

insert2(run);

firstin();

}

prt(alg);

}

}

4)修改主函数

main()

{

char algo;

//clrscr();

printf("选择算法:P/R(优先数算法/时间片轮转算法)n");

scanf("%c",&algo);

//algo='p';

printf("输入进程数:n");

scanf("%d",&N);

if(algo=='P'||algo=='p')

{

create1(algo);

priority(algo);

}

else

if(algo=='R'||algo=='r')

{

create2(algo);

roundrun(algo);

}

}

2、修改程序:将时间片改为2。

p->round=1改为:p->round=2

52792965

小咸鱼

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: