# 2. 页面置换算法 OPT、FIFO、LRU、Clock(二次机会)的原理与命中率对比?请以一个页面引用串演算缺页次数。 A OPT B Clock(二次机会) ✓ 正确答案 C LRU D FIFO
# 3. FIFO 的 Belady 异常是什么?为什么 LRU 类栈式算法不会出现该异常? A LRU 置换最早的页 B LRU 不产生缺页 C LRU 需要预知未来 D LRU 是栈式算法,帧数增加时驻留页集合单调扩大 ✓ 正确答案
# 4. 页大小选择的权衡,为什么 4KB 仍是主流,大页(2MB/1GB)如何提升 TLB 覆盖但增大内部碎片? A 减少内部碎片 B 提升 TLB 覆盖范围,减少页表项 ✓ 正确答案 C 加快缺页时磁盘传输 D 简化内存保护
# 5. 伙伴系统与 slab 分配器,为什么内核需要两套分配器,伙伴系统如何分配/合并页块,slab 如何避免频繁初始化对象? A 减少外部碎片 B 支持大块连续内存 C 通过对象缓存复用,避免频繁初始化和分配开销 ✓ 正确答案 D 提高页表命中率
# 7. 请求分页系统中缺页中断的完整处理流程?缺页率过高(抖动/Thrashing)的成因与对策? A 进程驻留集过小,无法容纳其工作集,导致频繁换页 ✓ 正确答案 B 页表过大 C TLB 失效 D 置换算法错误
# 12. 多级页表的内存开销计算,64 位地址 4 级页表每进程占用多少页表内存,为什么页表项按需分配? A 减少了地址位数 B 只按需分配实际使用地址空间对应的页表页 ✓ 正确答案 C 用 TLB 替代页表 D 取消页表
# 13. 栈的 guard page 机制,为什么栈溢出会触发 SIGSEGV,guard page 的大小与线程栈的关系如何? A 栈空间耗尽 B 编译器检测 C 栈指针溢出 D 访问到栈区末尾的 guard page(不可访问页),触发页错误 ✓ 正确答案
# 15. 内存碎片(内部/外部)与 malloc 的 buddy/slab 分配器如何解决? A 按 2 的幂分配页块,并在释放时合并相邻伙伴 ✓ 正确答案 B 按对象大小复用缓存 C 增大页大小 D 使用紧凑算法
# 16. Copy-on-Write 与 fork,fork 后父子进程如何共享页表,写时复制缺页如何触发,与 exec 如何配合? A 父进程读取页面 B exec 调用 C fork 调用本身 D 任一进程写入一个被标记为只读的共享页 ✓ 正确答案
# 17. 内存回收与脏页回写,内核 LRU 链表如何组织,回收匿名页与文件页的差异,与 OOM 机制的关系如何? A 需要先写回磁盘缓存 B 需要更新页表 C 必须写回交换区(swap),因为它没有磁盘副本 ✓ 正确答案 D 无需任何额外操作
# 18. Swap 与内存压缩,zswap/zram 的原理与适用场景,过度换页(swap thrashing)如何识别与治理? A us(用户态 CPU) B 进程数 C 空闲内存 D si/so(swap 换入/换出)持续非零且很高 ✓ 正确答案
# 19. 大页(HugeTLB/THP)的运维权衡,透明大页(THP)为什么可能引发延迟毛刺,何时该关闭或启用? A 提高 TLB 命中率 B 减少页表 C 增大内部碎片 D 后台合并大页与拆分大页带来额外 CPU 与缺页开销 ✓ 正确答案