理解内存节点与内存分区

来源:互联网 发布:淘宝怎么买东西最便宜 编辑:程序博客网 时间:2024/06/07 17:41
UMA和NUMA:
UMA(Uniform Memory Access),即一致性内存访问。这种情况下,CPU访问内存的任何位置,代价都是一样的。
NUMA)(Non Uniform Memory Access),即非一致性内存访问。这种情况下,CPU访问不同位置的内存,代价是不一样的。在多CPU情况下,对每个CPU来说有本地内存和远端内存,访问本地内存的代价比访问远端内存的代价小。确保CPU访问内存代价最小,是非常重要的一点。

Linux支持多种硬件体系结构,因此Linux必须采用通用的方法来描述内存,以方便对内存进行管理。为此,Linux有了内存节点、内存区、页框的概念,这些概念也是一目了然的。
内存节点:主要依据CPU访问代价的不同而划分。多CPU下环境下,本地内存和远端内存就是不同的节点。即使在单CPU环境下,访问所有内存的代价都是一样的,Linux内核依然存在内存节点的概念,只不过只有一个内存节点而已。内核以struct  pg_data_t来描述内存分区。
内存分区:Linux对内存节点再进行划分,分为不同的分区。内核以struct zone来描述内存分区。通常一个节点分为DMA、Normal和High Memory内存区,具体下面再介绍。
页框:Linux采用页式内存管理,页是物理内存管理的基本单位,每个内存分区又由大量的页框组成。内核以struct page来描述页框。页框有很多属性,这些属性描述了这个页框的状态、用途等,例如是否被分配。


上图中的zone_mem_map是一个页框的数组,它记录了一个内存分区的所有页框的使用情况。

DMA内存区:即直接内存访问分区,通常为物理内存的起始16M。主要是供一些外设使用,外设和内存直接访问数据访问,而无需系统CPU的参与。
Normal内存区:从16M到896M内存区。
HighMemory内存区:896M以后的内存区。
0 0
原创粉丝点击