[linux内存管理] 第037篇 LRU链表详解 1月前 3 条
[linux内存管理] 第037篇 LRU链表详解

聚焦Linux内存管理的核心机制——内存回收,文章详细解析了内核如何通过LRU(最近最少使用)链表,实现对“冷”页面的精准识别和高效回收,保障系统在物理内存受限下的稳定运行。深入讲解了LRU链表的多层架构、页面在不同链表间的切换逻辑,并系统梳理了五类核心链表的数据结构,为理解和后续拓展如MGLRU机制奠定了扎实基础。

[linux内存管理] 第035篇 vmalloc详解 1月前 评论
[linux内存管理] 第035篇 vmalloc详解

内核启动的内存初始化分为Fixmap、线性映射、Buddy分配器和Slab分配器四大阶段,逐步实现高效的物理与虚拟内存管理。vmalloc通过vmap机制,将非连续物理内存映射为连续虚拟地址,极大提升内存分配灵活性。文中详解vmalloc区域管理与关键数据结构,介绍空闲及已分配管理策略,并列举常用分配释放API,并解释代码流程

[linux内存管理] 第034篇 slab内存分配器之kmalloc全面详解 2月前 1 条
[linux内存管理] 第034篇 slab内存分配器之kmalloc全面详解

深入解析Linux内核中kmalloc的内存池体系,详解其在高效分配小至中等连续物理内存块中的核心作用。文章重点说明kmalloc通过预先创建多种尺寸的slab内存池,有效应对频繁的通用及专属内存分配需求,并结合源码分析创建流程、类型划分及对应场景,帮助开发者理解内核内存分配机制的高效性与灵活性。

[linux内存管理] 第031篇 内核启动早期的slab分配器的自举 3月前 5 条
[linux内存管理] 第031篇 内核启动早期的slab分配器的自举

梳理Linux内核启动早期内存管理的四个阶段,文章深入分析了slab分配器自举的“鸡生蛋”难题:分配器本身依赖尚未初始化的自身结构体。详细解读slab分配器如何通过静态变量及多层自举逻辑,巧妙解决这一循环依赖困境,进而实现对象级缓存的高效分配与初始化,为内核后续稳定运行打下坚实基础。

[linux内存管理] 第029篇 谁把folio的函数定义“藏”起来了? 6月前 3 条
[linux内存管理] 第029篇 谁把folio的函数定义“藏”起来了?

这篇文章探讨了在阅读Linux内核代码时,如何解决一些函数定义难以找到的问题。作者遇到了folio_test_active()等函数无法找到定义的困惑,通过搜索发现这些函数是通过特殊的宏定义在page-flags.h文件中创建的。文章详细解释了PAGE_TYPE_OPS()和FOLIO_FLAG()宏的工作原理,以及如何通过这些宏定义函数。最终,作者成功理解了这些函数的定义方式,并总结说这种方法虽然特殊,但探索和理解的过程非常有意思。

[linux内存管理] 第028篇 do_anonymous_page只处理私有映射吗? 7月前 1 条
[linux内存管理] 第028篇 do_anonymous_page只处理私有映射吗?

文章摘要:本文探讨了Linux内核中do_anonymous_page()函数的作用,解释了它为什么只处理私有匿名映射。通过分析do_pte_missing()、vma_is_anonymous()、vma_set_anonymous()等函数,以及mmap_region()函数中的逻辑,文章得出结论:在mmap()流程中,只有私有匿名映射的vm_ops会被设置为NULL,从而被do_anonymous_page()处理。其他类型的映射,如共享匿名映射和文件映射,其vm_ops不为空,因此不会被该函数处理。