操作系统内存管理详解:分页、分段、页面置换、Swap 与 OOM
内存管理为进程提供独立、连续的虚拟地址视图,并把它映射到有限物理内存。分页把虚拟与物理空间切成固定大小的页,通过页表记录映射和权限;分段更贴近代码、数据、栈等逻辑区域,但可产生外部碎片。
CPU 访问虚拟地址时拆出虚拟页号和页内偏移,先查 TLB 缓存的页表项,未命中再走多级页表。页表项不存在可能触发缺页:匿名页可按需分配,文件页可从文件读取,换出页需从 Swap 调回。若地址不合法或权限不符,则向进程报告错误。
物理页紧张时,系统回收干净文件页或写回脏页,也可能把匿名页换出。页面置换理论上有 FIFO、LRU、Clock 等策略,实际系统会结合访问位、活跃链表和工作集近似。抖动发生在工作集超过可用内存时,系统频繁换页却很少做有效计算。
申请虚拟内存成功不代表物理页已立即准备,也不代表未来不会 OOM。Linux 还会利用剩余内存做页缓存,因而“空闲少”不必然异常。诊断应看可用内存、回收、缺页、Swap 活动和进程驻留集。
误区是把虚拟地址等同物理地址、认为缺页都是故障、把 Swap 当内存扩容的等价替代、看到缓存就清理,以及只按平均内存容量规划。小结:分页提供隔离与按需分配,置换处理压力,指标必须围绕工作集和实际回收成本解释。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Dai Wei!
评论

