设为首页 加入收藏

TOP

《深入Linux内核架构》笔记:(N)UMA模型中的内存组织
2014-11-24 12:13:48 来源: 作者: 【 】 浏览:1
Tags:《深入 Linux 内核 架构 笔记 UMA 模型 内存 组织

1.概述


在Linux中,内核对一致和非一致内存访问系统使用相同的数据结构,因此针对各种不同形式的内存布局,各个算法几乎没有什么差别。在UMA系统上,只使用一个NUMA结点来管理整个系统内存。


首先内在划分为结点。每个结点关联到系统中的一个处理器,在内核中表示为pg_data_t的结构。


各个结点又划分为内存域,是内存的进一步细分。例如,对可用于(ISA设备的)DMA操作的内存区是有限制的。只有前16M适用,还有一个高端内存区域无法直接映射。在二者之间是通用的“普通”内存区。因此一个结点最多有3个内存域组成,如下图


内核引入了下列常量来枚举系统中的所有内存域:



◆ ZONE_DMA标记适合DMA的内存域。该区域的长度依赖于处理器类型。


◆ ZONE_DMA32标记了使用32位地址字可寻址、适合DMA的内存域。显然只有在64位系统上两种DMA内存域才有差别。


◆ ZONE_NORMAL标记了可直接映射到内核段的普通内存域。这是在所有体系结构上保证都会存在的唯一内存域,但无法保证该地址范围对应了实际的物理内存。


◆ ZONE_HIGHMEM标记了走出内核段的物理内存。


此外内核定义了一个伪内存域ZONE_MOVABLE,在防止物理内存碎片的机制中需要使用该内存域。


MAX_NR_ZONES充当结束标记,在内核想要迭代系统中的所有内存域时,会用到该常量。


各个内在域都关联了一个数组,用来组织属于该内存域的物理内存页(内核中称为页帧)。对每个页帧,都分配了一个struct page的结构以及所需的管理数据。


出于性能考虑,在为进程分配内存时,内核总是试图在当前运行的CPU相关系的NUMA结点上进行。但这并不总是可行的,例如,该结点的内存可能已经用尽。对此类情况,每个结点都提供了一个备用列表。该列表包含了其他结点,可用于代替当前结点分配内存。列表项的位置越靠后,就越不适合分配。


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Linux网络内核数据帧的接收过程:.. 下一篇C#多线程通信之委托(事件)

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Redis 分布式锁全解 (2025-12-25 17:19:51)
·SpringBoot 整合 Red (2025-12-25 17:19:48)
·MongoDB 索引 - 菜鸟 (2025-12-25 17:19:45)
·What Is Linux (2025-12-25 16:57:17)
·Linux小白必备:超全 (2025-12-25 16:57:14)