认识Linux物理内存管理系统--Buddy System
Agenda 1. Linux 如何管理物理内存 2. 什么是 Buddy System 3. 如何从 Buddy System 中分配内存 4. 如何释放页到 Buddy System 5. 冷热页 6. 关于 fall-back zone lists 1. Linux 如何管理物理内存 为了有效的管理物理内存(分配、回收), Linux 将整个物理内存划分为若干个页,对每一个页,都有相关的数据结构来记录该页的状态和使用信息。在 Linux 中,每个页的大小是 4KB. 对于一个 512MB 的物理内存一共有( 512*1024*1024 ) / ( 4*1024 )个页。对于每一个页,在 Linux 中都有一个 struct page 数据结构来记录该物理页的使用情况。所有页的 struct page 结构组成一个连续的数组存放在物理内存的某个地方。某页在物理内存中的物理地址除以 4KB, 就得到该页是第几个物理页索引,然后索引就可以查询 struct page 数组得到该页的具体信息。 图 1. Memory Page 除了使用 struct page 来记录某个 4KB 物理页的状态和使用信息外, Linux 还将整个物理内存根据物理地址划分为不同的区域( zone )。 zone 的划分是与体系结构相关的,对于 X86 , ZONE 可以划分为 DMA 区 [0 , 16MB] 、 NORMAL ...