Linux内核源码分析 (B.x)Linux内核的页面分配机制

一、伙伴系统

Linux内核源码分析 (B.x)Linux内核的页面分配机制_第1张图片

  • 如果不遵循以上原则,在一个很大的连续空间里,会出现不连续的空洞,造成外部碎片

Linux内核源码分析 (B.x)Linux内核的页面分配机制_第2张图片

  • 一般MAX_ORDER取11,也就是说Linux内核最大分配的最大内存块为2^10个页面,大小为4MB。

二、迁移类型

Linux内核源码分析 (B.x)Linux内核的页面分配机制_第3张图片

  • 使用迁移类型可以实现反碎片化

Linux内核源码分析 (B.x)Linux内核的页面分配机制_第4张图片

三、页面分配和释放函数

Linux内核源码分析 (B.x)Linux内核的页面分配机制_第5张图片
Linux内核源码分析 (B.x)Linux内核的页面分配机制_第6张图片

  • 注意ARM架构里没有ZONE_DMA的概念

Linux内核源码分析 (B.x)Linux内核的页面分配机制_第7张图片
Linux内核源码分析 (B.x)Linux内核的页面分配机制_第8张图片
Linux内核源码分析 (B.x)Linux内核的页面分配机制_第9张图片

  • GFP_KERNELUNMOVEBLE迁移类型中分配内存

四、zone水位

Linux内核源码分析 (B.x)Linux内核的页面分配机制_第10张图片

五、per-cpu页面分配

Linux内核源码分析 (B.x)Linux内核的页面分配机制_第11张图片
Linux内核源码分析 (B.x)Linux内核的页面分配机制_第12张图片

  • per-CPU不仅仅也伙伴系统里面会用到,同样在slab机制里面也会用到,通过对每个CPU建立一个缓冲池,起到未雨绸缪的作用。

六、总结

Linux内核源码分析 (B.x)Linux内核的页面分配机制_第13张图片

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