SJF算法是以进入系统的作业所要求的CPU时间为标准,是指对短作业或者短进程优先调度的算法,将每个进程与其估计
运行时间进行关联选取估计计算时间最短的作业
投入运行。
SJF是一种优先调度(priority scheduling),优先的是inverse of 预测的下一个
中央处理器突发时间。
SJF调度算法是被证明了的最佳调度算法,这是因为对于给定的一组进程,SJF算法的平均
周转时间最小。通过将短进程移到长进程之前,短进程等待时间的减少大于长进程等特时间的增加,因此,平均等特时间减少了。
例如,有一组进程p1、p2、p3和p4,在0时刻到达,运行时间依次为6ms8ms.7ms.3ms.采用SF调度就能得到如图1所示的调度结果,因此,平均周转时间为w=(3+9+16+24)/4=13ms.如果使用FCFS调度方案,那么,平均周转时间w=(6+14+21+24)4=16.25ms.
从上面的例子可以看出,SJF算法能有效地降低作业的
平均等待时间,提高系统
吞吐量。但是也存在一些
不容忽视的缺点。
(1)长作业(进程)有可能被饿死。在有短作业(进程)持续不断存在的情况下,由于
调度程序总是优先调度那些(即使是后进来的)短作业(进程),将导致长作业(进程)长期得不到调度而饿死