内核解读之内存管理开篇介绍

奇妙之二进制 奇妙之二进制     2023-01-04     449

关键词:

文章目录

1、开篇介绍

内存管理是linux内核比较重要的一个模块,其实也是任何操作系统里的一个核心专题。在实际的开发工作中,经常会遇到和内存牵扯的问题,比如内存泄露啊,内存越界等。如果你的技术仅仅只是停留于业务层面,对内核的东西一无所知,遇到这些问题往往是束手无策的。我们从事嵌入式linux开发的,应用程序跑在linux操作系统上,你总不能对程序的运行载体一无所知吧。网上有很多关于内存管理的博客,零零散散,对对错错,并不系统,我在阅读了大概上百篇博客之后,结合最新版本(6.x)的内核源码,写了这个系列的文章。

我喜欢研究新的内核,都2023年了,还有人抱着0.11版本或者是2.6.0版本的内核进行研究,他们的出发点都是低版本的内核代码量少,简单易看,但我还是觉得就像手机,买新不买旧,不学过时的技术。由于内核代码开发人员比较多,还是会有一些垃圾代码存在的,开发人员会持续更新,垃圾代码也就会越来越少,比如以前没有设备树的概念,Linus Torvalds在2011年3月17日的ARM Linux邮件列表宣称“this whole ARM thing is a fucking pain in the ass”,有点脏就不翻译了,反正就是整个arm都是垃圾的意思,这句话引发了ARM Linux社区的地震,随后ARM社区进行了一系列的重大修正。在过去的ARM Li

内核解读之内存管理内存管理三级架构之page(代码片段)

...级架构,node->zone->page。本节就来介绍page。页是内核管理内存的基本单位,体系结构不同,支持的页大小也不尽相同,还有些体系结构甚至支持几种不同的页大小。大多数32位体系结构支持4KB的页,而64位... 查看详情

内核解读之内存管理内存管理三级架构之page(代码片段)

...级架构,node->zone->page。本节就来介绍page。页是内核管理内存的基本单位,体系结构不同,支持的页大小也不尽相同,还有些体系结构甚至支持几种不同的页大小。大多数32位体系结构支持4KB的页,而64位... 查看详情

内核解读之内存管理页分配器伙伴系统介绍(代码片段)

文章目录1分配器的需求2伙伴系统的内存组织2.1zonelist列表结构2.2zone的空闲内存结构2.3内存迁移类型2.4pcp页框1分配器的需求伙伴系统是linux的页框分配器,负责系统物理内存的分配工作。由于几乎所有模... 查看详情

内核解读之内存管理页分配器伙伴系统介绍(代码片段)

文章目录1分配器的需求2伙伴系统的内存组织2.1zonelist列表结构2.2zone的空闲内存结构2.3内存迁移类型2.4pcp页框1分配器的需求伙伴系统是linux的页框分配器,负责系统物理内存的分配工作。由于几乎所有模... 查看详情

内核解读之内存管理内存模型(代码片段)

文章目录1、基本术语2、FLATMEM(平坦内存模型)3、SPARSEMEM稀疏内存模型1、基本术语在介绍内存模型之前需要了解一些基本的知识。1、什么是pageframe?在linux操作系统中,物理内存被分成一页页的pageframe来管理ÿ... 查看详情

内核解读之内存管理内存模型(代码片段)

文章目录基本的术语CONFIG_FLATMEM(平坦内存模型)稀疏的内存模型基本的术语在介绍内存模型之前需要了解一些基本的知识。1、什么是pageframe?在linux操作系统中,物理内存被分成一页页的pageframe来管理,具体... 查看详情

内核解读之内存管理内存管理三级架构之page(代码片段)

...级架构,node->zone->page。本节就来介绍page。页是内核管理内存的基本单位,体系结构不同,支持的页大小也不尽相同,还有些体系结构甚至支持几种不同的页大小。大多数32位体系结构支持4KB的页,而64位... 查看详情

