Appearance
题目
某系统正在执行三个进程P1、P2和P3,各进程的计算 (CPU) 时间和 I/O 时间比例如下表所示。
| 进程 | 计算时间 | I/O 时间 |
|---|---|---|
| P1 | 90% | 10% |
| P2 | 50% | 50% |
| P3 | 15% | 85% |
为提高系统资源利用率,合理的进程优先级设置应为( )。
错因
A
正好排反——把 CPU 占比高的 P1 排第一,意图"让最忙的先跑"。但资源利用率最大化的原则正相反:CPU 密集型进程拿到 CPU 后会一直占着不放,I/O 设备闲着;I/O 密集型进程拿到 CPU 一会就发 I/O 阻塞、CPU 让出来,能让别的进程也跑。所以 I/O 密集型应该优先调度。
C
让 CPU 50% 的 P2 最高,把 P1 和 P3 平等。但 P3 才是最该优先的(85% I/O)——它跑一会就阻塞,CPU 立刻空出给 P1 P2 接力,三种资源都能并行。把 P2 排第一是没看出 P3 的"快进快出"特点对资源利用率的贡献最大。
D
让 CPU 90% 的 P1 最高,又把 P2 P3 平等——把"资源占用高"误以为是"优先级高",方向反了。把 P3 跟 P2 等同也不对:P3(85% I/O)远比 P2(50% I/O)更"利于切换",理应更优先。
总解析
资源利用率最大化原则:让 CPU 和 I/O 设备尽可能并行地工作。
| 进程类型 | 行为 | 调度优先级该高还是低? |
|---|---|---|
| I/O 密集型(I/O 占比高) | 拿到 CPU 用一会就发 I/O 阻塞,主动让出 CPU | 优先级应高——它让位快,让 CPU 流转起来 |
| CPU 密集型(计算占比高) | 拿到 CPU 长期占用,I/O 设备一直闲着 | 优先级应低——避免它霸占 CPU 让 I/O 设备闲死 |
为什么 I/O 密集型优先能提升利用率:
假设没有抢占、I/O 密集型先跑:
P3(CPU 一会 → I/O 一会 → CPU 一会 → ...)
↓ I/O 期间 P2 拿 CPU
P2(CPU 一会 → I/O 一会 → ...)
↓ I/O 期间 P1 拿 CPU
P1 长时间占 CPU
↑ P3 / P2 的 I/O 完成时正好打断 P1,让它们继续
结果:CPU 几乎一直被某进程占用 + I/O 设备多通道并发 → 双高利用率如果反过来 P1 先跑、长期占 CPU,I/O 设备一直闲着,等 P1 自己发起 I/O 才让出 CPU——大部分时间 I/O 闲、CPU 也闲(因为 P1 同步在等 I/O),整体利用率低。
按 I/O 占比排优先级:P3 (85%) > P2 (50%) > P1 (10%) → P3 > P2 > P1
速记:I/O 越多越优先——让爱睡觉的(I/O 密集,跑一会就睡)先上,醒着的(CPU 密集)排后面。爱睡的睡了 CPU 才能腾出来给醒着的接力,不浪费时间。
最终答案是 B。