进程 P1 正在运行,预计还需 8ms 完成。此时新到达进程 P2 只需 3ms。关于 SJF 与 SRTF 调度,下列说法正确的是()。
通常所说的 SJF 是非抢占式短作业优先,当前进程一旦获得 CPU 会运行到完成或主动阻塞;SRTF 是其抢占式版本,比较当前进程剩余时间与新到达进程预计时间,P2 的 3ms 更短,因此可以抢占 P1。
选项分析
正确。SJF通常非抢占,SRTF按剩余时间重新比较并允许短进程抢占。
错误。非抢占式SJF不会仅因更短进程到达就强制抢占当前进程。
错误。两者的抢占属性正好说反。
错误。只按到达先后是FCFS,不是SJF或SRTF。
本题为什么容易错
只记“短的先”会漏掉决定性条件:比较发生在什么时候。SJF通常在CPU可重新分配时比较,SRTF在新进程到达等调度点也会比较剩余时间。
简短答案
短作业优先 SJF 和最短剩余时间 SRTF 有什么区别,正确答案是 A(非抢占式SJF通常让P1继续;SRTF可抢占P1并先运行P2)。通常所说的 SJF 是非抢占式短作业优先,当前进程一旦获得 CPU 会运行到完成或主动阻塞;SRTF 是其抢占式版本,比较当前进程剩余时间与新到达进程预计时间,P2 的 3ms 更短,因此可以抢占 P1。
易混淆概念对比表
| 概念 | 本题判断 | 区别要点 | 记忆提示 |
|---|---|---|---|
| 非抢占式SJF通常让P1继续;SRTF可抢占P1并先运行P2 | 本题正确答案 | 正确。SJF通常非抢占,SRTF按剩余时间重新比较并允许短进程抢占。 | 看到题干核心场景时优先联想到它 |
| SJF和SRTF都必须立即抢占P1 | 本题干扰项 | 错误。非抢占式SJF不会仅因更短进程到达就强制抢占当前进程。 | 看到该词不要急着选,先判断是否真正解决题干问题 |
| SJF必须抢占,SRTF一定不抢占 | 本题干扰项 | 错误。两者的抢占属性正好说反。 | 看到该词不要急着选,先判断是否真正解决题干问题 |
| 两种算法都只按进程到达先后顺序调度 | 本题干扰项 | 错误。只按到达先后是FCFS,不是SJF或SRTF。 | 看到该词不要急着选,先判断是否真正解决题干问题 |
本题易混淆选项怎么区分
- SJF和SRTF都必须立即抢占P1:错误。非抢占式SJF不会仅因更短进程到达就强制抢占当前进程。
- SJF必须抢占,SRTF一定不抢占:错误。两者的抢占属性正好说反。
- 两种算法都只按进程到达先后顺序调度:错误。只按到达先后是FCFS,不是SJF或SRTF。
知识点详解
SJF在已知或估计运行时间的前提下,选择服务时间最短的就绪作业,理论上有利于降低平均等待时间,但通常不抢占当前运行进程。SRTF每次选择剩余处理时间最短者,新短进程到达时可能抢占。实际系统难以精确知道未来CPU突发长度,常用历史行为估计,并通过老化等机制缓解饥饿。
备考速记
SJF等CPU空下来再选短的,SRTF随时比较谁剩得更短。
SJF 在抢占式调度场景中的作用
SJF在本题中的核心价值,是解决“进程 P1 正在运行,预计还需 8ms 完成。此时新到达进程 P2 只需 3ms。关于 SJF 与 SRTF 调度,下列说法正确的是()”这个场景问题。复习时不要只背选项名称,还要理解它为什么适用于该场景,以及它能解决哪类安全、流程或管理问题。
同类题怎么考
- 给出到达时间与服务时间,画SJF或SRTF甘特图。
- 计算平均等待时间、周转时间和带权周转时间。
- 判断哪种调度算法可能造成长作业饥饿。
SJF 在软件设计师软考中的考法
软考选择题通常不会只考概念定义,还会把SJF放到抢占式调度场景中,要求判断它的作用、适用范围或与相近概念的区别。遇到这类题时,先抓住题干中的业务场景,再看哪个选项最能解决该场景下的核心问题。
解题思路
先看算法名字里的“剩余”。SRTF每当新进程到达都可以重新比较,眼前还有8ms,新来的只要3ms,自然换人。非抢占式SJF只在CPU重新空闲时选最短者,P1已经上场,就先让它继续。
考点定位
SJF 选择预计运行时间最短的就绪作业,通常非抢占;SRTF 持续选择剩余时间最短的进程,是抢占式算法。二者都依赖对运行时间的估计,并可能使长作业饥饿。
易错提醒
- 把SRTF中的remaining忽略,错误比较进程最初总运行时间。
- 认为抢占式调度一定能降低每个进程的等待时间。
- 忘记连续到来的短进程可能让长进程长期得不到CPU。
备考提示
- 画时间轴时,每逢进程到达先判断算法是否允许抢占,再比较剩余时间。
- 把FCFS、SJF、SRTF、RR按选择依据和是否抢占做一张对照表。
你可能还想了解
- SJF为什么通常是非抢占式?
- SRTF在什么情况下发生抢占?
- SJF和SRTF为什么可能导致长作业饥饿?
- SRTF时间轴如何计算平均等待时间?
本文小结
SJF通常是非抢占式算法,当前P1继续运行;SRTF会比较剩余时间,P2只需3ms而P1还需8ms,因此可以抢占P1。两者的关键区别是是否持续比较并允许抢占。