例题11

1、知识点总结
| 调度算法 | 核心思想 | 抢占性 | 对 CPU-bound 作业 | 对 I/O-bound 作业 |
| 时间片轮转 (RR) | 公平轮流,用完时间片就换人 | 抢占式 | 公平 | 较有利 (能保证响应时间) |
| 先来先服务 (FCFS) | 按到达顺序排队,不插队 | 非抢占式 | 非常有利 (一旦占用,可长期使用) | 非常不利 (可能长时间等待) |
| 短作业优先 (SJF) | 谁快谁先上 | 可抢占/可不抢占 | 不利 (长作业可能饥饿) | 非常有利 (CPU区间短,总被选中) |
| 优先权调度 | 按优先级高低 | 可抢占/可不抢占 | 取决于优先级设置 | 通常被赋予较高动态优先级,较有利 |
2、题目解析
这道题考察的是不同的 CPU 调度算法对两类不同作业(进程)的“偏好”程度。
-
CPU 繁忙型 (CPU-bound): 也叫计算密集型。这类作业的大部分时间都在进行大量的计算,很少请求 I/O 操作。它会倾向于用完整个 CPU 时间片。
-
I/O 繁忙型 (I/O-bound): 也叫输入/输出密集型。这类作业大部分时间都在等待 I/O 操作(如读写文件、网络请求)完成,每次只需要很短的 CPU 时间来进行处理。
A. 时间片轮转调度算法
-
工作方式: 将所有就绪进程排成一个队列,按先来后到的顺序,给队首进程分配一个固定的“时间片”。进程用完时间片后,无论是否完成,都会被移到队尾,等待下一轮。
-
分析: 这种算法对两类作业都比较公平。
-
CPU 繁忙型作业会用完整个时间片,然后回到队尾。
-
I/O 繁忙型作业可能只用很短的 CPU 时间就去进行 I/O 操作了,它会提前释放 CPU,然后进入阻塞队列。当 I/O 完成后,它会重新回到就绪队列的末尾。
-
-
结论: 时间片轮转的设计初衷就是为了保证交互式进程(通常是I/O繁忙型)的响应时间,防止它们被长计算任务“饿死”。因此,它相对有利于 I/O 繁忙型作业,而不是不利于。
B. 先来先服务调度算法
-
工作方式: 完全按照进程进入就绪队列的先后顺序进行调度。一旦一个进程获得了 CPU,它会一直运行下去,直到它自愿释放 CPU(因为任务完成或需要进行 I/O)或者被阻塞。这是一种非抢占式的算法。
-
分析:
-
对于 CPU 繁忙型作业: 简直是天堂。一旦它拿到 CPU,它可以长时间地、不间断地运行,直到它那漫长的计算任务结束。
-
对于 I/O 繁忙型作业: 简直是噩梦。如果一个 I/O 繁忙型作业排在一个 CPU 繁忙型作业的后面,它可能需要等待非常长的时间,才能获得那一点点它急需的 CPU 时间。这会导致 I/O 设备长时间空闲,系统整体吞吐量下降。
-
-
结论: FCFS 算法非常有利于 CPU 繁忙型作业,而极其不利于 I/O 繁忙型作业。这与题干描述完全吻合。
C. 短作业(进程)优先算法
-
工作方式: 优先调度估计运行时间最短的进程。可以有抢占式和非抢占式两种。
-
分析: 这种算法的“偏好”对象是短作业,而不是特定类型(CPU繁忙型或I/O繁忙型)。
-
一个 I/O 繁忙型作业,其每次的 CPU 执行时间(CPU burst)通常很短,因此SJF 算法会非常偏爱 I/O 繁忙型作业。
-
一个 CPU 繁忙型作业,其 CPU 执行时间很长,在 SJF 算法下可能会一直得不到调度,产生“饥饿”现象。
-
-
结论: SJF 算法有利于 I/O 繁忙型作业,不利于(长)CPU 繁忙型作业。与题干描述相反。
D. 优先权调度算法
-
-
工作方式: 为每个进程分配一个优先级,每次总是选择就绪队列中优先级最高的进程来运行。
-
分
-

最低0.47元/天 解锁文章
1821

被折叠的 条评论
为什么被折叠?



