Appearance
题目
在支持虚拟存储器系统下的指令执行过程中,正确的是( )。
错因
A
把"地址转换"和"页表管理"搞混了。OS 确实负责建立和维护页表(装入进程时填表、缺页时换页),但指令执行过程中每条访存指令的虚→实地址翻译是由 MMU 硬件(含 TLB)完成的。如果每次访存都要陷入 OS 软件翻译一遍,性能会慢几个数量级——这正是 MMU 存在的意义。选 A 的人混淆了"谁建表"和"谁查表"。
B
把"编译"阶段误当成"装入"阶段。编译器只生成相对地址(虚地址或符号地址),它不知道程序最终会被装入到哪个物理页框。页表项中真正的物理页框号、有效位、保护位、修改位等内容,是 OS 在装入进程或缺页处理时动态填写的。如果由编译器决定,多个进程同时跑就会互相覆盖物理内存。
C
熟悉"中断由硬件触发"的人容易跳一步:硬件触发 ⇒ 硬件处理。但实际是分工:MMU 在地址转换时发现页表项无效(present=0),硬件产生缺页异常(这一步是硬件做的),随后控制权转给 OS 的缺页中断处理程序——查找空闲页框、可能触发置换、读盘装入、修改页表,全是 OS 软件完成的复杂动作。硬件不可能"直接处理"缺页,因为缺页处理涉及磁盘 I/O 和内存分配,这都是 OS 的事。
总解析
判定思路:抓住"虚存系统中谁做哪一步"的标准分工:
| 阶段 | 谁做 | 做什么 |
|---|---|---|
| 程序编译 | 编译器(用户态工具) | 生成相对/虚地址;不触碰页表项 |
| 程序装入 | OS(内核态) | 分配物理页框、建立页表、填写页表项 |
| 指令执行时的地址转换 | 硬件 MMU + TLB | 虚地址 → 物理地址 |
| 缺页 / 越权 / 非法指令 | 硬件检测 → OS 处理 | 硬件产生异常信号;OS 异常处理程序响应 |
逐项核对:
- A 错:地址转换由 MMU 硬件完成,不是 OS。
- B 错:页表项由 OS 填写,不是编译器。
- C 错:缺页只是硬件触发异常,真正"处理"——找空闲页框、触发置换、读盘、改页表——是 OS 软件做的。
- D 对:所有异常(缺页、越权、非法指令、除零等)都遵循"硬件检测 → 触发异常 → OS 处理"的模式。
一句话归纳:简单/高频的操作交硬件做(MMU 翻译地址),复杂/罕见的处理交 OS 做(异常、缺页、I/O)——这是"软硬件协同"的设计哲学。
最终答案是 D。