Skip to content

2022年 408 操作系统 第 29 题

操作系统2022年选择题2分

题目

某进程访问的页 b 不在内存中,导致产生缺页异常,该缺页异常处理过程中不一定包含的操作是( )。

错因

B

觉得页表本来就有 b 这一项、缺页时只是改下状态,不存在"建立映射"的动作。但缺页前 b 在页表里没有有效页框号(存在位是 0),装入物理页框 f 之后必须把 f 写进页表项,否则下次 CPU 访问 b 仍然找不到——这一步必做。

C

把"读入"误以为是用户态 read 系统调用的事,跟缺页处理无关。其实缺页处理本身就是 OS 内核为了把不在内存的 b 弄进来跑的全套流程,从磁盘搬到内存正是缺页处理的核心动作。

D

以为存在位是 MMU 硬件自动维护的。其实存在位的 0/1 完全靠 OS 在调入 / 淘汰页时手动改——MMU 只负责"读它做判断"。装入 b 后若不把存在位置 1,下次访问 b 时 MMU 还是会判它不在内存,又触发一次缺页。

总解析

缺页处理的完整步骤(按发生顺序):

步骤操作是否必做
保存现场,进入缺页处理程序必做
在物理内存中找一个空闲页框 f必做
②'若没有空闲页框,按置换算法淘汰一页(FIFO / LRU / CLOCK 等)可选
把页 b 从外存读入页框 f必做
修改页表项:填入 f、把存在位置 1必做
恢复现场、重启被中断的指令必做

A 选项的"淘汰内存中的页"对应步骤 ②'——只在物理内存已经满、没空闲页框可用时才需要执行。系统刚启动或当前进程页框还没占满的情况下,缺页时直接拿一个空闲页框就够,不必淘汰任何页。所以 A 是"不一定包含"。

B、C、D 都是缺页处理必然包含的步骤:

  • B 建立 b 与 f 的对应——不建则 CPU 找不到 b
  • C 把 b 从外存读入——缺页就是因为 b 不在内存,不读入毫无意义
  • D 修改存在位——不改的话 MMU 下次还会判缺页

最终答案是 A

最后更新:

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