说明:以kernel-2.6.24为对象
1 硬件知识
关键词:RAM 内存条 CPU寄存器 MMU
RAM:Random-access memory
MMU:Memory Manage Unit(地址转换)
CPU寄存器:稍后再表。
2 逻辑地址/虚拟地址/线性地址/物理地址
关键词:段寄存器 内存条
MMU的作用:逻辑地址转换为强调内容物理地址
各地址的区别 :
逻辑地址:selector:offset
虚拟地址:offset
线性地址:逻辑地址的selector通过段式存储转换为基址,offset不变(linux-kernel中基址为0,故,线性地址=虚拟地址)
物理地址:线性地址通过分页机制转换为物理地址
3 逻辑地址到线性地址的转换
关键词:MMU 分段 段寄存器 GDT LDT
4 线性地址到物理地址的转换
关键词:MMU 分页 PGD PUD PMD PTE
5 逻辑地址到物理地址的映射
关键词:内核空间 用户空间 高端内存
6 内碎片和外碎片
关键词:碎片 内存
{Internal fragmentationExternal fragmentation
内碎片:由于内核 本身的原因,如最小页4K,若进程需要3K,则分其一页4K,但有1K的碎片。
外碎片:由于 外部因素的原因,如进程的页框被回收,产生碎片,如下图,
![](https://upload.wikimedia.org/wikipedia/commons/thumb/4/4a/External_Fragmentation.svg/450px-External_Fragmentation.svg.png)
7 buddy算法
关键词:buddy 外碎片
Buddy memory allocation用于解决外碎片问题
具体wikipedia解释非常清楚
8 slab分配器
关键词:slab 内碎片
![]()
slab 分配器用于解决内碎片问题
9 kernel内存管理
关键词:动态内存 连续内存 非连续内存
动态内存:RAM的某些部分被永久地分配给了内核,并用来存放内核代码以及静态内核数据结构,剩下的部分被称为动态内存.
内核给自己分配动态内存:
内核⎧⎩⎨⎪⎪连续内存{页框管理 buddy-大块内存内存区管理 slab-小块内存非连续内存{vmalloc vfree
参考:维基百科 知乎 百度 《Linux 内核源代码情景分析》《深入理解LINUX内核》