
[linux内存管理] 第000篇 Linux内存管理系列开篇
前言: 还是习惯性的以前言开篇,“深入骨髓”的程序猿思想,干啥事都想从main 开始~~ {% tip success %%} 本系列分析的源码都遵循如下的约定: 芯片架构:ARM64 内存架构:UMA 内核版本:如无特别说明,本系列源码基于Kernel 5.15 CONFIG_ARM64_VA_B

[linux内存管理] 第023篇 watermark详解
0. 前言 简单来说,在使用zoned page frame allocator分配页面时,会将可用的free pages与zone的watermark进行比较,以便确定是否分配内存。 同时watermark也用来决定kswapd内核线程的睡眠与唤醒,以便对内存进行检索和压缩处理。 回忆一下之前提到

[linux内存管理] 第22篇 buddy内存管理之慢速分配
0. 前言 在上一篇文章中我们分析了__alloc_pages中的get_page_from_freelist,也就是快速分配部分。这个函数会根据分配掩码和分配order进行快速分配,若快速分配过程并不能分配到合适的内存时,则会进入慢速分配的过程。 本文紧接前文继续分析__alloc_pages函数

[linux内存管理] 第21篇 buddy内存管理之快速分配
0. 前言 在前一文[linux内存管理] 第19篇 buddy分配器基础知识以及分配器api接口中,对buddy分配器的基础知识做了简单的介绍,包括涉及到的分配掩码、分配标志、分配入口函数、释放入口函数,而buddy分配的工作是分为快速分配和慢速分配两种的 快速分配:指现有的buddy系统中的fr

[linux内存管理] 第020篇 Linux内核slab内存的越界检查SLUB_DEBUG的原理剖析
copyright_author: 蜗窝科技 copyright_author_href: http://www.wowotech.net copyright_url: http://www.wowotech.net/memory_management/427.html copyright_info

[linux内存管理] 第019篇 buddy分配器基础知识以及分配器api接口
0. 前言 众所周知,Linux内存管理的核心是伙伴系统(buddy system)。其实在linux启动的那一刻,内存管理就已经开始了,只不过不是buddy在管理。在内核中,实现物理内存管理的allocator包括: 连续物理内存管理buddy allocator 非连续物理内存管理vmalloc

[linux内存管理] 第018篇 buddy系统的简介以及初始化
0. 前言 在[linux内存管理] 第013篇 zone的初始化一文中简单剖析了 zone 的初始化流程,也是继 arm64_memblock_init 和 sparse_init 之后有一个内存管理层,而zone 这一层管理层中,所有的物理内存都会被添加到zone 中的成员变量 free_are

[linux内存管理] 第017篇 zonelist的初始化
0. 前言 在bootmem_init初始化的时候,已经初始化了内存节点的zone成员,该成员是struct zone数组,存放该内存节点的zone信息。在linux的内存管理中,分几个阶段进行抽象,用数据结构来管理。先用结点集合管理内存,然后用zone管理结点,再用页的管理zone。此时使用的数据

[linux内存管理] 第016篇 /proc/iomem的详细解析
0. 前言 此节点是显示memblock的这部分内存的具体使用情况的。我们可以看到这部分内存很明显不属于虚拟地址,而是物理地址,和设备树中的地址保持一致! spring:/ # cat /proc/iomem 00208000-00208fff : 208000.qcom,ipcc qcom,ipc

[linux内存管理] 第015篇 理解Linux内核中的memblock和ioremap机制
0. 前言 Linux驱动开发中,设备寄存器的物理地址如何被内核管理并映射到虚拟地址空间,是一个非常核心的知识点。本文将从memblock和ioremap的机制入手,梳理相关流程和原理。 1. 什么是memblock? memblock 是 Linux 内核在启动阶段管理物理内存的核心工具。它的主要