概述
LINUX 内存管理 主要有两大类,物理内存管理以及虚拟内存管理
物理内存管理即特定平台架构实际物理内存空间的管理
虚拟内存管理即特定处理器体系架构的虚拟地址空间的管理
下面分别介绍linux 物理内存管理中的基本概念与数据结构
内存架构
目前系统内存架构主要有两种模型
NUMA
即非一致性内存访问模型
使用这种模型的总是多处理器系统,系统物理内存被分为不同的bank, 系统中的各个处理器都有本地内存bank,或者适合于dma 访问的bank ,处理器之间通过总线连接以支持对其他处理器内存的访问,处理器访问本地内存的速度要快于对其他处理器内存的访问。
UMA
即一致性内存访问模型
该模型的内存空间也许不连续,但所有的内存空间对系统的处理器而言具有相同的访问特性和访问速度。
UMA 模型下可以看成只有一个内存bank的系统
bank
代表具有相同的访问特性和访问速度的一个内存块。在 numa 模型中,内存分配策略从当前运行cpu的本地bank中获取内存,因为同一进程趋向于使用同一cpu,因此将在当前节点上分配内存
图1 系统内存架构
LINUX 物理内存管理的基本概念
node(节点)
节点的引入是因为linux 系统为了将UMA 和NUMA统一起来,一个bank 对应于一个node
zone (区域)
每个node 节点又分为不同的内存区域zone , zone用于满足系统中不同模块对内存分配的不同要求,例如32位X86架构的DMA只能访问16mB以下的物理内存空间
x86中, the zones are the following:
ZONE DMA First 16MiB of memory
ZONE NORMAL 16MiB - 896MiB
ZONE HIGHMEM 896 MiB - End,
page(页)
物理内存是由固定长度的page组成,page 是物理内存管理中的最小单位,也称为page frame ,LINUX 会为物理内存中的每个页创建一个struct page 对象,并用全局变量struct page* mem_map 来存放所有page对象指针。页的大小取决于MMU,常用为4kB
综合以上,可以得到一个内存bank的物理内存管理的结构如下
图2–物理内存示意