前言:

还是习惯性的以前言开篇,“深入骨髓”的程序猿思想,干啥事都想从main 开始~~

{% tip success %%}

本系列分析的源码都遵循如下的约定:

  1. 芯片架构:ARM64
  2. 内存架构:UMA
  3. 内核版本:如无特别说明,本系列源码基于Kernel 5.15
  4. CONFIG_ARM64_VA_BITS=39
  5. CONFIG_ARM64_PAGE_SHIFT=12
  6. CONFIG_PGTABLE_LEVELS=3
  7. CONFIG_ARM64_PA_BITS=48
  8. CONFIG_SPARSEMEM=y
  9. ...

本系列的源码opengrok:iliuqi的linux-5.15

{% endtip %}

内存管理的一些预备知识

物理内存初始化流程

{% tip success %}
这个阶段会详细从源码剖析,这部分主要为转载到的优秀的博文(部分博文内容会根据kernel-5.15的内核的变动做一些修改),辅以补充形式的文章。
{% endtip %}

buddy 分配器

percpu 分配器

CMA 分配器

slab 分配器

vmalloc 分配器

ION 分配器

DMA-BUF分配器

缺页异常处理

memcg

PSI

页面回收

内存规整

内存节点

其他

本系列文章中涉及的专业术语:

专业名词解释
VIVTVirtual Index Virtual Tag,虚拟索引虚拟标签
VIPTVirtual Index Physical Tag,虚拟索引物理标签
PIPTPhysical Index Physical Tag,物理索引物理标签
TLBTranslation Look-aside Buffer,转换旁视缓存,转换旁路缓存
TTWTranslation Table Walk,转换表遍历
TWUTable Walk Unit,页表遍历单元
MMUMemory Management Unit,内存管理单元
EPNEffective Page Number,有效页帧号
RPNReal Page Number,实际页帧号
PFNPage frame Number,页帧号
VPNVirtual Page frame Number,虚拟页帧号
VAVirtual Address,虚拟地址
PAPhysical Address,物理地址
SMPSymmetric Multiple Processing,对称多处理器
UMAUniform Memory Access,统一内存访问
NUMANon-Uniform Memory Access,非统一内存访问
SDRSingle Data Rate,单倍数据速率
DDRDouble Data Rate,双倍数据速率
RAMRandom Access Memory,随机访问存储器,分 SRAM 和 DRAM
SRAMStatic RAM,静态随机访问存储器
DRAMDynamic RAM,动态随机访问存储器
SDRAMSynchronous Random Access Memory,同步动态随机存储器,在DRAM 基础上增加同步控制
LPDDRLow Power Dual Data Rate,低功耗双倍速率存储器,是DDR 类型SDRAM 的一种
CMAContiguous Memory Allocator,连续物理内存分配器
DMADirect Memory Access,直接内存访问
VMAVirtual Memory Area,虚拟内存区域,其实指的是 struct vm_area_struct,内核用该结构体管理用户空间
KFENCEKernel Electric Fence,内核电子栅栏,Linux5.12引入的内核内存错误检测机制