Skip to content

方法Method

FIFO与最短作业调度

FIFO CPU scheduling · FCFS scheduling · Shortest job first · SJF · Shortest processing time

用同一到达表比较FIFO与非抢占SJF,通过相邻交换证明同到达批作业的最短优先最优性,并给出晚到任务的边界。

如果一项9毫秒工作排在1毫秒工作前面,后者可能花大部分时间等待。先到先服务尊重到达次序;最短作业优先则让较短的工作先离开系统。本页既算两种次序的差别,也说明“短的先做最好”到底在哪些条件下成立。

形式陈述 ​

两个政策,同一个非抢占接口 ​

FIFO/FCFS把就绪任务按到达次序放进队列,CPU空闲时取队首。任务开始后,本页一直运行到这段CPU工作完成,不因新任务到达而暂停它。

非抢占SJF在每次CPU可重新选择时,从已经到达的READY任务中取服务需求最短者。选定之后同样运行到完成。若有并列,按到达时刻、再按任务名决定;不能看见一个未来会到达的短任务就把它提前取出来。

SJF需要事先知道每段工作的CPU长度。真实系统可能只能预测下一段CPU burst;预测值排出来的顺序仍能执行,却不再自动具有针对真实时长的最优性。FIFO不需要这项信息。

两者使用CPU服务与就绪状态作为共同接口,并且都是工作保守政策:有任务可运行时不主动空闲。开始、等待、完成和响应时间按共同指标记账。

直觉

同时到达时,短任务确实可以先离开 ​

先把A、B、C、D都安排在0到达,服务需求仍为9、4、2、1。FIFO按任务名打破同时到达的并列,次序为A、B、C、D,完成时刻依次9、13、15、16,平均周转为 53/4=13.25。

SJF选择D、C、B、A,完成时刻依次1、3、7、16,平均周转为 27/4=6.75。最后一项仍在16完成;改进来自更多任务更早完成,而不是CPU做得更快。

一种看法是数“还没完成的任务”:FIFO最初9毫秒一直有4个未完成者;SJF在1毫秒后就只剩3个,在3毫秒后只剩2个。周转总和恰是这条未完成数量曲线下面积,所以更早清掉短任务会减少面积。

例子与边界

交换两个相邻任务,证明为什么该这样排 ​

固定一批同时到达、时长已知、无I/O、无切换成本的任务,目标最小化所有任务完成时间之和。考虑某个次序中相邻的X、Y,它们从时刻 t 开始,长度分别为 x>y。

先X后Y时,两者完成时间之和为

(t+x)+(t+x+y)=2t+2x+y.

交换成先Y后X,和变为

(t+y)+(t+y+x)=2t+2y+x.

新次序减少 x−y>0。更早的任务未变;两项合计仍占 x+y 时间,因此更晚的任务开始时间也未变。只要存在“长的在短的前面”这一相邻逆序,就可以改进;消除全部逆序后得到按长度非降排列的SJF。

因此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排列的周转为 (9,12,13,12),均值11.5。

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的任务,而是另一种允许利用未来到达信息并主动空闲的策略。因此不能把“所有任务同时到达”的交换证明直接当成任意释放时间的非抢占最优性定理。

允许抢占后,最短剩余时间会在Y到达时暂停X,避免这段空闲,且能得到更小的周转。这是改变可行动作集合,不是把SJF的名字换一下。

推论与应用

成本、预测与其他目标 ​

一批 n 个同时到达任务可先排序,比较排序需 O(nlog⁡n) 次比较,再线性派发。动态到达时,可用最小堆维护READY任务,入队和取最小各 O(log⁡n);若任务很少,O(n) 扫描也可能更简单。这里不把CPU实际做的 ∑bi 工作算进调度器的比较次数。

错误预测能直接翻转决策:X真实长度20但预测1,Y真实长度2但预测3,预测SJF会把X放在前面。实验应分别报告预测误差与政策成本,不能只把采用了“最短”标签当成优化证据。

若每项有权重 wi、目标改为 ∑wiCi,交换条件变为 x/wX≤y/wY,不再仅比较长度。若目标是截止期或隔离份额,规则还会再变。本页的结论应随着它的目标函数一起使用。

参考资料
  • 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及晚到短任务;所有数值轨迹为本单元自定。
关系图谱4 个相邻概念 · 2 类关系

拖动节点调整位置。

显示关系

显示:依赖

  1. 前置三跳
  2. 前置二跳
  3. 前置一跳
  4. 当前条目
  5. 后续一跳
  6. 后续二跳
  7. 后续三跳
文字版关系按与当前条目的最短距离分组
类型化关系

使用的工具