Linux内核源码分析 (B.x)Linux物理内存的初始化
文章目录
- Linux内核源码分析 (B.x)Linux物理内存的初始化
- 一、DDR简介
- 二、内存节点
- 三、内存管理区域ZONE
- 四、 struct zone
- 五、 struct page
- 六、mem_map数组
- 七、伙伴系统简介
- 八、迁移类型
- 九、内存初始化
- 十、总结
一、DDR简介

- 详细可见《深入理解计算机系统》(6)存储器层次结构 1.1.4节内存模块
二、内存节点

- 内核使用
pglist_data来描述一个内存节点
三、内存管理区域ZONE

- 为什么要有ZONE?
为了支持NUMA模型,系统的物理内存被划分为几个节点(node),节点又划分成内存管理区域(zone)。Linux内核对不同区域的内存需要采用不同的管理方式和映射方式。 - ARM32架构的zone划分为
ZONE_NORMAL和ZONE_HIGHMEM,x86架构里还有ZONE_DMA

四、 struct zone

- cache line :高速缓存行
五、 struct page

六、mem_map数组

- 简单来说,
mem_map数组存放了struct page数据结构 - 这里讲到了描述物理页面的数据结构
struct page和页帧号pfn之间的转换,具体可以看下面这张图,更多信息可以参考

七、伙伴系统简介

- 伙伴系统的部分参考《深入理解计算机系统》第9章虚拟内存
八、迁移类型

九、内存初始化

- 与x86等体系结构不同,ARM体系结构中只有
Normal Zone和HighMem Zone,注意总计有194560+67584=242144页,为啥不用考虑存放mem_map[]数组的1520页,我猜测那两个数值已经包含在里面了…

十、总结
