linux内核学习--内存管理theory篇

说明:以kernel-2.6.24为对象

1 硬件知识

关键词:RAM 内存条 CPU寄存器 MMU
RAM:Random-access memory
linux内核学习--内存管理theory篇
MMU:Memory Manage Unit(地址转换)
linux内核学习--内存管理theory篇
CPU寄存器:稍后再表。

2 逻辑地址/虚拟地址/线性地址/物理地址

关键词:段寄存器 内存条
MMU的作用:逻辑地址转换为强调内容物理地址
linux内核学习--内存管理theory篇
各地址的区别

逻辑地址:selector:offset
虚拟地址:offset
线性地址:逻辑地址的selector通过段式存储转换为基址,offset不变(linux-kernel中基址为0,故,线性地址=虚拟地址)
物理地址:线性地址通过分页机制转换为物理地址

3 逻辑地址到线性地址的转换

关键词:MMU 分段 段寄存器 GDT LDT
linux内核学习--内存管理theory篇

4 线性地址到物理地址的转换

关键词:MMU 分页 PGD PUD PMD PTE
linux内核学习--内存管理theory篇

5 逻辑地址到物理地址的映射

关键词:内核空间 用户空间 高端内存
linux内核学习--内存管理theory篇

6 内碎片和外碎片

关键词:碎片 内存

{Internal fragmentationExternal fragmentation

内碎片:由于内核本身的原因,如最小页4K,若进程需要3K,则分其一页4K,但有1K的碎片。
外碎片:由于外部因素的原因,如进程的页框被回收,产生碎片,如下图,
linux内核学习--内存管理theory篇

7 buddy算法

关键词:buddy 外碎片
Buddy memory allocation用于解决外碎片问题

具体wikipedia解释非常清楚

8 slab分配器

关键词:slab 内碎片
linux内核学习--内存管理theory篇
slab 分配器用于解决内碎片问题

9 kernel内存管理

关键词:动态内存 连续内存 非连续内存
动态内存:RAM的某些部分被永久地分配给了内核,并用来存放内核代码以及静态内核数据结构,剩下的部分被称为动态内存.
内核给自己分配动态内存:

{ buddy- slab-{vmalloc vfree 


参考:维基百科 知乎 百度 《Linux 内核源代码情景分析》《深入理解LINUX内核》