[linux内存管理] 第022篇 buddy内存管理之慢速分配 2025-02-19 评论
[linux内存管理] 第022篇 buddy内存管理之慢速分配

延续对内核内存分配机制的深入解析,本文聚焦于`__alloc_pages`函数中的慢速分配流程。当快速分配失败后,系统会启用慢速路径,通过多种方式尝试获得所需页,包括直接回收、内存规整、唤醒kswapd线程与触发OOM机制。详细剖析了关键参数如`can_direct_reclaim`(是否允许回收)、`costly_order`(大块分配压力)、`__GFP_ATOMIC`滥用检查,以及规整与回收触发条件。代码层面揭示内存分配失败时的处理逻辑,强调高效而严谨的回退与重试机制,保证系统最大程度完成分配需求,并在极端情况下输出详细警告。

[linux内存管理] 第019篇 buddy分配器基础知识以及分配器api接口 2025-01-07 评论
[linux内存管理] 第019篇 buddy分配器基础知识以及分配器api接口

本文主要介绍了Linux内存管理中的伙伴系统,它是Linux内核中基本的内存分配系统,涉及页面分配、页面回收、页面规整等机制。文章详细剖析了快速分配之前的一些基础知识,包括分配掩码、分配标志、分配的API接口以及Linux对于伙伴系统的设计思路。伙伴系统将空闲页面分成11个块链表,每个块链表管理着2的幂次方个连续页面,内存管理框图展示了其组织结构。同时,文章还解释了内存块是如何连接的,以及伙伴系统的合并机制。

[linux内存管理] 第018篇 buddy系统的简介以及初始化 2025-01-06 评论
[linux内存管理] 第018篇 buddy系统的简介以及初始化

本文深入剖析了Linux内存管理中伙伴系统的初始化流程。伙伴系统是Linux内核用于管理和分配物理内存页面的核心算法,它将内存分成大小为2的幂次方的内存块,并通过“伙伴”机制进行分配和回收。文章详细介绍了伙伴系统的数据结构,包括`struct free_area`和`struct zone`,以及迁移类型`migratetype`和区域请求标志`__GFP区域请求标志`。此外,文章还分析了fallbacks机制和`pageblock_order`的定义。最后,文章通过分析`mm_init`函数和`memblock_free_all`函数,揭示了伙伴系统初始化的详细过程,包括释放未使用的内存、重置zone的`managed_pages`、将内存块添加到伙伴系统等操作。