CPU调度算法Word文档下载推荐.docx

上传人:b****7 文档编号:22367200 上传时间:2023-02-03 格式:DOCX 页数:20 大小:172.96KB
下载 相关 举报
CPU调度算法Word文档下载推荐.docx_第1页
第1页 / 共20页
CPU调度算法Word文档下载推荐.docx_第2页
第2页 / 共20页
CPU调度算法Word文档下载推荐.docx_第3页
第3页 / 共20页
CPU调度算法Word文档下载推荐.docx_第4页
第4页 / 共20页
CPU调度算法Word文档下载推荐.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

CPU调度算法Word文档下载推荐.docx

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

CPU调度算法Word文档下载推荐.docx

structPCB*next;

}pcb;

inttime;

intn;

pcb*head=NULL,*p,*q;

voidrun_fcfs(pcb*p1)

{time=p1->

arrivetime>

time?

p1->

arrivetime:

time;

starttime=time;

printf("

\n现在时间是%d,开始运行作业%s\n"

time,p1->

name);

time+=p1->

servicetime;

state="

T"

;

finishtime=time;

turnaroundtime=p1->

finishtime-p1->

arrivetime;

weightedturnaroundtime=p1->

turnaroundtime/p1->

到达时间开始时间服务时间完成时间周转时间带权周转时间\n"

);

%6d%10d%10d%8d%10.1f%10.2f\n"

arrivetime,p1->

starttime,p1->

servicetime,p1->

finishtime,p1->

turnaroundtime,p1->

weightedturnaroundtime);

}

voidfcfs()

