Skip to content

2021年 408 操作系统 第 29 题

操作系统2021年选择题2分

题目

在采用二级页表的分页系统中,CPU 页表基址寄存器中的内容是( )。

错因

A

把"地址"想成虚拟地址了。但页表基址寄存器是 MMU 用来启动地址翻译的入口——如果寄存器里存的是虚拟地址,那 MMU 拿到这个虚拟地址还得先把它翻译成物理地址才能去访问页表,但页表本身就是地址翻译用的,这就循环依赖了。所以入口必须是物理地址,否则永远启动不起来。

C

跑到了二级页表,多半把"二级页表"想成了"二层页表的总称(也包括一级)"。其实"二级页表"是分级中的下一层,里面才是页号 → 页框号的映射。一级页表(外层目录)的每一项指向某一个二级页表的物理起址——所以"二级页表"在这种系统里有很多张(每张对应一段虚拟地址范围),CPU 寄存器只能存"根",存不下全部二级页表的起址。

D

跟 C 是同类错误(盯住"二级页表"),但额外多想了"物理地址"。问题还是:二级页表不是单一的一张表,而是按需分配的多张子表——CPU 寄存器只能存一个值,存不下所有二级页表的起址。寄存器存的是上层的入口(一级页表起址),由它指向各张二级页表。

总解析

二级页表的访问链:

虚拟地址:[一级页号 P1 | 二级页号 P2 | 页内偏移]
              ↓                ↓
   ① CR3/页表基址寄存器(一级页表的物理起址)

   ② P1 索引一级页表 → 拿到对应二级页表的物理起址

   ③ P2 索引该二级页表 → 拿到目标页框号

   ④ 页框号 + 偏移 → 物理地址

两个关键点:

为什么必须是物理地址? MMU 在做翻译,它访问页表本身不能再走一遍翻译——否则就需要"用页表翻译页表的地址",无限递归。所以页表入口(基址寄存器)必须是 CPU 直接能用的物理地址。

为什么是一级而不是二级? 二级页表在多级分页里是按需分配、有很多张的(每张对应一段虚拟地址范围),不是单一的一张。CPU 寄存器只有一个槽,能存的只有最顶层那张唯一的"根表",也就是一级页表。要找具体某张二级页表,得先查一级页表才能知道。

把两个点交叉对一下选项:

选项哪一级虚 / 物评价
A一级虚拟一级对,但虚拟不对(循环依赖)
B一级物理
C二级虚拟两边都不对
D二级物理物理对,但二级不对(不唯一)

最终答案是 B

最后更新:

🎬 可视化演示
加载中...

提示:可在可视化区直接操作播放、步进、修改参数