Appearance
题目
假设 4 个作业到达系统的时刻和运行时间如下表所示。
| 作业 | 达到时刻 t | 运行时间 |
|---|---|---|
| J1 | 0 | 3 |
| J2 | 1 | 3 |
| J3 | 1 | 2 |
| J4 | 3 | 1 |
系统在 t=2 时开始作业调度。若分别采用先来先服务和短作业优先调度算法,则选中的作业分别是( )。
错因
A
把 FCFS 选成 J2——可能漏看 J1(t=0 来),以为 J2(t=1 来)是最早的。但 t=2 开始调度时,J1 J2 J3 都已到达且在就绪队列里,最早的是 J1,FCFS 必选 J1。把 J2 当成最早是没仔细看 t=2 时刻就绪队列的全员到达情况。
B
FCFS 选 J1 对了,但 SJF 选 J4 错——J4 在 t=2 时还没到达(J4 到达时刻 t=3)。SJF 只在已到达的作业里选,t=2 时只有 J1 J2 J3 三个候选,不能选未来的 J4。把 J4 列入候选是没考虑"调度只能在当前可见的作业里挑"这一基本约束。
C
两个都错:FCFS 选 J2(漏 J1)+ SJF 选 J4(提前预知未来)。两条错误叠加。
总解析
关键点:作业调度只能从当前已经到达的就绪作业里选。t = 2 时已到达的作业:
| 作业 | 到达时刻 | 已到达?(t=2 时) | 运行时间 |
|---|---|---|---|
| J1 | 0 | ✓ | 3 |
| J2 | 1 | ✓ | 3 |
| J3 | 1 | ✓ | 2 |
| J4 | 3 | ✗ 未到 | 1 |
t = 2 时就绪队列:J1, J2, J3(J4 还没到,不参与本次调度)。
FCFS(先来先服务):选最早到达的。
| 作业 | 到达时刻 |
|---|---|
| J1 | 0(最早) |
| J2 | 1 |
| J3 | 1 |
→ FCFS 选 J1。
SJF(短作业优先):选运行时间最短的。
| 作业 | 运行时间 |
|---|---|
| J1 | 3 |
| J2 | 3 |
| J3 | 2(最短) |
→ SJF 选 J3。
反向验证:选 J4 错在哪里?J4 到达时刻是 t = 3,t = 2 调度时它还没出现在就绪队列——调度算法不能"看未来",只能从已知队列里挑。
最终答案是 D。