
[linux内存管理] 第014篇 /proc/zoneinfo的详细解析
0. 前言 内存管理是一个相对复杂的内核模块,错综复杂的 数据结构 和管理逻辑。 Linux 内核为了帮助开发者从宏观上把握内存的使用情况,在几大核心数据结构中都有相应的计数统计,如物理页面使用情况、伙伴系统分配情况、内存管理区的页面使用情况、内存回收扫描回收情况、内存规整触发情况等等。 在 sta

[linux内存管理] 第013篇 zone的初始化
0. 前言 紧接前文[linux内存管理] 第012篇 物理内存管理三大结构体之zone,本文将介绍zone的初始化,这也是继bootmem_init函数的后半部分(前半部分为sparse_init)。这次让我们来到下半部分吧,下半部分主要是围绕zone_sizes_init函数展开。 start_

[linux内存管理] 第011篇 内存模型之Sparse Memory Model
0. 前言 在[linux内存管理] 第004篇 内存架构和内存模型一文中简单描述了处理器中对于内存共享技术的架构 NUMA和 UMA,以及基于这两个架构衍生的内存模型 FLATMEM、DISCONTIGMEM、SPARSEMEM,其中 FLATMEM 和 DISCONTIGMEM 因为各自的缺点而

[linux内存管理] 第012章 物理内存管理三大结构体之zone
0. 前言 在[linux内存管理] 第011篇 内存模型之Sparse Memory Model中,我们分析了 bootmem_init函数的 sparse_init。而本章暂时停下对 bootmem_init后续流程的分析,梳理一下一些基本的知识点。 在linux里将内存分为三个层次进行了管理,

[linux 内存管理] 第010篇 paging_init详解
0. 前言 从前面几篇文章中, [linux内存管理] 第006篇 start_kernel全局简述 [linux内存管理] 第007篇 fixmap映射详解 [linux内存管理] 第008篇 memblock子系统详解 我们可以知道在本篇介绍的paging_init函数之前,存放kernel I

[linux内存管理] 第009篇 reserved-memory详解
0. 前言 随着内核的运行,内核中的物理内存越来越趋向于碎片化,但是某些特定的设备在使用时用到的DMA需要大量的连续物理内存,这可能导致设备在真正使用的时候因为申请不到满足要求的物理内存而无法使用,这显然是不能接受的。 最简单的方式就是为特定设备预留一部分物理内存专用,这部分内存不受系统的管理,绑定

[linux内存管理] 第008篇 memblock子系统详解
0. 前言 经过[linux内存管理] 第007篇 fixmap映射详解的讲解,系统内存经过了FIXMAP映射,目前只是将fdt的地址映射并解析了设备树。 而在 Linux kernel 初始化完成之后,系统中的内存分配和回收是由 buddy 系统、 slab分配器 来管理,但是在 kernel 初

[linux内存管理] 第007篇 fixmap映射详解
0. 前言 首先我们需要了解一下就是,为何需要找个fixmap的内存映射?从前面的文章可以知道,当内核启动后首先会进入汇编的Head.S中运行,在那里启动了MMU,所以到现在这个阶段,CPU只能使用虚拟地址访问RAM。而setup_arch阶段在paging_init之前(paging_init会完

linux内存管理] 第006篇 start_kernel全局简述
前言 经过上一篇[linux内存管理] 第005篇 启动代码分析之汇编部分,最终执行bl start_kernel开始了C语言的世界。 start_kernel函数负责的功能很多,这个阶段会详细分析start_kernel的各

[linux内存管理] 第004章 内存架构和内存模型
前言 架构概述 从系统架构来看,目前的服务器大体可以分为三类 对称多处理器结构(SMP:Symmetric Multi-Processor) 非一致存储访问结构(NUMA:Non-Uniform Memory Access) 海量并行处理结构(MPP:Massive Parallel Process