“非抢占SJF在同一到达表上平均周转为10。SRTF提前释放了C与D,却把A推迟到16。总服务仍为16,改进发生在完成次序。”
如果一项9毫秒工作排在1毫秒工作前面,后者可能花大部分时间等待。先到先服务尊重到达次序;最短作业优先则让较短的工作先离开系统。本页既算两种次序的差别,也说明“短的先做最好”到底在哪些条件下成立。
形式陈述
两个政策,同一个非抢占接口
FIFO/FCFS把就绪任务按到达次序放进队列理路队列Queue · FIFO queue在队尾加入、从队首取出,并保持尚未离队元素的到达次序的抽象数据类型;循环数组和链表给出不同表示。,CPU空闲时取队首。任务开始后,本页一直运行到这段CPU工作完成,不因新任务到达而暂停它。
非抢占SJF在每次CPU可重新选择时,从已经到达的READY任务中取服务需求最短者。选定之后同样运行到完成。若有并列,按到达时刻、再按任务名决定;不能看见一个未来会到达的短任务就把它提前取出来。
SJF需要事先知道每段工作的CPU长度。真实系统可能只能预测下一段CPU burst;预测值排出来的顺序仍能执行,却不再自动具有针对真实时长的最优性。FIFO不需要这项信息。
两者使用CPU服务与就绪状态理路CPU服务、就绪与时间账本CPU service accounting · CPU burst · Ready time · Preemptive scheduling model用实际服务量、剩余量和就绪等待刻画单核调度,固定同刻事件顺序,并把墙钟时间分成运行、阻塞和等待。作为共同接口,并且都是工作保守政策:有任务可运行时不主动空闲。开始、等待、完成和响应时间按共同指标理路周转、响应与CPU利用率CPU scheduling metrics · Turnaround time · Scheduling response time · CPU utilization从同一执行轨迹分别计算完成、首次派发、就绪等待与整机吞吐,说明平均值、尾部与忙碌口径不能互相替代。记账。
直觉
同时到达时,短任务确实可以先离开
先把A、B、C、D都安排在0到达,服务需求仍为9、4、2、1。FIFO按任务名打破同时到达的并列,次序为A、B、C、D,完成时刻依次9、13、15、16,平均周转为
SJF选择D、C、B、A,完成时刻依次1、3、7、16,平均周转为
一种看法是数“还没完成的任务”:FIFO最初9毫秒一直有4个未完成者;SJF在1毫秒后就只剩3个,在3毫秒后只剩2个。周转总和恰是这条未完成数量曲线下面积,所以更早清掉短任务会减少面积。
例子与边界
交换两个相邻任务,证明为什么该这样排
固定一批同时到达、时长已知、无I/O、无切换成本的任务,目标最小化所有任务完成时间之和。考虑某个次序中相邻的X、Y,它们从时刻
先X后Y时,两者完成时间之和为
交换成先Y后X,和变为
新次序减少
因此SJF在这组条件下最小化总完成时间,也最小化平均周转和平均等待,因为到达时刻与总服务都是固定常数。等长任务交换不改变目标,最优次序不一定唯一。这个论证没有涉及首次派发响应的最大值,也没有给出每个人都更好的保证。
这里无需把“队列”设为定义前置:算法可以线性扫描剩余任务,也可以使用其他表示。队列是实现FIFO的工具;证明SJF最优的是交换不等式,二者承担不同工作。
恢复真实到达时间,再算一次
回到SCHED-16:A在0到达,B在1,C在2,D在4。时刻0只有A,FIFO和SJF都必须让A开始;由于非抢占,两者都要等到9才重新选择。
FIFO此时队列是B、C、D,得到A:0–9、B:9–13、C:13–15、D:15–16。按A、B、C、D排列的周转为
SJF在9看见三个READY任务,选择D,再C,再B:
| 运行区间 | 选择时可运行的候选 | 选择理由 |
|---|---|---|
| 0–9 | A(9) | 只有A |
| 9–10 | B(4)、C(2)、D(1) | D最短 |
| 10–12 | B(4)、C(2) | C最短 |
| 12–16 | B(4) | 只剩B |
这次周转为A:9、B:15、C:10、D:6,平均10。D改善了,B却比FIFO更晚完成;“平均更小”不等于每一项更小。
图中还放了抢占和轮转作为后续比较;先只看前两行,注意两行第一段完全相同。晚到的短任务没有能力穿过非抢占边界。
晚到任务为何破坏刚才的最优性证明
取X在0到达、长度5,Y在1到达、长度1。工作保守的非抢占SJF在0只能启动X,得到X在5完成、Y在6完成,完成时间和11。
若允许离线计划主动等待,CPU可空闲0–1,先做Y到2,再做X到7,完成时间和9。这不是SJF漏选了一个已经READY的任务,而是另一种允许利用未来到达信息并主动空闲的策略。因此不能把“所有任务同时到达”的交换证明直接当成任意释放时间的非抢占最优性定理。
允许抢占后,最短剩余时间理路最短剩余时间与到达时抢占Shortest remaining time first · SRTF · Shortest remaining processing time · SRPT · Shortest time-to-completion first · STCF每次到达或完成时选择剩余CPU服务最少者,逐段复算抢占轨迹,并用交换论证和持续短作业反例界定最优性与饥饿。会在Y到达时暂停X,避免这段空闲,且能得到更小的周转。这是改变可行动作集合,不是把SJF的名字换一下。
推论与应用
成本、预测与其他目标
一批
错误预测能直接翻转决策:X真实长度20但预测1,Y真实长度2但预测3,预测SJF会把X放在前面。实验应分别报告预测误差与政策成本,不能只把采用了“最短”标签当成优化证据。
若每项有权重
参考资料
- Wayne E. Smith,“Various Optimizers for Single-Stage Production”,Naval Research Logistics Quarterly 3(1–2),1956,pp.59–66:单阶段排序与加权完成时间规则。上面的相邻交换是对等权、同时到达特例的完整推导。
- Arpaci-Dusseau与Arpaci-Dusseau,OSTEP, Ch.7, §§7.3–7.5:FIFO、SJF及晚到短任务;所有数值轨迹为本单元自定。