虚拟地址空间、页表与 MMU

共 26 题
#

1. 虚拟地址到物理地址的转换,多级页表与 MMU 的 TLB 缓存如何配合?

A 多级页表增加内存占用
B TLB 只存储物理地址,不参与转换
C MMU 用多级页表逐级索引,TLB 缓存命中则免去页表遍历 ✓ 正确答案
D 地址转换不需要 MMU
#

2. ARM64 VA 48-bit 与 52-bit 配置在 TCR_EL1.IPS 字段?

A IPS 只配置虚拟地址
B IPS 配置物理地址大小(48/52-bit),T0SZ/T1SZ 配置虚拟地址大小 ✓ 正确答案
C 52-bit 不需要硬件支持
D IPS 与页表层级无关
#

3. Linux 进程虚拟地址空间中 user 与 kernel 区段如何划分?

A 用户态与内核态地址重叠
B x86-64 用户态在低地址、内核态在高地址,通过 canonical 高位区分并隔离 ✓ 正确答案
C 用户进程可以直接访问内核地址
D 内核地址随进程切换而变化
#

4. MMU 将虚拟地址翻译为物理地址的核心动机是什么?

A 只为了加速内存访问
B 让所有进程共享同一物理地址
C 取消进程隔离
D 实现进程隔离、内存保护与虚拟内存抽象(共享/换页/懒分配) ✓ 正确答案
#

5. x86-64 canonical 地址格式中 48-bit 与 57-bit VA 的位模式差异?

A 48-bit 需要 5-level 页表
B 57-bit 支持更少地址空间
C 48-bit 支持 4-level 页表、256TB,57-bit 支持 5-level、128PB,都是 canonical 符号扩展 ✓ 正确答案
D 两者都无需符号扩展
#

6. 为何 PIE 二进制使进程加载地址随机化而提升安全性?

A PIE 二进制无法运行
B PIE 使加载地址固定
C PIE 与 ASLR 无关
D PIE 配合 ASLR 使加载地址随机化,攻击者难以预测代码/数据地址 ✓ 正确答案
#

7. vvar 与 vdso 在 Linux 进程虚拟地址的位置与作用?

A vdso 用于文件 IO
B vdso 需要陷入内核才能执行
C vvar 是可写的
D vdso 是内核映射到用户态的只读代码,加速 gettimeofday 等调用;vvar 是配套只读数据区 ✓ 正确答案
#

8. 为何 ELF 动态链接器 ld-linux.so 需要映射到用户态?

A 链接器运行在内核态
B 内核完成所有动态链接
C 动态链接由用户态链接器完成,需与进程共享地址空间,故映射到用户态 ✓ 正确答案
D 链接器不需要映射到进程空间
#

9. ARM64 4KB granule 下 4-level 页表的 9+9+9+9+12 位宽?

A 48 位 VA 拆为 9+9+9+9+12,前四级各 9 位索引,末 12 位页内偏移 ✓ 正确答案
B 每级页表有 2^12 个 entry
C 页内偏移是 9 位
D 只需 3 级页表
#

10. ARM64 64KB granule(contiguous bit)页表粒度变化?

A 64KB 页使页表层级更少,contiguous bit 把相邻页合并为单个 TLB entry 提升命中率 ✓ 正确答案
B 64KB granule 使页表层级更多
C contiguous bit 增加内部碎片
D 64KB granule 无法使用大页
#

11. page table walk 在 MMU 中的硬件实现 4-level vs 5-level?

A 5-level 支持更少地址空间
B 4-level 支持 48-bit VA,5-level 支持 57-bit VA,5-level 多一次访问 ✓ 正确答案
C 大页会增加 walk 步数
D 两者覆盖相同地址空间
#

12. x86-64 4-level 页表(PML4/PDPT/PD/PT)各级大小与覆盖?

A 每级都覆盖 256TB
B PT 覆盖 2MB,PD 覆盖 1GB,PDPT 覆盖 512GB,PML4 覆盖 256TB ✓ 正确答案
C PML4 覆盖 2MB
D 每级页表有 1024 个 entry
#

13. 为何页表需要 present bit 而非单独 valid bit?

A 换出页会删除页表项
B present 与 valid 完全等价
C present=0 表示页表项无效
D present 表示页是否驻留内存,换出页 present=0 但保留 swap 信息,供缺页换入 ✓ 正确答案
#

