Linux 内存管理全解析
Linux 内存管理的精巧与强大,建立在以下五大核心机制之上:
1. 虚拟内存与页表
为每个进程伪造一个独占、连续的地址空间,通过页表将虚拟地址动态翻译为物理地址。这是隔离进程、实现按需分配和安全控制的基础。
2. 物理内存分配器(伙伴系统 + Slub)
· 伙伴系统:以 2 的幂次方页块为粒度,负责分配连续物理页(批发商)。
· Slub 分配器:在页之上切割固定大小的对象槽,利用 CPU 高速缓存快速满足内核自身频繁的小内存请求(零售商)。
3. 用户态内存懒分配
malloc 只申请虚拟地址(小内存扩堆,大内存用内存映射),并不立即占用物理内存。只有当进程真正写入数据触发缺页异常时,内核才当场分配物理页。这极大节省了内存,也是 OOM 误判的根源。
4. 页缓存与内存回收
· 页缓存:所有空闲内存都会被积极用作磁盘缓存,提升 I/O 性能。它是 buff/cache 的真相,必要时可瞬间回收。
· 回收三部曲:由 kswapd 后台回收干净页和脏页,或将不活跃匿名页换出到 Swap;紧急时触发直接回收,最终求助 OOM Killer 杀进程保系统。
5. 大页机制
通过 2MB 甚至 1GB 的巨大页面,大幅减少页表项和 TLB 缺失,提升性能。透明大页(THP) 试图自动化此过程,却可能带来 CPU 抖动,需要根据场景权衡启用。
这五大核心串联起了从地址翻译、物理分配,到缓存加速、回收逃生,再到性能优化的完整逻辑,是系统调优和故障定位的基石。