linux内存管理系统

article/2025/10/11 10:33:01

1. linux内存管理系统

1. 1 内存配置

vim .config 

在这里插入图片描述
由上图可知,当前系统配置的内存资源为:

  • 虚拟页大小4KiB

  • 虚拟地址带宽48bit

  • 物理地址带宽48bit

  • 4级页表,pgd pud pmd pte

1.2 查看内存页的布局情况

make menuconfig

在这里插入图片描述

利用qemu环境进行查看。
不知道如何搭建环境的可以参考这个链接: https://editor.csdn.net/md/?articleId=123156383

 cat sys/kernel/debug/kernel_page_tables

在这里插入图片描述

1.3 物理内存信息大概流程


start_kernel
setup_arch
early_fixmap_init//初始化fixmap,从体系代码中给一点物理内存用于启动物理内存的基础
setup_machine_fdt//fixmap_remap_fdt,设备树中内存的映射展开
arm64_memblock_init//启动阶段的内存管理
paging_init->map_kernel->map_mem//为系统各个region建立物理内存和虚拟内存的映射

1.4 设备树内存映射

参考链接1有详细的说明 2.1参考链接1

1.5 SMP、AMP、BMP

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

1.6 NUMA与UMA两种内存管理

NUMA的核心思想是当前系统中所有CPU共享通用内存,每个CPU访问到内存的时间是一样的。

UMA的核心思想是,当前系统所有CPU共享通用内存,但是每个CPU访问到内存的时间不完全相同,性能受到内存与CPU相对路径差距的影响。

Linux内核代码,将(N)UMA类型的计算机管理物理内存抽象为struct pglist_data类型的pg_data_t的数据结构。

1.7 平坦、不连续、稀疏三种内存模型

在这里插入图片描述
Linux的早期,Linux跑的内存是flat的,就是一块连续的物理内存块。
用struct page这个数据结构来抽象物理内存管理的基本单元,它描述的范围是一个page frame的物理内存region

1.8 数据结构

struct page *mem_map;
pg_data_t
struct mem_section **mem_section;

init/main.c
start_kernel
->setup_arch(&command_line);//初始化跟arch相关的配置->arm64_memblock_init();//启动阶段的内存管理器初始化,这个很重要,后续单独描述,总的来说,这个步骤既做好了内存检查、划分,又有简单的内存分配行为|paging_init();//映射系统自身各个段、系统的物理内存|bootmem_init();|  ->arm64_numa_init();//看名字就知道本章核心就在这里,numa初始化|     ->numa_init(dummy_numa_init);//细节跟memblock关系较大,这里不扣memblock细节|       |numa_init(),|         ->numa_alloc_distance();//分配node实例,直接写死,只分配nr_node_ids个node|           |numa_register_nodes();|             ->setup_node_data();//初始化node,填充全局struct pglist_data *node_data[];数组,填充pg_data_t数据结构相关字段|               |node_set_online(nid);//设置当前node为online,到这一步,可以认为node初始化完成。|               |sparse_init();//稀疏内存模型初始化|zone_sizes_init(min, max);//zone内存区域初始化
init/main.c
start_kernel
->setup_arch(&command_line);//初始化跟arch相关的配置->sparse_init();//分配一个mem_map,然后将物理内存关联到section中。
/* 在这里之前,内核以及静态定义了全局变量struct mem_section **mem_section; 它就是sparse的核心,初始化sparse,就是将section关联到node以及struct page*/

2. 总结

2.1 技术参考

参考链接1:dtb加载 https://blog.csdn.net/u010923083/article/details/110480198


http://chatgpt.dhexx.cn/article/Q6iemw8S.shtml

相关文章

Linux内存管理详解

前一段时间看了《深入理解Linux内核》对其中的内存管理部分花了不少时间,但是还是有很多问题不是很清楚,最近又花了一些时间复习了一下,在这里记录下自己的理解和对Linux中内存管理的一些看法和认识。 我比较喜欢搞清楚一个技术本身的发展历程…

深入理解Linux内存管理

1.1 内存管理的意义1.2 原始内存管理1.3 分段内存管理1.4 分页内存管理1.5 内存管理的目标1.6 Linux内存管理体系2.1 物理内存节点2.2 物理内存区域2.3 物理内存页面2.4 物理内存模型2.5 三级区划关系3.1 Buddy System 3.1.1 伙伴系统的内存来源3.1.2 伙伴系统的管理数据结构3.…

【linux kernel】linux内存管理 | 分配物理内存页面

文章目录 一、物理内存分配概述二、分配核心函数(__alloc_pages_nodemask)(2-1)重要函数1:(get_page_from_freelist())(2-2-1)for_each_zone_zonelist_nodemask{} &#…

深度讲解Linux内存管理和Linux进程调度-打通任督二脉

《穆赫兰道》与《内陆帝国》 我在多年的工程生涯中发现很多工程师碰到一个共性的问题:Linux工程师很多,甚至有很多有多年工作经验,但是对一些Linux内存管理和linux进程管理关键概念的理解非常模糊,比如不理解CPU、内存资源等的真正…

Linux内存管理机制

在Linux中经常发现空闲内存很少,似乎所有的内存都被系统占用了,表面感觉是内存不够用了,其实不然。这是Linux内存管理的一个优秀特性,主要特点是,无论物理内存有多大,Linux 都将其充份利用,将一…

