分配器与回收机制

共 20 题
#

1. Buddy 分配器(页分配器)的 order 与伙伴合并

A order 越大块越小
B order 表示 2^order 页的连续块,释放时若相邻伙伴空闲则合并成更大块 ✓ 正确答案
C 伙伴合并会破坏数据
D Buddy 只管理一页
#

2. per-CPU pageset(pcp list),页分配快速路径为何按 CPU 缓存部分空闲页,与 buddy 的批量填充/清空如何协同?

A pcp 按 CPU 缓存空闲页减少锁竞争,通过批量填充/清空与 buddy 协同 ✓ 正确答案
B pcp 增加了全局锁竞争
C pcp 直接从 buddy 逐页分配
D pcp 与 CPU 无关
#

3. overcommit_memory 的三种模式如何影响大块 malloc 与 OOM,Committed_AS 统计承诺内存的作用?

A Committed_AS 是物理内存总量
B 模式 0 从不拒绝任何分配
C 模式 2 禁止过量,malloc 受 CommitLimit 限制可能失败;模式 1 允许过量,实际触达时 OOM ✓ 正确答案
D 三种模式对 malloc 无影响
#

4. CMA(Contiguous Memory Allocator)与大块连续内存申请

A CMA 无法提供连续内存
B CMA 区域平时完全闲置
C CMA 预留内存池,平时作可移动页使用,需要连续内存时迁移页聚合出连续块 ✓ 正确答案
D CMA 只用于软件内存
#

5. KMSAN(Kernel Memory Sanitizer)的未初始化内存检测

A KMSAN 检测越界访问
B KMSAN 通过影子内存追踪字节初始化状态,检测内核未初始化读取 ✓ 正确答案
C KMSAN 检测内存泄漏
D KMSAN 不要求编译器插桩
#

6. SLUB 的 per-CPU cache 与 partial list 工程取舍

A SLUB 用 per-CPU freelist 免锁快分配,partial list 在慢路径补充整页 ✓ 正确答案
B SLUB 每次分配都加全局锁
C SLUB 没有 partial list
D SLUB 比 SLAB 更复杂
#

7. Slab 分配器与 SLOB、SLAB、SLUB 三代演化

A SLOB 面向极小内存嵌入式,SLAB 引入着色与缓存优化,SLUB 用 per-CPU freelist 简化提高性能 ✓ 正确答案
B SLUB 比 SLAB 更复杂
C SLOB 性能最好
D SLAB 是当前默认
#

8. kmalloc 与 vmalloc 的语义差异(连续物理内存 vs 虚拟连续)

A vmalloc 保证物理连续
B kmalloc 适合任意大小分配
C kmalloc 分配物理连续内存适合小对象/DMA,vmalloc 分配虚拟连续但物理可离散适合大块 ✓ 正确答案
D 两者完全相同
#

9. 页分配器的水位(watermark),min、low、high 的含义

A 空闲高于 min 就触发回收
B 空闲低于 low 触发 kswapd 后台回收,低于 min 触发直接回收,三者满足 min<low<high ✓ 正确答案
C 三个水位值相等
D high 是最低水位
#

10. SLAB 与 SLUB 的命中率差异

A SLUB 没有 per-CPU 缓存
B SLAB 的命中率总是优于 SLUB
C SLUB 用 per-CPU freelist 提升对象局部性,多数场景命中率与性能优于 SLAB ✓ 正确答案
D 两者命中率完全相同
#

11. arm64 的页大小(4K、16K、64K)的工程取舍

A 64K 页内存利用最灵活
B 64K 页 TLB 覆盖大、减少 miss,但碎片与页表开销大;4K 灵活兼容但 TLB 覆盖小 ✓ 正确答案
C 4K 页 TLB 覆盖最大
D 页大小对性能无影响
#

12. kernel memory leak 调试(kmemleak)

A kmemleak 无需扫描
B kmemleak 检测用户态泄漏
C kmemleak 跟踪分配点并扫描是否有引用指针,报告未引用的已分配内存为泄漏 ✓ 正确答案
D kmemleak 只能检测越界
#

13. memcg 的 memory.kmem.limit 与 kernel 内存控制

A v1 提供独立 memory.kmem.limit,v2 将内核内存统一计入 memory.max ✓ 正确答案
B v2 单独限制 kmem
C kmem 只限制用户内存
D 内核内存无法被 cgroup 限制
#

14. zone 的分层(DMA、NORMAL、HIGHMEM)与分配策略

A HIGHMEM 在 64 位系统普遍存在
B 所有内存都在一个 zone
C ZONE_DMA 供需要低地址的 DMA 设备,ZONE_NORMAL 是可直接映射的常规内存,分配按 zone 回退顺序降级 ✓ 正确答案
D zone 与物理地址无关
#

15. KASAN(Kernel Address Sanitizer)的越界与 UAF 检测

A KASAN 无运行开销
B KASAN 检测未初始化读取
C KASAN 检测内存泄漏
D KASAN 用影子内存与编译插桩检测内存越界与 use-after-free ✓ 正确答案
#

16. kernel 的 page allocation failure 与 OOM 处理

A allocation failure 会杀进程
B allocation failure 是分配请求无法满足时返回失败,OOM 是必须满足时杀进程释放内存 ✓ 正确答案
C OOM 返回 NULL 给调用者
D 两者完全相同
#

17. GFP_ATOMIC 与原子上下文,为何中断/持自旋锁时只能用不睡眠的分配标志,与 GFP_KERNEL 的语义差异如何?

A GFP_KERNEL 不可睡眠
B GFP_ATOMIC 可触发回收
C GFP_ATOMIC 不睡眠用于原子上下文,GFP_KERNEL 可睡眠用于进程上下文 ✓ 正确答案
D 两者语义相同
#

18. mempolicy 的 NUMA 内存分配

A mempolicy 只影响 CPU 选择
B mempolicy 通过 set_mempolicy/numactl 控制分配节点,MPOL_BIND 强制绑定、MPOL_INTERLEAVE 交错分配 ✓ 正确答案
C MPOL_BIND 可在任意节点分配
D mempolicy 与 NUMA 无关
#

19. 内存碎片(fragmentation)与 compaction 策略

A 外部碎片通过 compaction 迁移可移动页聚合连续块,配合 MIGRATE_* 分类减少碎片 ✓ 正确答案
B compaction 会增加外部碎片
C 内部碎片影响大块连续分配
D compaction 无性能代价
#

20. 内核 mempool,内存紧张时如何保证原子上下文仍能分配到对象,与普通 kmalloc 的区别如何?

A mempool 预分配对象池,内存紧张时仍能保证原子上下文分配对象,而 kmalloc 可能失败 ✓ 正确答案
B mempool 与 kmalloc 完全相同
C mempool 在内存紧张时一定失败
D mempool 不预留对象