14. 页表项(PTE)权限位 R/W/X 与 UXN/PXN 的差异?

A UXN/PXN 控制读写权限
B R/W/X 控制读写执行权限,UXN/PXN 按执行者特权级细分禁止执行,强化内核/用户隔离 ✓ 正确答案
C R/W/X 只用于 ARM
D UXN 与 PXN 完全等价
#

15. 页表 memory type 在 IOMMU 与 CPU MMU 的同步?

A memory type 与缓存无关
B IOMMU 与 CPU MMU 无需同步
C 需保证 IOMMU 与 CPU MMU 对同一内存的 memory type 一致,并在更新时刷新 TLB,保证缓存一致 ✓ 正确答案
D 设备 DMA 不需要页表
#

16. 页表项的结构,标志位、物理页框号与大页(HugePage)如何组织?

A PTE 不含物理地址
B PTE 含 PFN 与标志位(R/W/X、dirty、PS 等),PS bit 使大页提前终止 walk 减少层级 ✓ 正确答案
C 大页总是增加页表层级
D PS bit 与页大小无关
#

17. 进程切换时地址空间的切换,CR3 与 TLB flush 如何执行?

A CR3 与页表无关
B 切换时更新 CR3 指向新页表并 flush TLB,PCID/ASID 可避免全量 flush 降低开销 ✓ 正确答案
C 切换进程无需 flush TLB
D TLB 缓存跨进程共享且无需失效
#

18. RISC-V Sv39 三级页表与 Sv48 四级页表的 VA 宽度差异?

A 两者层级相同
B Sv48 支持更少地址空间
C Sv39 用四级页表
D Sv39 支持 39-bit VA 用三级页表,Sv48 支持 48-bit VA 用四级页表 ✓ 正确答案
#

19. RISC-V Sv39 3-level 页表的 9+9+9+12 split?

A 每级页表有 1024 项
B 页内偏移是 9 位
C 39 位 VA 拆为三级各 9 位索引 + 12 位页内偏移,每级 512 项 ✓ 正确答案
D 只有两级索引
#

20. ASLR 随机化 stack/heap/mmap/binary 在 64-bit 系统的熵?

A 所有区域熵完全相同
B 64-bit 系统 ASLR 熵为 0
C 64-bit 地址空间大,对 stack/heap/mmap/binary 提供较高熵,地址更难预测 ✓ 正确答案
D ASLR 只在 32-bit 有效
#

21. Linux 中 stack guard page 的虚拟地址布局与越界 SIGSEGV?

A guard page 允许无限扩展栈
B guard page 是栈底不可访问的哨兵页,栈越界访问触发 SIGSEGV 并防止栈侵入相邻映射 ✓ 正确答案
C 栈越界不会报错
D guard page 位于栈的中部
#

22. mmap(NULL, ...) 创建匿名映射为何能扩展虚拟地址空间?

A mmap 无法保留虚拟地址
B mmap 立即分配所有物理页
C mmap 只用于文件映射
D mmap 建立虚拟映射并标记区域,物理页按需分配,从而扩展可用虚拟地址 ✓ 正确答案
#

23. PTE 中 dirty bit 与 accessed bit 在 OS 中的角色?

A dirty 表示页未被访问
B accessed 用于 LRU 式回收决策,dirty 决定换出时是否写回 ✓ 正确答案
C accessed 与回收无关
D 脏页换出时无需写回
#

24. huge page 在 PTE 中的 PS 位(page size bit)?

A PS 位与页大小无关
B PS 位表示页可写
C PS 位指示该 PTE 直接指向大页,使 MMU 提前终止 walk 减少层级 ✓ 正确答案
D PS 位总是增加 walk 层级
#

25. page fault 的原因,not present、权限违规、reserved 位如何区分?

A 所有 page fault 都是致命错误
B 原因分 not present(未映射)、权限违规、reserved 位非法,OS 依据错误码分别处理 ✓ 正确答案
C 权限违规会静默继续
D reserved 位是正常现象
#

26. 内存保护与隔离,用户态/内核态与页表权限位如何协同?

A 用户态可以访问内核页
B 通过特权级(用户/内核态)与页表权限位(user、R/W、NX)实现内核/用户与进程间隔离 ✓ 正确答案
C 页表权限位与隔离无关
D 所有进程共享同一页表且无隔离