理解 Linux 内存管理能够更好地理解进程的虚拟空间排布(当一个进程需要某块内存时,它会把自己的一个内存地址交由OS处理)。
虽然进程只关心如何使用自己的线性排列的虚拟地址,而不需要关心物理内存的实际容量,以及如何使用真实的物理内存,但内存管理是内核最复杂的同时也是最重要的一部分;它是协作处理器与内核的关键流程,所以本文我们主要介绍Linux内存管理的相关知识点。
典型的进程内存排布如下:
操作系统有保护措施,阻止堆和栈的越界行为发生
内存管理
Linux把物理内存划分三个层次来管理
1、存储节点(node)
2、管理区(zone)
3、页(page)
内存管理涉及的领域: * 内存中物理内存页(内存管理的基本单位)的管理 * 分配大块内存的伙伴系统 * 分配小块内存的slab分配器 * 分配非连续内存块的vmalloc机制 * 进程的地址空间
NUMA计算机
NUMA(非一致性内存访问):多处理器计算机系统的各个CPU都有自己的本地内存;NUMA是稀疏且不连续的内存模型,在给定不同内存单元的访问时间可能不一样,系统的物理内存被划分为几个节点(node),在一个单独的节点内,任一给定CPU访问页面所需的时间都是相同的。
分页管理
分页是为了实现非连续分配,以便解决内存碎片问题;由于程序存在局部化特征,这意味着在