Linux中内存管理子系统开发必知的3个结构概念

linux中内存管理子系统使用节点(node)、区域(zone)和页(page)三级结构描述物理内存。
1、内存节点
内存节点分两种情况:uma和numa。
从管理内存的方法上区分,计算机可以分为两种类型:uma和numa。
uma:一致性内存访问,uniform memory access
numa:非一致性内存访问,non-uniform memory access
两种类型示意图:
对uma来说,每一个cpu 访问的都是同一块内存,因此各cpu对内存的访问不存在性能差异。
对numa来说,各内存和各cpu通过总线连在一起,每个cpu都有一个本地内存,访问速度快,cpu也可以访问其他cpu的本地内存,但速度稍慢。
linux为了统一这两种平台,在内存组织中,将最高层次定义为内存节点。
可以看到,图中uma只有一个内存节点,而numa有两个内存节点。
实际上,uma其实是numa的一个特例,所以内核可以将内存都看做numa类型的。
2、区域
每个内存节点都划分为多个区,linux内核中定义了以下几个区:
include/linux/mmzone.h
enum zone_type{#ifdef config_zone_dma zone_dma,#endif#ifdefi config_zone_dma32 zone_dma32,#endif zone_normal,#ifdef config_highmem zone_highmem,#endif zone_movable,#ifdef config_zone_device zone_device,#endif __max_nr_zones};  
zone_dma
dma是“direct memory access”的缩写,直接内存访问。
该区域用于isa设备的dma操作,范围是0-16mb。
如果有些设备不能直接访问所有内存,则需要使用dma区域。例如旧的工业标准体系结构(industry standard architecture, isa)总线只能直接访问16mb以下的内存。
只适用于intel x86架构,arm架构没有这个内存管理区。
zone_dma32
在64位的系统上使用32位地址寻址的适合dma操作的内存区。
例如在amd64系统上,该区域为低4gb的空间。在32位系统上,本区域通常是空的。
zone_normal
常规内存区,指的是可以直接映射到内核空间的内存。
也常称为“普通区域”“直接映射区域”“线性映射区域”。
所谓线性映射就是物理地址和映射后的虚拟地址存在一种简单的关系,即虚拟地址=物理地址+固定偏移。
在32位系统上,内核空间和用户空间按1:3划分,那么这个固定偏移就是:0xc0000000 - 物理内存起始地址。
既然存在一种线性关系,那还需要使用页表对物理地址和虚拟地址做映射吗?
不同处理器架构实现不一样,arm需要使用页表映射,mips则不需要。
zone_highmem
高端内存区,32位时代的产物。在32位系统上,指的是高于896m的物理内存。
32位系统中,内核和用户地址空间按1:3划分,内核地址空间只有1gb,所以不能把1gb以上的内存直接映射到内核地址空间,因此就把不能直接映射的内存划分到了高端内存区。
要将高于896mb的物理内存映射在内核空间的话,需要通过单独的映射来完成,并且这类映射不能保证物理地址和虚拟地址之间存在固定的对应关系(例如zone_normal的固定偏移)。
zone_dma、zone_dma32、zone_normal通常都统称为低端内存区。
64位系统中没有这个区域,即没有高端内存。因为64系统的内核虚拟地址空间非常大,不再需要高端内存区域。
zone_movable
一个伪内存区,用来防止内存碎片。
zone_device
为支持持久内存(persistent memory)热拔插增加的内存区域。
3、页
站在处理器的角度来看,管理物理内存的最小单位是页面。
现在的处理器都采用分页机制来管理内存,在处理器内部有一个mmu硬件,它会处理虚拟内存到物理内存的映射,也就是做页表的翻译工作。
linux内核中使用一个page数据结构来描述一个物理页面。
页的大小通常是4kb,但有个的架构的处理器可以支持大于4kb的页,例如8kb、16kb或者64kb的页。
目前linux内核默认使用4kb的页面。
所以,linux内核的用三级结构来管理物理内存,简言之就是内存首先划分成若干个大的节点,每个节点又包含若干个区,每个区有包含若干页。linux内核按页管理内存,最基本的内存分配和释放都是按页进行的。


报警器延时控制电路介绍
FAA:预计2023年全球商用无人机市场规模将增加两倍
中国的智能制造应该从现在最热的领域入手
奥迪将推搭载L3级自动驾驶功能的A8
化工CAD制图基础篇,管道布置图学起来
Linux中内存管理子系统开发必知的3个结构概念
5G+SD-WAN解决方案,企业“智”胜关键
华为将继续多元化供应链 探讨未来前景
物联网如何解决供应链管理控制和可视性问题
上海发布基础设施重大项目建设及投资机会清单
一次成功!新思科技助力Banias Labs网络SoC流片,加快高性能计算设计
台积电5nm节点投资250亿美元,而3nm工艺也确定了投资计划了
南京大学区块链人工智能金融科技课题组诚招助理研究员(博士后)
夏普新技术首次亮相CES2024,推动未来智能生活与产业革命
随着5G来临 天线也面临诸多技术挑战
信息社会的各类生活场景正逐渐被智慧安防所覆盖
负氧离子监测系统多少钱?
与市场上众多千元机产品有何区别?努比亚 V18 上手评测
工业机器人将会拓展到更多的应用领域中
北鲲云超算平台在生命科学领域的作用