短作业优先 (SJF Shortest job First)
算法思想
- 追求最少的平均等待时间,最少的平均周转时间,最少的平均平均带权周转时间
算法规则
1.最短的作业/进程优先得到服务(所谓"最短",是指要求服务时间最短)
用途和模式
- 即用于作业调度,也可以用于进程调度
- 用于进程调度时候,称为"短进程优先(SPF Shortest Process First算法)"
是否可抢占
1.SJF和SPF是非抢占式算法。但是也有抢占式的版本—最短剩余时间优先算法(SRTN Shortest Reamining Time Next)
2.最短剩余时间优先算法:每当有进程假如就绪队列改变时就需要调度,如果新到达的进程剩余时间比当前运行的进程剩余时间更短,则由新进程抢占处理机,当前运行进程重新回到就绪队列。另外,当一个进程完成时也需要调度
例题
1.非抢占式
2.抢占式
3.做题注意点
- 如果题目中未特别说明,所提到的"短作业/进程优先算法"默认是非抢占式的
- 很多书上会说"SJF调度算法的平均等待时间,平均周转时间最少"。这种说法是不全面的
- 应该修改为"在所有进程同时可运行时,采用SJF调度算法的平均等待时间、平均周转时间最少"
- 如果不加上述前提条件,则应该说"抢占式的短作业/进程优先算法(最短剩余时间优先 SRNT)的平均等待时间、平均周转时间最少"
- 虽然严格来说,SJF的平均等待时间、平均周转时间并不一定最少,但相比于其他算法(如FCFS),SJF仍然能够获得较少的平均等待时间、平均周转时间
优缺点
优点
- “最短的” 平均等待时间、平均周转时间
缺点
- 不公平 对短作业有利、对长作业不利。
- 可能产生饥饿现象。
- 另外作业/进程的运行时间的由用户提供的,并不一定真实,不一定能做到真正的短作业优先。
是否会导致饥饿
会,如果源源不断有短作业/进程到来,可能会导致长作业/进程长时间得不到服务,产生"饥饿现象"。如果一直得不到服务,则称为"饿死"