短作业优先算法.docx
- 文档编号:29949810
- 上传时间:2023-08-03
- 格式:DOCX
- 页数:8
- 大小:38.16KB
短作业优先算法.docx
《短作业优先算法.docx》由会员分享,可在线阅读,更多相关《短作业优先算法.docx(8页珍藏版)》请在冰豆网上搜索。
短作业优先算法
1.短作业(进程)优先调度算法SJ(P)F,是指对短作业或短进程优先调度的算法。
它们可以分别用于作业调度和进程调度。
短作业优先(SJF的调度算法是从后备队列中选择一个或若干个估计运行时间最短的作业,将它们调入内存运行。
而短进程(SPF)调度算法则是从就绪队列中选出一个估计运行时间最短的进程,将处理机分配给它,使它立即执行并一直执行到完成,或发生某事件而被阻塞放弃处理机再重新调度。
SJ(P)F调度算法能有效地降低作业(进程)的平均等待时间,
提高系统吞吐量。
该算法对长作业不利,完全未考虑作业的紧迫程度。
2.流程图
3.代码
#include
#include
#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[0].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].name,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==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;} } 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=0,servicetime=0,starttime=0,finishtime=0,zztime=0,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.运行结果 -矩作业优 Jlinputthepruc □ 先调賢亘匡-ess*srimuJjtfr« g ■L.I intputttheprocess1snameharriuetinie &seryicetine- forBxrnmle-a etea inputt: hr*ItJi pi*niceEs1sdinFdi*it»1: iiariT a8100 irniiuL€he2 pi'Liteas1sJkiifuriiMitJiun- inputthe3t)i pi'ocesspsinfOFnation- c102 punairder*a— tliopiLOCO3GC inforna.tion: panearrive servicestartfinlsli 3H kQ.00 1B0.930.B0100.00 L0B.OB 1.03 ”is.bo 2.0B1B9.3B1B2.@0 92.00 46.03 b4-fW 请按任意键维续 9.HR 13.25 ■<3: y学习躍件试二+\Urrtitled7,exe 5.心得体会 课程设计结束了,在这次的课程设计中不仅检验了我所学习的知识,也培养了我如何去做一件事情,又如何完成一件事情的能力。 通过模拟进程的调度问题,更加深了我对于操作系统理论的理解,在自己的动手操作过程中,能够体会成功的喜悦和遇到问题自己解决的能力,对于我来说是一次提高,让自己多多的在实践中可以加深对理论的理解,也让我明白了以后应该如何更好,更高效的学习,在以后,我会更加努力。 如有侵权请联系告知删除,感谢你们的配合!
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 作业 优先 算法