由系统智能选择Node或Zone方式 |
按节点顺序依次排列先排列本地节点的所有zone,再排列其它节点的所有zone |
按zone类型从高到低依次排列各节点的同相类型zone |
建立备用层次结构的任务委托给build_zonelists, 該函数为每个NUMA结点都创建了相应的数据结构. 它需要指向相关的pg_data_t实例的指针作为参数
在linux中内核也不是对所有物理内存都一视同仁,内核而昰把页分为不同的区, 使用区来对具有相似特性的页进行分组.
Linux必须处理如下两种硬件存在缺陷而引起的内存寻址问题:
一些硬件只能用某些特定的内存地址来执行DMA
一些体系结构其内存的物理寻址范围比虚拟寻址范围大的多这样,就有一些内存不能永久地映射在内核空间上
為了解决这些制约条件,Linux使用了三种区:
ZONE_NOMAL : 这个区包含的都是能正常映射的页
ZONE_HIGHEM : 这个区包"高端内存",其中的页能不永久地映射到内核地址空间
洏为了兼容一些设备的热插拔支持以及内存碎片化的处理, 内核也引入一些逻辑上的内存区.
区的实际使用与体系结构是相关的linux把系统的内存结点划分区, 一个区包含了若干个内存页面, 形成不同的内存池,这样就可以根据用途进行分配了
需要说明的是区的划分没有任何物理意義, 只不过是内核为了管理页而采取的一种逻辑上的分组. 尽管某些分配可能需要从特定的区中获得页, 但这并不是说, 某种用途的内存一定要从對应的区来获取,如果这种可供分配的资源不够用了内核就会占用其他可用去的内存.
下表给出每个区及其在X86上所占的列表
由系统智能选择Node或Zone方式 |
按节点顺序依次排列先排列本地节点的所有zone,再排列其它节点的所有zone |
按zone类型从高到低依次排列各节点的同相类型zone |
建立备用层次结构的任务委托给build_zonelists, 該函数为每个NUMA结点都创建了相应的数据结构. 它需要指向相关的pg_data_t实例的指针作为参数
在linux中内核也不是对所有物理内存都一视同仁,内核而昰把页分为不同的区, 使用区来对具有相似特性的页进行分组.
Linux必须处理如下两种硬件存在缺陷而引起的内存寻址问题:
一些硬件只能用某些特定的内存地址来执行DMA
一些体系结构其内存的物理寻址范围比虚拟寻址范围大的多这样,就有一些内存不能永久地映射在内核空间上
為了解决这些制约条件,Linux使用了三种区:
ZONE_NOMAL : 这个区包含的都是能正常映射的页
ZONE_HIGHEM : 这个区包"高端内存",其中的页能不永久地映射到内核地址空间
洏为了兼容一些设备的热插拔支持以及内存碎片化的处理, 内核也引入一些逻辑上的内存区.
区的实际使用与体系结构是相关的linux把系统的内存结点划分区, 一个区包含了若干个内存页面, 形成不同的内存池,这样就可以根据用途进行分配了
需要说明的是区的划分没有任何物理意義, 只不过是内核为了管理页而采取的一种逻辑上的分组. 尽管某些分配可能需要从特定的区中获得页, 但这并不是说, 某种用途的内存一定要从對应的区来获取,如果这种可供分配的资源不够用了内核就会占用其他可用去的内存.
下表给出每个区及其在X86上所占的列表