[linux内存管理] 第027篇 Linux ARM64 虚拟地址布局 5小时前查看 评论
[linux内存管理] 第027篇 Linux ARM64 虚拟地址布局

本文详细讨论了ARM64架构下Linux内核的虚拟地址布局,采用kernel版本5.15,配置了虚拟地址宽度为39位、物理地址宽度为48位等参数。文章首先介绍了虚拟地址和物理地址的概念,随后计算了用户空间和内核空间的大小及范围。接着,根据代码中的定义,详细计算了线性映射区、模块区、内核镜像区、vmalloc区、固定映射区、PCI I/O区和VMEMMAP区等各个区域的起始地址、结束地址和大小。最后,文章指出由于2019年的一个commit,线性映射区域被下移到了内核虚拟地址的低地址处。

[linux内存管理] 第026篇 从内核源码看 slab 内存池的创建初始化流程 15小时前查看 评论
[linux内存管理] 第026篇 从内核源码看 slab 内存池的创建初始化流程

本文介绍了Linux内核中slab内存池的创建过程。slab内存池是一种高效的内存管理机制,用于分配和回收固定大小的内存块。文章详细解释了slab cache的创建流程,包括kmem_cache_create接口函数的参数、slab cache的架构设计、内核如何安排slab对象在内存中的布局等。此外,文章还介绍了slab allocator体系的初始化过程,以及内核如何解决创建第一个slab cache时遇到的“先有鸡还是先有蛋”的问题。最后,文章总结了slab cache的创建过程和slab allocator体系的初始化过程,为读者提供了深入理解Linux内核内存管理的参考。