linux5.15之内存管理初始化(x86)
主初始化函数在main.c中,主要研究以下几个部分:
1.node的初始化
2.zone的空间分配
3.node的zonelist的初始化
blog
终于是理解了node,zone,pfn以及page。
setup_arch(&command_line)
涉及到cpu与node之间关系的建立以及,node与内存之间映射关系的建立
在建立关系之前需要有一个分配器来完成内存的分配,因此需要bootstrap,需要先初始化一个笨重的分配器,来进行最初的内存分配,直到高级的分配器完全建立。
涉及部分数据结构如下:
//分别是获得io,和分配节点的部分代码 |
build_all_zonelists
此函数第一部分来设置zonelists列表,node在初始化的过程中通过node_zones字段来引用内存但是还不能被使用,需要通过初始化zonelist之后才能使用,初始化zonelist分为热插拔和初始化两种情况。
其中涉及到的主要的操作如下:
//用来定位zone |
此函数第二部分来设置vm_total_pages,Get the number of free pages beyond high watermark in all zones.
进而考虑是否需要禁止mobile来减少内存碎片(如果内存较少就没有必要开启此功能。)
mm_init
内容好多,先研究slab初始化吧
kmem_cache_init(void)
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
Comment