内核解读之内存管理内存管理三级架构之内存结点node(代码片段)

文章目录0、概述1、内存节点node0、概述结合NUMA的架构,Linux抽象出了三级内存管理架构:内存节点node、内存区域zone和物理页框page。在NUMA模型中,每个CPU都有自己的本地内存节点(memorynode),而且还可以... 查看详情

内核解读之内存管理内存管理三级架构之内存结点node(代码片段)

文章目录0、概述1、内存节点node2、NUMA的初始化0、概述结合NUMA的架构,Linux抽象出了三级内存管理架构:内存节点node、内存区域zone和物理页框page。在NUMA模型中,每个CPU都有自己的本地内存节点(memorynode)&#x... 查看详情

内核解读之内存管理内存管理三级架构之内存区域zone(代码片段)

文章目录1、zone类型2、zone结构体3、zone的初始化流程1、zone类型NUMA结构下,每个处理器CPU与一个本地内存直接相连,而不同处理器之前则通过总线进行进一步的连接,因此相对于任何一个CPU访问本地内存的速度比访问远程内存的速度... 查看详情

内核解读之内存管理内存管理三级架构之内存区域zone(代码片段)

文章目录1、zone类型2、zone结构体3、zone的初始化流程1、zone类型NUMA结构下,每个处理器CPU与一个本地内存直接相连,而不同处理器之前则通过总线进行进一步的连接,因此相对于任何一个CPU访问本地内存的速度比访问远程内存的速度... 查看详情

内核解读之内存管理页分配器伙伴系统介绍(代码片段)

...分配器暂时无法满足要求则允许其返回失败。而对于一些内核关键路径的请求,一旦失败可能会导致内核无法继续运行,则这种分配并不允许失败。对于实时性要求不高的模块,若分配器当前空闲内存不足,可以... 查看详情

内核解读之内存管理(9)第一个mm_struct(代码片段)

每个进程或内核线程都由一个任务描述数据结构(task_struct)来管理,每个task_struct中有个structmm_strcut数据结构指针,用来管理任务的虚拟地址空间。而内核本身作为一个进程,也有对应的mm_struct。mm/init-mm.cinit_mm是全系... 查看详情

内核解读之内存管理cpu体系架构uma和numa

文章目录1.SMP(UMA)体系架构2.NUMA体系架构3.NUMA结构基本概念内存和cpu有着密不可分的联系,学习内存管理,先了解下cpu的架构。1.SMP(UMA)体系架构CPU计算平台体系架构分为SMP体系架构和NUMA体系架构等... 查看详情

内核解读之内存管理cpu体系架构uma和numa

文章目录1.SMP(UMA)体系架构2.NUMA体系架构3.NUMA结构基本概念内存和cpu有着密不可分的联系,学习内存管理,先了解下cpu的架构。1.SMP(UMA)体系架构CPU计算平台体系架构分为SMP体系架构和NUMA体系架构等... 查看详情

内核源码解读之内存管理(9)第一个mm_struct(代码片段)

每个进程或内核线程都由一个任务描述数据结构(task_struct)来管理,每个task_struct中有个structmm_strcut数据结构指针,用来管理任务的虚拟地址空间。而内核本身作为一个进程,也有对应的mm_struct。mm/init-mm.cinit_mm是全系... 查看详情

内核解读之内存管理内存管理三级架构之内存区域zone(代码片段)

...,一个页框就是一个内存的分配单元,可用于任何事情:存放内核数据,用户数据和缓冲磁盘数据等等。任何种类的数据页都可以存放在任页框中,没有任何限制。但是Linux内核又把各个物理内存节点分成n个不同的管理区域zone,这是为... 查看详情

内核解读之内存管理内存模型(代码片段)

...数据结构来跟踪每一个物理页面的使用情况:是用于内核的正文段?还是用于进程的页表?是用于各种filecache还是处于free状态……2、什么是PFN?对于一个计算机系统,其整个物理地址空间应该是从0开始,... 查看详情