短作业优先算法.docx

上传人:b****7 文档编号:11374501 上传时间:2023-02-28 格式:DOCX 页数:7 大小:72.80KB
下载 相关 举报
短作业优先算法.docx_第1页
第1页 / 共7页
短作业优先算法.docx_第2页
第2页 / 共7页
短作业优先算法.docx_第3页
第3页 / 共7页
短作业优先算法.docx_第4页
第4页 / 共7页
短作业优先算法.docx_第5页
第5页 / 共7页
点击查看更多>>
下载资源
资源描述

短作业优先算法.docx

《短作业优先算法.docx》由会员分享,可在线阅读,更多相关《短作业优先算法.docx(7页珍藏版)》请在冰豆网上搜索。

短作业优先算法.docx

短作业优先算法

1.短作业(进程)优先调度算法SJ(P)F,是指对短作业或短进程优先调度的算法。

它们可以分别用于作业调度和进程调度。

短作业优先(SJF)的调度算法是从后备队列中选择一个或若干个估计运行时间最短的作业,将它们调入内存运行。

而短进程(SPF)调度算法则是从就绪队列中选出一个估计运行时间最短的进程,将处理机分配给它,使它立即执行并一直执行到完成,或发生某事件而被阻塞放弃处理机再重新调度。

SJ(P)F调度算法能有效地降低作业(进程)的平均等待时间,提高系统吞吐量。

该算法对长作业不利,完全未考虑作业的紧迫程度。

2.流程图

3•代码

#include

#includevstring.h>

#include

structsjf{

charname[10];

floatarrivetime;

floatservicetime;

floatstarttime;

floatfinishtime;

floatzztime;

floatdqzztime;

};

sjfa[100];

voidinput(sjf*p,intN)

{inti;

printf("intputtheprocess'sname&arrivetime&

servicetime:

\nforexmple:

a0100\n");

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

{

printf("inputthe%dthprocess'sinformation:

\n”,i+1);

scanf("%s%f%f",&p[i].name,&p[i].arrivetime,&p[i].servicetime);

}

voidPrint(sjf*p,floatarrivetime,floatservicetime,float

starttime,floatfinishtime,floatzztime,floatdqzztime,intN)

{intk;

printf("runorder:

");

printf("%s",p[O].name);

for(k=1;k

{printf("-->%s",p[k].name);

}

printf("\ntheprocess'sinformation:

\n");

printf("\nname\tarrive\tservice\tstart\tfinish\tzz\tdqzz\n");

for(k=0;k<=N-1;k++)

{printf("%s\t%-.2f\t%-.2f\t%-.2f\t%-.2f\t%-.2f\t%-.2f\t\n",p[k].na

me,p[k].arrivetime,p[k].servicetime,p[k].starttime,p[k].finishtime,

p[k].zztime,p[k].dqzztime);

〃paixu

voidsort(sjf*p,intN)

{

for(inti=0;i<二N-1;i++)

for(intj=0;j<=i;j++)

if(p[i].arrivetime

{

sjftemp;

temp=p[i];

p[i]=p[j];

p[j]=temp;

}

}

〃yunxingjieduan

voiddeal(sjf*p,floatarrivetime,floatservicetime,float

starttime,floatfinishtime,float&zztime,float&dqzztime,intN)

{intk;

for(k=0;k<=N-1;k++)

if(k==O)

{

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;}

}

for(k=0;k<=N-1;k++)

{

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

p[k].dqzztime二p[k].zztime/p[k].servicetime;

voidsjff(sjf*p,intN)

{floatarrivetime=O,servicetime=O,starttime=O,finishtime=O,zztime=O,dqzztime=0;

sort(p,N);

for(intm=0;m

{if(m==0)

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

else

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

for(intn二m+1;n<二N-1;n++)

{if(p[n].arrivetime<=p[m].finishtime)

i++;

}

floatmin=p[m+1].servicetime;

intnext=m+1;//m+1=n

for(intk=m+1;k

if(p[k+1].servicetime

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

next=k+1;}

}

sjftemp;

temp=p[m+1];

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

p[next]二temp;

}

deal(p,arrivetime,servicetime,starttime,finishtime,zztime,dqzztime

N);

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

intmain(){intN;

printf(”短作业优先调度算法\n");

printf("inputtheprocess'snumber:

\n");

seanf("%d",&N);

input(a,N);

sjf*b=a;

sjf*e=a;

sjff(b,N);

system("PAUSE");

4.运行结果

5•心得体会

课程设计结束了,在这次的课程设计中不仅检验了我所学习的知识,也培养了我如何去做一件事情,又如何完成一件事情的能力。

通过模拟进程的调度问题,更加深了我对于操作系统理论的理解,在自己的动手操作过程中,能够体会成功的喜悦和遇到问题自己解决的能力,对于我来说是一次提高,让自己多多的在实践中可以加深对理论的理解,也让我明白了以后应该如何更好,更高效的学习,在以后,我会更加努力。

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

当前位置:首页 > 求职职场 > 简历

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

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