{inti,j;

p=head;

for(i=0;

i<

n;

i++)

{if(p->

state=='

F'

{q=p;

run_fcfs(q);

p=p->

next;

voidgetInfo()

{intnum;

\n作业个数:

"

scanf("

%d"

&

n);

for(num=0;

num<

num++)

{p=(pcb*)malloc(sizeof(pcb));

依次输入:

进程名到达时间服务时间\n"

%s%d%d"

p->

name,&

arrivetime,&

servicetime);

if(head==NULL)

{head=p;

q=p;

time=p->

if(p->

arrivetime<

time)time=p->

q->

next=p;

starttime=0;

finishtime=0;

turnaroundtime=0;

weightedturnaroundtime=0;

next=NULL;

state='

voidmain()

{system("

graftabl936"

先来先服务算法模拟"

getInfo();

fcfs();

getch();

2、非抢占SJF

conio.h>

#defineMAX100

structjcb{

floatarrivetime;

floatstarttime;

floatfinishtime;

floatservicetime;

floatzztime;

floatavezztime;

};

structjcba[MAX];

voidinput(jcb*p,intN)

{inti;

请分别输入\n\t进程名到达时间服务时间\n\n"

=N-1;

{printf("

请输入第%d个进程信息:

i+1);

%s%f%f"

p[i].name,&

p[i].arrivetime,&

p[i].servicetime);

\n"

}

voidPrint(jcb*p,floatarrivetime,floatservicetime,floatstarttime,floatfinishtime,floatzztime,floatavezztime,intN)

{intk;

printf("

调度顺序:

%s"

p[0].name);

for(k=1;

k<

N;

k++)

{printf("

-->

p[k].name);

\n\n"

\t\t\t进程信息:

\nname\tarrive\tservice\tstart\tfinish\tzz\tavezz\n"

for(k=0;

%s\t%-.2f\t%-.2f\t%-.2f\t%-.2f\t%-.2f\t%-.2f\t\n"

p[k].name,p[k].arrivetime,p[k].servicetime,p[k].starttime,p[k].finishtime,p[k].zztime,p[k].avezztime);

voidsort(jcb*p,intN)

{inti,j;

for(i=0;

for(j=0;

j<

=i;

j++)

if(p[i].arrivetime<

p[j].arrivetime)

{jcbtemp;

temp=p[i];

p[i]=p[j];

p[j]=temp;

}

voiddeal(jcb*p,floatarrivetime,floatservicetime,floatstarttime,floatfinishtime,float&

zztime,float&

avezztime,intN)

for(k=0;

{if(k==0)

{p[k].starttime=p[k].arrivetime;

p[k].finishtime=p[k].arrivetime+p[k].servicetime;

else

{p[k].starttime=p[k-1].finishtime;

p[k].finishtime=p[k-1].finishtime+p[k].servicetime;

p[k].zztime=p[k].finishtime-p[k].arrivetime;

p[k].avezztime=p[k].zztime/p[k].servicetime;

voidjcbf(jcb*p,intN)

{floatarrivetime=0,servicetime=0,starttime=0,finishtime=0,zztime=0,avezztime=0;

intm,n,next,k,i=0;

floatmin;

sort(p,N);

for(m=0;

m<

N-1;

m++)

if(m==0)

p[m].finishtime=p[m].arrivetime+p[m].servicetime;

p[m].finishtime=p[m-1].finishtime+p[m].servicetime;

for(n=m+1;

n<

n++)

{if(p[n].arrivetime<

=p[m].finishtime)

i++;

min=p[m+1].servicetime;

next=m+1;

m+i;

{if(p[k+1].servicetime<

min)

{min=p[k+1].servicetime;

next=k+1;

{jcbtemp;

temp=p[m+1];

p[m+1]=p[next];

p[next]=temp;

deal(p,arrivetime,servicetime,starttime,finishtime,zztime,avezztime,N);

Print(p,arrivetime,servicetime,starttime,finishtime,zztime,avezztime,N);

intmain()

{intN,*b;

charch;

while

(1){

system("

CLS"

\t\t\t------短作业优先调度算法------\n"

输入进程个数:

scanf("

N);

if(N>

MAX){

\t!

!

输入的作业数目太大,请输入不大于%d的整数\n"

MAX);

按Q或者q退出程序,按其他任意键继续测试..."

ch=getch();

if(ch=='

Q'

||ch=='

q'

){

break;

elsecontinue;

input(a,N);

jcb*b=a;

jcbf(b,N);

return0;

getch();

3、可抢占优先权调度算法

dos.h>

time.h>

string.h>

typedefcharstring[10];

structtask{

stringname;

intarrTime;

intserTime;

intwaiTime;

intbegTime;

intfinTime;

intturTime;

intwTuTime;

intpriority;

intfinish;

}JCB[10];

intnum;

voidinput()

inti;

cls"

\n请输入作业数量:

num);

num;

\n请输入作业NO.%d:

i);

作业名称:

JCB[i].name);

到达时间:

JCB[i].arrTime);

服务时间:

JCB[i].serTime);

JCB[i].priority=0;

JCB[i].finish=0;

intHRN(intpre)

{

intcurrent=1,i,j;

JCB[i].waiTime=JCB[pre].finTime-JCB[i].arrTime;

JCB[i].priority=(JCB[i].waiTime+JCB[i].serTime)/JCB[i].serTime;

if(!

JCB[i].finish)

current=i;

for(j=i;

JCB[j].finish)

if(JCB[current].arrTime<

=JCB[pre].finTime)

if(JCB[j].arrTime<

=JCB[pre].finTime&

&

JCB[j].priority>

JCB[current].priority)

current=j;

else

JCB[current].arrTime)

if(JCB[j].arrTime==JCB[current].arrTime)

if(JCB[j].priority>

returncurrent;

voidruning(inti,inttimes,intpre,intstaTime,intendTime)

if(times=0)

JCB[i].begTime=JCB[i].arrTime;

JCB[i].finTime=JCB[i].begTime+JCB[i].serTime;

JCB[i].turTime=JCB[i].serTime;

JCB[i].wTuTime=1.0;

staTime=JCB[i].begTime;

if(JCB[i].arrTime>

JCB[pre].finTime)

JCB[i].begTime=JCB[pre].finTime;

JCB[i].turTime=JCB[i].finTime-JCB[i].arrTime;

JCB[i].wTuTime=JCB[i].turTime/JCB[i].serTime;

if(times==num-1)

endTime=JCB[i].finTime;

JCB[i].finish=1;

voidprint(inti,inttimes)

if(times==0)

名称到达时间服务时间开始时间完成时间周转时间带权周转时间\n"

%3s%9d%9d%9d%9d%9d%9d\n"

JCB[i].name,JCB[i].arrTime,JCB[i].serTime,JCB[i].begTime,JCB[i].finTime,JCB[i].turTime,JCB[i].wTuTime);

voidcheck()

inti;

intstaTime,endTime,sumTurTime=0.0,sumWTuTime=0.0,aveturTime,aveWTuTime;

intcurrent=0,times=0,pre=0;

JCB[pre].finTime=0;

JCB[i].finish=0;

staTime,endTime,sumTurTime=0.0,sumWTuTime=0.0,aveturTime,aveWTuTime;

current=0;

times=0;

pre=0;

-------------------------------------------\n"

-------HRRN-------------------------------------\n"

for(times=0;

times<

times++)

current=HRN(pre);

runing(current,times,pre,staTime,endTime);

print(current,times);

pre=current;

sumTurTime+=JCB[i].turTime;

sumWTuTime+=JCB[i].wTuTime;

aveturTime=sumTurTime/num;

aveWTuTime=sumWTuTime/num;

<

计与平均值>

%9d%9d%9d%9d\n"

NULL,sumTurTime,aveturTime,aveWTuTime);

-------------------------------------------------------\n"

voidmain()

charagain;

system("

do{

请输入4组数据:

input();

check();

Continue...(Y/N):

again=getch();

}while(again!

='

Y'

again!

y'

N'

n'

}while(again=='

||again=='

六、运行结果

 

七、实验总结

1、FCFS算法,即先来先服务,就是每次从就绪队列中选择一个最先进入队列

的进程,把CPU分配给它,令它运行。

该进程一直运行下去,直到完成,或者由于某种原因而阻塞,才会放弃CPU。

FCFS算法比较有利于长作业,而不利于短作业。

另外,FCFS调度算法对CPU繁忙型作业较有利,而不利于I/O繁忙型作业。

2、短作业优先法(SJF),是指分派CPU时,把CPU优先分给最短的作业。

SJF算法在作业调度上用的很多。

它的缺点是对长作业不利,并且不能保证及时处理紧迫性作业。

3、优先权算法指后备作业中选择一批优先权相对高的调入存。

4、最高响应比优先法(HRN)是对FCFS方式和SJF方式的一种综合平衡。

HRN调度策略同时考虑每个作业的等待时间长短和估计需要的执行时间长短,从中选出响应比最高的作业投入执行。

响应比R定义如下:

R=(W+T)/T=1+W/T。

5、作业调度的实现主要有两个问题:

一个是如何将系统中的作业组织起来;

另一个是如何进行作业调度。

6、为了将系统中的作业组织起来,需要为每个进入系统的作业建立档案以记录和作业相关的信息,例如,作业名‘作业执行时间、指向下一个作业控制块的指针等信息。

这个记录作业相关信息的数据块称为作业控制块JCB,并将系统中等待作业调度的作业控制块组织成一个队列,这个队列称为后备队列。

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

当前位置:首页 > 考试认证 > 公务员考试

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

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