关于linux内存管理

Linux的内存管理主要分为两部分:物理地址到虚拟地址的映射,内核内存分配管理(主要基于slab)。 物理地址到虚拟地址之间的映射 1、概念 物理地址(physical address) 用于内存芯片级的单元寻址,与处理器和CPU连接的地址…

深入理解Linux内存管理-之-目录导航

日期内核版本架构作者GitHubCSDN2016-08-31Linux-4.7X86 & armgatiemeLinuxDeviceDriversLinux内存管理 1 内存描述 CSDNGitHubLinux内存描述之概述–Linux内存管理(一)01-description/01-memoryLinux内存描述之内存节点node–Linux内存管理(二)01-description/02-nodeLin…

Linux内存管理(下)

Linux内存管理(下) 物理内存管理(页管理) Linux内核管理物理内存是通过分页机制实现的,它将整个内存划分成无数4k(在i386体系结构中)大小页,从而分配和回收内存的基本单位便是内存页了。利用分页管理有助于灵活分配内存地址&…

Linux中的内存管理机制

Linux中的内存管理机制 ​ 程序在运行时所有的数据结构的分配都是在堆和栈上进行的,而堆和栈都是建立在内存之上。内存作为现代计算机运行的核心,CPU可以直接访问的通用存储只有内存和处理器内置的寄存器,所有的代码都需要装载到内存之后才能…

Linux - 内存管理

【1】前言 内存管理是指软件运行时对计算机内存资源的分配和使用的技术。其最主要的目的是如何高效,快速的分配,并且在适当的时候释放和回收内存资源。 内存管理是操作系统很重要的一部分。作为一个后端开发来说,了解操作系统是如何进行内存…

Linux的内存管理

Linux的内存管理 Linux的内存管理是一个非常复杂的过程,主要分成两个大的部分:内核的内存管理和进程虚拟内存。内核的内存管理是Linux内存管理的核心,所以我们先对内核的内存管理进行简介。 一、物理内存模型 物理内存模型主要分为两种&…

Linux内存管理(上)

Linux内存管理(上) 摘要:本章首先以应用程序开发者的角度审视Linux的进程内存管理,在此基础上逐步深入到内核中讨论系统物理内存管理和内核内存地使用方法。力求从外自内、水到渠成地引导网友分析Linux地内存管理与使用。在本章最后我们给出一个内存映射…

【纯干货】Linux内存管理(最透彻的一篇)

摘要:本章首先以应用程序开发者的角度审视Linux的进程内存管理,在此基础上逐步深入到内核中讨论系统物理内存管理和内核内存的使用方法。力求从外到内、水到渠成地引导网友分析Linux的内存管理与使用。在本章最后,我们给出一个内存映射的实例…

Linux内存管理方式

目录 前言 内存管理方式 分段式 分页式 段页式 虚拟地址如何映射到物理地址 缺页中断 内存交换 内存置换算法 前言 之前说过linux中的程序地址空间是使用的虚拟地址,虚拟地址和真实的物理地址有着某种特殊的映射关系(MMU,全称Memory Ma…

一文讲透Linux内存管理

一、Linux内存管理概述 Linux内存管理是指对系统内存的分配、释放、映射、管理、交换、压缩等一系列操作的管理。在Linux中,内存被划分为多个区域,每个区域有不同的作用,包括内核空间、用户空间、缓存、交换分区等。Linux内存管理的目标是最…

Linux内存管理(一):内存管理概述

首先明确下面几个概念: 程序(Program):一组指令的有序集合,是静态的实体。进程(Process):执行程序后,操作系统将程序的可执行文件和它的相关依赖加载到内存中,得到的动态的实体称为进程。 程序和进程并不…

史上最全linux内存管理

Linux内存结构 Node 首先, 内存被划分为结点. 每个结点关联到系统中的一个处理器,内核中表示为pg_data_t的 实例. 系统中每个节点被链接到一个以NULL结尾的pgdat_list链表中<而其中的每个节点利用pg_data_tnode_next字段链接到下一节&#xff0e;而对于PC这种UMA结构的机…

一文掌握 Linux 内存管理

作者&#xff1a;dengxuanshi&#xff0c;腾讯 IEG 后台开发工程师 以下源代码来自 linux-5.10.3 内核代码&#xff0c;主要以 x86-32 为例。 Linux 内存管理是一个很复杂的“工程”&#xff0c;它不仅仅是对物理内存的管理&#xff0c;也涉及到虚拟内存管理、内存交换和内存回…

linux内存管理(一)-内存管理架构

文章目录 一、内存管理架构二、虚拟地址空间布局架构2.1内核地址空间布局2.2用户地址空间布局 三、物理内存体系架构3.1 正常内存3.2 设备内存四、内存结构五、内存模型六、虚拟地址和物理地址的转换七、页表八、内存映射原理分析 一、内存管理架构 内存管理子系统架构可以分为…

Linux内存管理(最透彻的一篇)

【转】Linux内存管理&#xff08;最透彻的一篇&#xff09; 摘要&#xff1a;本章首先以应用程序开发者的角度审视Linux的进程内存管理&#xff0c;在此基础上逐步深入到内核中讨论系统物理内存管理和内核内存的使用方法。力求从外到内、水到渠成地引导网友分析Linux的内存管…