SJF短作业优先算法

算法思想: 追求更少的平均时间,最少的平均周转时间,最少的平均平均带权周转时间
算法规则: 最短的作业/进程优先得到服务(所谓“最短”,是指要求服务时间最短)
用于作业/进程调度: 即可用于作业调度,也可用于进程调度。用于进程调度时称为“短进程优先(SPF,Shortest Process First)算法”
是否可抢占?: SJF和SPF都是非抢占式的算法。但是也有抢占式的版本----最短剩余时间优先算法。(SRTN,Shortest Remaining Time Next)
优点: "最短的"平均等待时间、平均周转时间
缺点: 不公平。对短作业有利,对长作业不利。可能产生==饥饿现象。==另外,进程/作业的运行时间都是由用户提供的,并不一定真实,不一定能做到真正的短作业优先。
饥饿: 会导致饥饿

例题
例题:各进程到达就绪队列的时间、需要的运行时间如下所示,使用非抢占式的短作业优先调度算法,计算各进程的等待时间、平均等待时间、周转时间、平均周转时间、带权周转时间、平均带权周转时间

进程

到达时间

运行时间

p1

0

7

p2

2

4

p3

4

1

p1

5

4

短作业/进程优先调度算法:每次调度选择当前已到达运行时间最短的作业/进程。

经过简单的分析之后,可以知道调度顺序为p1–>p3–>p2–>p4

Java短作业优先算法 短作业优先算法例子_平均等待时间


下面我们来用最短剩余时间来考虑:

进程

到达时间

运行时间

p1

0

7

p2

2

4

p3

4

1

p1

5

4

最短剩余时间优先算法:每当有进程加入就绪队列改变时就需要调度,如果新到达的进程剩余时间比当前运行的进程剩余时间更短,则由新进程抢占处理机,当前运行进程重新回到就绪队列。另外,当一个进程完成时也需要调度。

需要注意的是,当有新进程到达时就绪队列就会改变,就要按照上述规则就行检查。以下pn(m)表示当前pn进程剩余时间为m。每个时刻的情况如下
(我们用黄色表示这个时刻剩余时间最短的进程)

  • 0时刻(p1到达):p1(7)
  • 2时刻(p2到达):p1(5) 、 p2(4)
  • 4时刻(p3到达):p1(5)、p2(2)、p3(1)
  • 5时刻(p3完成且p4刚好到达):p1(5)、p2(2)、p4(4)
  • 7时刻(p2完成):p1(5)、=p4(4)
  • 11时刻(p4完成):p1(5)
  • 16时刻(p1完成):结束

周转时间=完成时间-到达时间
带权周转时间=周转时间 / 运行时间
等待时间=周转时间- 运行时间

周转时间

p1=16-0=16

p2=7-2=5

p3=5-4=1

p4=11-5=6

带权周转时间

p1=16/7=2.28

p2=5/4=1.25

p3=1/1=1

p4=6/4=1.5

等待转时间

p1=16-7=9

p2=5-4=1

p3=1-1=0

p4=6-4=2

平均周转时间=(16+5+1+6)/4=7
平均带权周转时间=(2.28+1.25+1+1.5)/4=1.5
平均等待时间=(9+1+0+2)/4=3