SJF短作业进程优先调度算法

更新时间:2023-07-15 19:39:05 阅读: 评论:0

SJF短作业进程优先调度算法
短作业(进程)优先调度算法
1. 短作业(进程)优先(Shortest Job First,SJF或Shortest Process Next,SPN)是指对短作业或短进程优先调度的算法。该算
法可分别⽤于作业调度和进程调度。该算法的设计⽬标是改进FCFS算法,减少作业或进程的平均周转时间。
2. SJF算法要求作业在开始执⾏之前预计作业的执⾏时间,对预计执⾏时间短的作业优先调⼊内存。
3. SJF算法和FCFS算法进⾏⽐较,SJF有以下优点:
1)改善了平均周转时间和平均带权周转时间,缩短了等待时间;
2)有利于提⾼系统的吞吐量。
同样具有以下⼏个缺点:
1)对长作业或进程不利;
江水悠悠
2)该算法没有考虑作业或进程的紧迫程度,因⽽不能保证紧迫的作业或进程得到及时处理或相应;
3)由于作业或进程的执⾏时间是⽤户估计的,因⽽准确性不⾼,从⽽影响调度性能;
4)如果系统中持续有更短作业或最短进程出现,可能导致长作业或进程被饿死,即永远得不到执⾏。
SJF算法的具体实现
1. SJF的代码(个⼈的思想不同所以写出来的代码也不⼀样,仅供参考学习):
void SJF()
{
cout<<"SJF调度算法:"<<endl;
梦见掉牙是怎么回事int i,j,min_time,index;
int  last_finishedPCB_index;//记录上⼀次已经运⾏的进程的数组下标
护理液// 运⾏第⼀个到达的进程得到它的完成时间、周转时间等,并设置为已访问
pcb[0].finish_time=pcb[0].arrive_time+pcb[0].run_time;
乡气pcb[0].zhouzhuan_time=pcb[0].finish_time-pcb[0].arrive_time;
pcb[0].daiquan_time=(float)pcb[0].zhouzhuan_time/pcb[0].run_time;
pcb[0].finished=true;
last_finishedPCB_index=0;
//下⾯在剩下的进程中循环找出运⾏时间最⼩的进程,
//计算它的完成时间、周转时间等,并设置为已访问。春色的诗句
//先找出没有访问过的运⾏时间最⼩的进程的下标
for(i=0;i<N;i++)
{
index=-1;
min_time=100;
for(j=0;j<N;j++)
{
if(min_time>pcb[j].run_time&&pcb[j].finished==fal&&pcb[j].arrive_time<=pcb[last_finishedPCB_index].finish_time)
{
min_time=pcb[j].run_time;
宠物兔好养吗index=j;
}
}
if(pcb[index].arrive_time<=pcb[last_finishedPCB_index].finish_time)
{
pcb[index].finish_time=pcb[last_finishedPCB_index].finish_time+pcb[index].run_time;
pcb[index].zhouzhuan_time=pcb[index].finish_time-pcb[index].arrive_time;
pcb[index].daiquan_time=(float)pcb[index].zhouzhuan_time/pcb[index].run_time;
}
if(pcb[index].arrive_time>pcb[last_finishedPCB_index].finish_time)
{
pcb[index].finish_time=pcb[index].arrive_time+pcb[index].run_time;
pcb[index].zhouzhuan_time=pcb[index].run_time;
pcb[index].daiquan_time=(float)pcb[index].zhouzhuan_time/pcb[index].run_time;
}
pcb[index].finished =true;
last_finishedPCB_index=index;
}
for(i=0;i<N;i++)
{
sumzhouzhuantime+=pcb[i].zhouzhuan_time;
sumdaiquanzhouzhuantime+=pcb[i].daiquan_time;
}
}
先计算第⼀个进程的各项时间,将时间全部求解出来。在结构体⾥设置⼀个标志,初始化将进程的标志全部设为fal,访问过的进程设为ture,在下⼀次选择运⾏时间最短的进程时不访问它。在选择最短进程时,优先访问运⾏时间最⼩的进程,并⽐较到达时间与上⼀个进程完成时间,如果⼩于,则完成时间等于运⾏时间加上⼀个进程的完成时间;如果下⼀个进程的到达时间⼤于上⼀个进程的完成时间,则此进程的完成时间为到达时间加运⾏时间。
1. 考虑到某进程的运⾏时间最短,但它还没有到达的情况,设计⼀个循环限制条件为程序的到达时间⼩于上⼀个进程的完成时间,在剩
下的进程⾥⾯找到运⾏时间最短的进程,将此进程设置为index。这时计算时间有两种情况:
1)下⼀个进程的到达时间⼩于上⼀个进程的完成时间,则各时间正常计算。
2)下⼀个进程的到达时间⼤于上⼀个进程的完成时间,则完成时间等于到达时间加运⾏时间,周转时间等于运⾏时间。
以下是我的输出结果:
县城开个什么店有前景
在SJF中的排序算
法,if(min_time>pcb[j].run_time&&pcb[j].finished==fal&&pcb[j].arrive_time<=pcb[last_finishedPCB_index].finish_time),这样其实并没有将最后⼀个进程考虑进去,导致最后⼀个进程的时间可能会输出为0。
总结:以上便是我对此算法的粗略理解,仅供参考。以后会不断改进以及编辑出更优秀的博客出来
>小孩多动

本文发布于:2023-07-15 19:39:05,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/1082741.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:时间   进程   作业   算法   完成   到达   调度
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图