“允许抢占后,最短剩余时间会在Y到达时暂停X,避免这段空闲,且能得到更小的周转。这是改变可行动作集合,不是把SJF的名字换一下。”
一项任务最初很长,不表示它现在还剩很多;一项任务刚刚到达,也不表示它一定该抢占。最短剩余时间优先比较的是此刻尚欠多少CPU服务。这个小改动让调度器能够回应晚到的短任务,也使它承担更强的信息要求。
形式陈述
比的是剩余工作,不是原始长度
固定单核、单位速度、任务到达后无需阻塞、允许任意边界抢占、切换零成本,且每项总服务需求准确已知。时刻
新任务到达或当前任务完成时重新比较。两次事件之间,当前最小的剩余量一直下降,其他任务的剩余量不变,所以没有必要只为这一规则额外切换。若新任务与当前任务相等,本页保留当前任务;CPU空闲时的并列按到达时刻、再按任务名处理。
抢占只改变谁处于RUNNING,不取消已经交付的服务。一个原需9、已经运行8的任务只剩1,它应排在刚到达、需要2的任务之前;按原始9比较会得到不同的政策。
SRTF与SRPT在本页指同一规则,STCF是常见的另一名称。这里的“时间”是已知剩余CPU服务,不是预测墙钟完成时间;资源等待和CPU变速均不在主模型内。
直觉
一次次检查SCHED-16
最初只有A,它从0运行到1,剩8。B在1到达,需要4,小于8,于是B抢占A。B刚运行1毫秒,C在2到达,需要2,小于B的剩3,C再抢占B。
| 边界时刻 | 未完成任务的剩余服务 | 下一段运行 |
|---|---|---|
| 0 | A:9 | A,0–1 |
| 1 | A:8,B:4 | B,1–2 |
| 2 | A:8,B:3,C:2 | C,2–4 |
| 4 | A:8,B:3,D:1;C已完成 | D,4–5 |
| 5 | A:8,B:3 | B,5–8 |
| 8 | A:8 | A,8–16 |
每次只给真正运行者减剩余量。B在2到5虽然等了3毫秒,剩余仍为3,不是0;A从1等到8也仍剩8。
按A、B、C、D排列,完成时刻为
非抢占SJF理路FIFO与最短作业调度FIFO CPU scheduling · FCFS scheduling · Shortest job first · SJF · Shortest processing time用同一到达表比较FIFO与非抢占SJF,通过相邻交换证明同到达批作业的最短优先最优性,并给出晚到任务的边界。在同一到达表上平均周转为10。SRTF提前释放了C与D,却把A推迟到16。总服务仍为16,改进发生在完成次序。
例子与边界
为什么它能最小化这组条件下的平均周转
先在有限个任务、整数到达时刻和整数服务量的模型中给出交换证明;允许每个整数边界抢占,切换免费。目标是最小化
先消去有就绪任务时的空闲:把该任务以后的一单位服务搬到这一个空槽,不推迟其他任务,也不会使它更晚完成。对有限整数任务重复此操作,可以得到一个目标值不增的工作保守调度。
在这个调度中,找到它第一次没有选择SRTF所选任务的时刻
保留其他任务的所有运行槽。把原调度在
因此两者完成时间之和不增加,其他任务完成时刻不变,而且在时刻
这份证明依赖“槽可以在两项间交换”:若X必须先等待I/O、运行需要重新热身,或者Y占着X需要的锁,替换就不再保持可行性。不能把这句话从模型中删掉,只留下一个无条件的“最优”。
有限批次最终完成,不等于永不饥饿
有限批次的总服务有限,工作保守的单位速率调度最终会做完;SCHED-16里的A只是等得较久,不是永远得不到服务。
现在改成无限到达流。长任务L在0到达,需要100;每个整数时刻
这个反例没有违反刚才的有限批次定理:任务集和目标总和的条件已经变了。也不应把无限负载反例夸大成“有限队列里SRTF会永不完成”。讨论公平时必须说清输入是否可以持续增长,以及是否对到达负载施加限制。
切换不免费时,要重新做选择题
设A已经运行,还剩0.6毫秒;B现在到达,需要0.5毫秒。若忽略切换成本,先做B会使两项相对当前的完成时间为0.5和1.1,总和1.6;继续A则为0.6和1.1,总和1.7,前者略好。
但若每次不同任务交接需要0.2毫秒,继续A后切到B,完成时间为0.6与1.3,总和1.9。抢占去B、再切回A,完成时间为0.7与1.5,总和2.2。免费模型的小收益被额外交接吃掉,立刻抢占反而更差。
这不是实际时长预测误差,而是目标成本里漏掉了切换。可以设置抢占收益阈值或采用其他策略,但要重新说明规则与保证。
推论与应用
实现与可复算检查
用最小优先队列理路优先队列Priority queue · Priority queue ADT按键的优先次序反复访问并移除当前最小元素的抽象数据类型。保存等待者,键为剩余服务;当前任务在队列外运行。到达事件先结算它本段的服务,再比较新最小值;若切换,把当前剩余记录重新插入。二叉堆每次插入或取最小可用
检查一条SRTF时间线时,只要在每个到达、完成边界写下全部剩余量,就能找到违反选择规则的第一步。最终还要核对每项服务恰为需求,并用周转与等待理路周转、响应与CPU利用率CPU scheduling metrics · Turnaround time · Scheduling response time · CPU utilization从同一执行轨迹分别计算完成、首次派发、就绪等待与整机吞吐,说明平均值、尾部与忙碌口径不能互相替代。读出结果。只有一张完成时间表,无法单独证明中间真的按SRTF执行过。
参考资料
- Linus Schrage,“A Proof of the Optimality of the Shortest Remaining Processing Time Discipline”,Operations Research 16(3),1968,pp.687–690:SRPT最优性原始证明。
- Arpaci-Dusseau与Arpaci-Dusseau,OSTEP, Ch.7, §§7.5–7.6:STCF名称、抢占接口及响应时间。SCHED-16、整数槽交换论证、无限输入与付费切换数值例子为本单元独立构造。