Skip to content

2019年 408 计算机组成原理 第 14 题

计算机组成原理2019年选择题2分

题目

下列关于缺页处理的叙述中,错误的是( )。

错因

A

误以为缺页是 MMU 的"硬件错误"或"中断"。但缺页严格属于异常——是 CPU 在执行某条具体指令的地址转换过程中检测到的(同步事件,与具体指令绑定),不像外部中断(异步、与具体指令无关)。

B

误以为缺页处理由 MMU 等硬件自动完成。但 OS 才负责缺页处理——硬件 MMU 只能检测出缺页(产生异常),后续"找哪页缺、从哪个磁盘块读、放到哪个物理页框、更新页表"全是 OS 的缺页处理程序在做。

C

误以为缺页可以从 Cache 或主存其他位置读。但主存里就是没有这一页才叫缺页——必须到外存(硬盘上的页面文件 / swap 区)读入。如果在主存其他位置能找到,那就不算缺页。

总解析

核心区分(同步异常 vs 异步中断)

维度异常(Exception)中断(Interrupt)
触发源当前指令执行过程中的内部错误外部硬件信号(与指令无关)
与指令关系同步 —— 与具体指令强绑定异步 —— 与执行进度无关
例子缺页、除零、非法指令、自陷时钟、键盘、网卡
处理后回到该指令本身(重新执行)或下一条下一条指令

逐项判断

选项叙述判断
A缺页是地址转换时 CPU 检测到的一种异常✓ 对(同步异常)
B缺页处理由 OS 的缺页处理程序完成✓ 对
C缺页处理程序从外存读入所缺失的页✓ 对
D缺页处理完成后回到发生缺页指令的下一条指令执行✗ 错

D 为什么错——必须重新执行缺页指令

缺页发生时,触发缺页的那条指令本身还没完成访存 —— 它需要的数据/指令字根本就没拿到。

时机状态
缺页指令尝试访存MMU 检测到页表项无效 → 触发缺页异常
缺页处理程序运行把缺失页从外存装入主存,更新页表
处理完返回时必须重新执行该缺页指令——因为它的访存还没完成

如果直接跳到下一条指令,那缺页指令的语义就完全没实现(数据没读到、运算没做、目的寄存器没写)——错误结论。

所以对比

  • 缺页:处理后回到缺页指令本身,重新执行(指令重启)
  • 自陷(Trap):处理后回到陷阱指令的下一条(陷阱指令本身已完成)
  • 算术溢出 / 除零:处理方式由 OS 决定,通常报错终止程序

最终答案是 D(错误的叙述)。

示意流程

... PC = X 处的指令 LOAD R1, [虚地址 V]

        ├─ MMU 查页表:V 所在页不在主存 → 产生缺页异常
        ├─ 跳转到 OS 缺页处理程序
        │   ├─ 选一个物理页框(可能要置换出某页)
        │   ├─ 从外存读入 V 所在的页到该页框
        │   └─ 更新页表项(标记为有效,记录物理页框号)
        ├─ 异常返回 → PC 仍 = X,重新执行 LOAD R1, [V]

        ├─ MMU 查页表:V 所在页已在主存 → 翻译成物理地址 P
        └─ 完成 LOAD R1, [P],PC 推进到 X+4

易错点速查

  1. 缺页 = 异常(不是中断)—— 同步、与具体指令绑定
  2. 缺页处理后必须重启缺页指令,不是跳到下一条
  3. 缺页页要从外存读,不是 Cache、不是主存其他位置

最后更新:

⚠️ 这道题暂未配可视化,欢迎在 CodeBrick 反馈区告诉我们你想看哪道题