欢迎光临散文网 会员登陆 & 注册

物理内存组织结构与模型

2022-08-02 21:30 作者:补给站Linux内核  | 我要投稿

内存管理在内核中占据着举足轻重的地位,毕竟它是用来处理处理器和内存之间的协作的,而后两者都是计算机中最为重要的资源。内存管理的目标就是高效合理的使用物理内存,不造成浪费。

1. 体系结构


在计算机发展初期,如上图,CPU通过总线访问整个地址空间,这是一种简单经济的方式,可以尽可能使用内存。但是这个系统本身也存在伸缩性的问题,因为总线的宽度是有限的,这也限制了处理器的数量。如果添加CPU,会引起以下两个问题

CPU增加,每个节点的可用带宽会减少 CPU增加,总线长度会增加,进而增加了延迟 于是有了下面的系统,如下图,其中北桥芯片离CPU最近,在CPU与显卡(PCIE/AGP)、内存(DRAM)等建立通信接口,处理高速信号。南桥则负责一些I/O设备,通常速度相对前者不高。比如PCI、磁盘(IDE/SATA)、USB等。


目前管理物理内存的方法主要有以下两种

1.1 一致内存访问(Uniform Memory Access,UMA)

也称为对称多处理器(SMP) 内存以连续的方式组织起来,每个CPU访问各个内存区都一样快。CPU通过系统总线(前端总线)连到北桥(其中包含内存控制器),与内存之间的通信必然经过北桥。IO控制器也连到北桥,IO必须通过北桥才能到达CPU。可以增加多个总线或者内存通道增加带宽。不过总的来将,UMA的这种伸缩性是有限的。

【文章福利】小编推荐自己的Linux内核技术交流群:【891587639】整理了一些个人觉得比较好的学习书籍、视频资料共享在群文件里面,有需要的可以自行添加哦!!!(含视频教程、电子书、实战项目及代码)     


1.2 非一致内存访问(Non-Unit Memory Access,NUMA)

每个CPU是平等的(系统启动初始化除外),都有本地内存,离着最近访问速度最快。各个CPU之间通过总线连接,支持对其他CPU的访问。如下图,CPU不再共享北桥,而是独有一个内存控制器。


  1. 内存模型 从处理器的角度看物理内存分布,内存管理子系统支持下面三种内存模型

平坦内存(Flat Memory):内存的物理地址空间连续,不存在空洞。如果物理地址空间不连续,那要额外的分配页来处理这些空洞,显然这种情况下是低效的。 不连续内存(Discontiguous Memory):如果物理地址空间存在空洞,相对平坦内存能高效处理 稀疏内存(Space Memory):物理地址空间存在空洞,并且支持热拔插。

  1. 三级结构 在NUMA,CPU被划分为多个节点(node), 每个CPU对应一个本地物理内存, 即一个CPU-node对应一个内存node。 内存管理系统通过节点(node),内存域(zone)、页帧(page)三级结构描述物理内存。首先,内存划分为节点,每个节点关联一个CPU。各个节点又划分为内存域,各个内存域都关联了一个数组,用来组织属于该内存域的物理页。UMA被当作只有一个NUMA的系统。

3.1 内存节点

各个内存节点保存在一个单链表中,供内核遍历。

3.2 内存域

3.2.1 内存区域类型

ZONE_DMA,直接内存访问,某些设备不能直接访问内存的,则需要DMA区域。 ZONE_DMA32,64位系统,纪要支持直接访问16MB以下的内存设备,又要支持直接访问4GB以下内存的32位设备,需要使用此区域 ZONE_NORMAL,普通区域,直接映射到内核虚拟地址空间的内存区域,也称线性映射区域 ZONE_HIGHMEM, 高端内存区域,32位系统的产物,内核地址空间只有1GB,于是就分出了低端内存区域+高端内存区域,高端内存区域通过动态映射用来扩展内存。 ZONE_MOVABLE,可移动区域,用来避免内存碎片 ZONE_DEVICE,设备区域,为了支持持久内存热拔插而增加的内存区域

3.2.2 数据结构

3.3 页帧(物理页)

页帧是系统内存中的最小单位,每个页都会对应有一个struct page的实例。一般位4KB。对应内核结构是struct page,里面有很多联合体,这样写的原因是为了节省内存。



物理内存组织结构与模型的评论 (共 条)

分享到微博请遵守国家法律