[linux内存管理] 第000篇 Linux内存管理系列开篇

前言:

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

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

  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

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

1. 内存管理的一些预备知识

2. 物理内存初始化流程

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

3. buddy 分配器

4. percpu 分配器

5. CMA 分配器

6. slab 分配器

7. vmalloc 分配器

8.ION 分配器

9. DMA-BUF分配器

10. 缺页异常处理

11. memcg

12. PSI

13. 页面回收

14. 内存规整

15. 内存节点

16. 其他

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

专业名词 解释
VIVT Virtual Index Virtual Tag,虚拟索引虚拟标签
VIPT Virtual Index Physical Tag,虚拟索引物理标签
PIPT Physical Index Physical Tag,物理索引物理标签
TLB Translation Look-aside Buffer,转换旁视缓存,转换旁路缓存
TTW Translation Table Walk,转换表遍历
TWU Table Walk Unit,页表遍历单元
MMU Memory Management Unit,内存管理单元
EPN Effective Page Number,有效页帧号
RPN Real Page Number,实际页帧号
PFN Page frame Number,页帧号
VPN Virtual Page frame Number,虚拟页帧号
VA Virtual Address,虚拟地址
PA Physical Address,物理地址
SMP Symmetric Multiple Processing,对称多处理器
UMA Uniform Memory Access,统一内存访问
NUMA Non-Uniform Memory Access,非统一内存访问
SDR Single Data Rate,单倍数据速率
DDR Double Data Rate,双倍数据速率
RAM Random Access Memory,随机访问存储器,分 SRAM 和 DRAM
SRAM Static RAM,静态随机访问存储器
DRAM Dynamic RAM,动态随机访问存储器
SDRAM Synchronous Random Access Memory,同步动态随机存储器,在DRAM 基础上增加同步控制
LPDDR Low Power Dual Data Rate,低功耗双倍速率存储器,是DDR 类型SDRAM 的一种
CMA Contiguous Memory Allocator,连续物理内存分配器
DMA Direct Memory Access,直接内存访问
VMA Virtual Memory Area,虚拟内存区域,其实指的是 struct vm_area_struct,内核用该结构体管理用户空间
KFENCE Kernel Electric Fence,内核电子栅栏,Linux5.12引入的内核内存错误检测机制