Appearance
题目
若 64 位的系统采用三级虚拟分页存储管理方式,其结构如下表所示,第三级页表所占用的页框数是( )。
| 补充位(25) | 一级页表(9) | 二级页表(9) | 三级页表(9) | 页内偏移(12) |错因
A
把题问的"所有第三级页表占用的页框数"误读成"一个第三级页表占用的页框数"。一个三级页表 = 512 项 × 8 B/项 = 4 KB = 1 页框,没错;但三级页表不止一个——每个二级页表项都指向一个独立的三级页表,全部加起来才是题目要的"占用页框总数"。漏了"乘以三级页表个数"这一步。
B
只乘了一级索引,漏乘二级索引。算法上:三级页表的个数应当等于"一级页表条目数 × 一个一级条目下二级页表的条目数" = 。选 B 的人只算到 ,再不知怎么折半得 256,相当于只考虑了一级或二级一层的条目数。多级页表是"逐级展开"的乘法关系,必须把一级和二级的条目数都乘上。
D
把"页内偏移"也卷进了乘法。,再除以某个数得 256M,或者直接把"三级页表项总数 "误算成"占用页框数"。但页内偏移 12 位是给"页内寻址"用的,不对应"三级页表条目数"。三级页表条目本身只看 9 位索引(512 项),不参与上层的乘法。
总解析
判断思路:分两步——① 一个三级页表占多少页框;② 总共有多少个三级页表。
步骤 1:一个三级页表的大小
| 项 | 值 |
|---|---|
| 三级页表项数 | |
| 每项大小(64 位系统典型 PTE) | 8 字节 |
| 一个三级页表大小 | |
| 页大小(由页内偏移 12 位决定) | |
| 一个三级页表占用页框数 | 个页框 |
题目给的 9-9-9-12 切分配 64 位 PTE,让"一个页表正好等于一个页框"——这是多级页表的标准设计,让每级页表自己也能像普通页一样换入换出。
步骤 2:三级页表的总个数
逐级展开:
| 级 | 项数 | 每级"分支因子" |
|---|---|---|
| 一级页表 | 每个一级条目指向 1 个二级页表 | |
| 全部二级页表的总条目 | 每个二级条目指向 1 个三级页表 | |
| 三级页表总数 | — |
步骤 3:合并
为什么不是 256M:虚地址 64 位中只有 39 位()被有效使用——上面 25 位是"补充位",不参与任何索引,所以总寻址空间是 而非 。从这 字节里,按 4KB 页划分能得到 = 128M 个页框(这是数据页),但承载这些数据页所需的三级页表个数是 = 256K,差了一个数量级,因为每个三级页表覆盖了 的虚拟地址空间。
最终答案是 C(256K)。