时间片轮转调度算法Word文档下载推荐.docx

上传人:b****6 文档编号:20889662 上传时间:2023-01-26 格式:DOCX 页数:12 大小:16.20KB
下载 相关 举报
时间片轮转调度算法Word文档下载推荐.docx_第1页
第1页 / 共12页
时间片轮转调度算法Word文档下载推荐.docx_第2页
第2页 / 共12页
时间片轮转调度算法Word文档下载推荐.docx_第3页
第3页 / 共12页
时间片轮转调度算法Word文档下载推荐.docx_第4页
第4页 / 共12页
时间片轮转调度算法Word文档下载推荐.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

时间片轮转调度算法Word文档下载推荐.docx

《时间片轮转调度算法Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《时间片轮转调度算法Word文档下载推荐.docx(12页珍藏版)》请在冰豆网上搜索。

时间片轮转调度算法Word文档下载推荐.docx

R'

:

运行,'

W'

等待,'

F'

结束*/

structnode*next;

/*指向下一个进程的链指针*/

}PCB;

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

/*指向三个队列的队首的指针,

finish为完成队列头指针,

ready为就绪队列头指针,

tail为就绪队列的队尾指针,

run为当前运行进程头指针*/

intN;

/*定义进程的数目*/

voidfirstin(void);

//调度就绪队列的第一个进程投入运行;

voidprint1(chara);

//打印表头行信息

voidprint2(charchose,PCB*p);

//打印每一行的状态信息

voidprint(charchose);

//打印每执行一次算法后所有的进程的状态信息

voidinsert_prio(PCB*q);

//在优先数算法中,将尚未完成的PCB按优先数顺序插入到就绪队列中;

voidprior_init(charchose);

//进程优先级法初始化将进程按优先级插入到就绪队列里voidpriority(charchose);

//进程优先级算法总函数

voidinsert_rr(PCB*q);

//在轮转法中,将执行了一个时间片单位(为2),但尚未完成的进程的PCB,插到就绪队列的队尾;

voidroundrun_init(charchose);

//循环轮转法初始化将就绪队列保存为FIFO队列

voidroundrun(charchose);

//循环轮转法总算法

voidmain()//主函数

charchose='

'

;

while((chose!

='

e'

)&

&

(chose!

E'

))

fflush(stdin);

system("

cls"

);

/*printf("

\t\t\t两种进程调度算法的模拟\n\n"

printf("

\tP.进程优先级算法模拟\n\n"

*/

\tR.循环轮转算法模拟\n\n"

\tE.退出程序\n\n"

\t请输入你的选择:

"

scanf("

%c"

&

chose);

if((chose!

/*if((chose=='

P'

)||(chose=='

p'

prior_init(chose);

priority(chose);

}*/

/*else*/if((chose=='

r'

roundrun_init(chose);

roundrun(chose);

}

\n\t\t谢谢使用!

\n"

voidfirstin(void)//调度就绪队列的第一个进程投入运行;

if(ready!

=NULL)

run=ready;

ready=ready->

next;

run->

state='

next=NULL;

else

run=NULL;

voidprint1(chara)//打印表头行信息

if(toupper(a)=='

namecputimeneedtimeprioritystate\n"

namecputimeneedtimecountroundstate\n"

voidprint2(charchose,PCB*p)//打印每一行的状态信息

if(toupper(chose)=='

%s\t%d\t%d\t%d\t%c\n"

p->

name,p->

cputime,p->

needtime,p->

prio,p->

state);

%s\t%d\t%d\t%d\t%d\t%c\n"

count,p->

round,p->

voidprint(charchose)//打印每执行一次算法后所有的进程的状态信息

PCB*p;

print1(chose);

if(run!

print2(chose,run);

p=ready;

while(p!

print2(chose,p);

p=p->

p=finish;

voidinsert_prio(PCB*q)/*在优先数算法中,将尚未

完成的PCB按优先数顺序插入到就绪队列中;

PCB*p,*s,*r;

/*p,r用来控制就绪队列滚动,S指向插入的队列*/

s=q;

r=p;

if(s->

prio>

ready->

prio)//要插入的进程的优先级大于ready的优先级

s->

next=ready;

ready=s;

else//要插入的进程的优先级不大于ready的优先级

while(p)

if(p->

=s->

prio)

break;

}//找到要插入的位置

next=p;

r->

next=s;

/*voidprior_init(charchose)/*进程优先级法初始化

将进程按优先级插入到就绪队列里

inti,time;

charna[10];

ready=NULL;

finish=NULL;

\t\t进程优先级算法模拟全过程\n\n"

输入进程的个数N:

%d"

N);

for(i=0;

i<

N;

i++)

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

输入第%d个进程名\n"

i+1);

%s"

na);

完成进程需要的时间片数\n"

time);

strcpy(p->

name,na);

p->

cputime=0;

needtime=time;

prio=50-time;

//设置进程优先值初值

if(ready==NULL)

ready=p;

insert_prio(p);

当前就绪队列的进程的信息\n"

print(chose);

%d个进程已按优先级从高到低进到就绪队列中\n"

N);

按回车键开始模拟优先级算法.....\n"

getchar();

firstin();

}*/

/*voidpriority(charchose)//进程优先级算法总函数

inti=1;

while(run!

cputime+=1;

needtime-=1;

prio-=1;

if(run->

needtime==0)

next=finish;

finish=run;

prio=0;

if((ready!

=NULL)&

(run->

prio<

prio))

insert_prio(run);

第%d次执行优先级算法\n"

i++);

if(run)

按回车键继续下一次优先级算法.....\n"

优先级算法模拟过程结束!

voidinsert_rr(PCB*q)//在轮转法中,将执行了一个时间片单位(为2),

//但尚未完成的进程的PCB,插到就绪队列的队尾;

tail->

next=q;

tail=q;

q->

voidroundrun_init(charchose)/*循环轮转法初始化

将就绪队列保存为FIFO队列*/

\t\t循环轮转算法模拟全过程\n\n"

count=0;

round=2;

insert_rr(p);

tail=p;

%d个进程已按FIFO进到就绪队列中\n"

按回车键开始模循环轮转算法.....\n"

voidroundrun(charchose)//循环轮转法总算法

count+=1;

count==run->

round)

insert_rr(run);

第%d次执行循环轮转算法\n"

按回车键继续下一次循环轮转算法.....\n"

循环轮转算法模拟过程结束!

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 城乡园林规划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1