# 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 所有进程共享同一页表且无隔离