Linux内核源码分析 (B.x)Linux物理内存的初始化

Linux内核源码分析 (B.x)Linux物理内存的初始化

文章目录

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

一、DDR简介

Linux内核源码分析 (B.x)Linux物理内存的初始化_第1张图片

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

二、内存节点

Linux内核源码分析 (B.x)Linux物理内存的初始化_第2张图片

  • 内核使用pglist_data来描述一个内存节点

三、内存管理区域ZONE

Linux内核源码分析 (B.x)Linux物理内存的初始化_第3张图片

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

Linux内核源码分析 (B.x)Linux物理内存的初始化_第4张图片

四、 struct zone

Linux内核源码分析 (B.x)Linux物理内存的初始化_第5张图片

  • cache line :高速缓存行

五、 struct page

Linux内核源码分析 (B.x)Linux物理内存的初始化_第6张图片

六、mem_map数组

Linux内核源码分析 (B.x)Linux物理内存的初始化_第7张图片

  • 简单来说,mem_map数组存放了struct page数据结构
  • 这里讲到了描述物理页面的数据结构struct page和页帧号pfn之间的转换,具体可以看下面这张图,更多信息可以参考
    Linux内核源码分析 (B.x)Linux物理内存的初始化_第8张图片

七、伙伴系统简介

Linux内核源码分析 (B.x)Linux物理内存的初始化_第9张图片

  • 伙伴系统的部分参考《深入理解计算机系统》第9章虚拟内存

八、迁移类型

Linux内核源码分析 (B.x)Linux物理内存的初始化_第10张图片

九、内存初始化

Linux内核源码分析 (B.x)Linux物理内存的初始化_第11张图片

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

Linux内核源码分析 (B.x)Linux物理内存的初始化_第12张图片

十、总结

Linux内核源码分析 (B.x)Linux物理内存的初始化_第13张图片

你可能感兴趣的:(Linux内核源码分析,linux,运维,服务器)