Linux 内存管理全面分析

news/2025/2/12 8:49:09/

前言:

还是习惯性的以前言开篇,“深入骨髓”的程序猿思想,干啥事都想从main 开始~~

在Android 项目中接触内存管理相关的有一段时间了,中间看了很多代码,看了忘,忘了看,反反复复,索性就抽点时间整理出来~~

该专栏会尽可能的清晰、完整地总结内存管理相关的知识点,因为时间有限,不可能一次性总结出来,但一定是持续、长期地的完善各个模块和细节。

以付费的形式出现,大致体现在如下几点:

一,专栏覆盖了内存管理的大部分的内容,是一个很全面的完整知识体系的专栏;

二,笔者长期坚持结合代码实际总结知识点,会深入模块细节、流程细节去分析;

三,整个知识点脉络中会将复杂的逻辑过程以流程图、框架图形式同步呈现,方便深入理解;

笔者会长期地坚持总结下去,后期也会根据不同的Linux 版本进行比较分析、补充,敬请期待!! 

1. 内存管理的一些预备知识

  • 管理机制简述
  • 页面查询过程简述
  • 内存与内存分布
  • 内存架构和内存模型简述

2. 物理内存初始化流程

  • memblock 发展过程概述
  • memblock初始化
  • fixmap 详解
  • paging_init
  • 内存模型SPARSEMEM初始化
  • zone简介以及初始化
  • 备选区域初始化

3. buddy 分配器

  • buddy 系统简介和初始化
  • buddy 系统分配器前篇
  • buddy 系统分配器之快速分配(1)
  • buddy 系统分配器之快速分配(2)
  • buddy 系统分配器之快速分配(3)
  • buddy 系统分配器之慢速分配
  • buddy 系统分配器之页面释放
  • CMA 分配器详解

4. slab 分配器

  • slab 分配器概述
  • slub 分配器初始化
  • slub 分配器之__kmem_cache_create
  • slub 分配器之kmem_cache_alloc
  • slub 分配器之kmem_cache_create
  • slub 分配器之kmem_cache_free
  • slub 分配器之kmem_cache_destroy
  • slub 分配器之kmalloc详解

5. 缺页异常处理

  • page 概念和数据结构;
  • page 相关的函数使用;

6. 页面回收

  • LRU简介
  • LRU 第二次机会法
  • 页面回收简介和 kswapd详解(1)
  • kswapd详解(2)
  • shrink_node 详解
  • shrink_list 详解(1)
  • shrink_list 详解(2)
  • 直接内存回收详解
  • 页面回收总结

7. 内存规整

  • 内存规整简介
  • kcompactd详解
  • 直接内存规整详解

8. 基础概念

  • vmstat;
  • meminfo;
  • zoneinfo;
  • buddyinfo;
  • pagetypeinfo;
  • slabinfo;
  • overcommit;
  • min_free_kbytes;
  • lowmem_reserve_ratio;
  • dirty_background_bytes和dirty_background_ratio;

9. 其他

  • PSI;
  • PageAnon 与 PageSwapBacked
  • 内核OOM机制详解
  • vmalloc 详解
  • ION 详解
  • 高速缓存管理;
  • MESI 协议;
  • ARM 处理器设计;
  • 内存中可能出现的 BUG 或 panic

博文中的专业术语:

  • VIVT:Virtual Index Virtual Tag,虚拟索引虚拟标签
  • VIPT:Virtual Index Physical Tag,虚拟索引物理标签
  • PIPT:Physical Index Physical Tag,物理索引物理标签
  • TLB:Translation Look-aside Buffer,转换旁视缓存,转换旁路缓存
  • TTW:Translation Table Walk,转换表遍历
  • TWU:Table Walk Unit,页表遍历单元
  • MMU:Memory Management Unit,内存管理单元
  • EPN:Effective Page Number,有效页帧号
  • RPN:Real Page Number,实际页帧号
  • PFN:Page frame Number,页帧号
  • VA:Virtual Address,虚拟地址
  • PA:Physical Address,物理地址
  • SMP:Symmetric Multiple Processing,对称多处理器
  • UMA:Uniform Memory Access,统一内存访问
  • NUMA:Non-Uniform Memory Access,非统一内存访问

参考:

Linux 内存管理总续


http://www.ppmy.cn/news/87313.html

相关文章

JVM--解析运行期优化与JIT编译器

本篇博客,我们来谈一谈JVM(HotSpot)为了提高Java程序的运行效率,都实现了哪些激动人心的技术~ 1 JIT编译器的引入 首先我们这篇文章中所说的编译器都是指JVM的组成部分之一---即时编译器(JIT)…

Debug | Litemall项目上线

文章目录 1. litemall资源1.1 Litemall项目开源网址1.2 Litemall网盘地址 2. 项目上线2.1 项目框架2.2 项目配置2.3 依赖工具安装2.4 数据库导入2.5 启动小商城和管理后台的后台服务2.6 启动管理后台的前台服务 3项目展示: 1. litemall资源 1.1 Litemall项目开源网…

基于Java+Swing+mysql物业收费管理系统

基于JavaSwingmysql物业收费管理系统 一、系统介绍1. 居民管理模式:2. 物业管理员管理模式:3.项目说明 二、功能展示1.用户登陆2.查询缴费--业主3.历史账单3.资料设置4.生成账单--管理员5.收费记录--管理员6.用户管理--管理员 三、数据库四、其它系统五、获取源码 一、系统介绍…

Unity + HybridCLR,近乎完美的新热更方案,从零开始(一)——Hello World

Unity HybridCLR,近乎完美的新热更方案,从零开始(一)——Hello World 前言一、HybridCLR是什么?二、使用步骤环境配置创建项目创建 HotUpdate 热更新模块安装和配置HybridCLR配置HybridCLR创建热更脚本加载热更新程序…

【工作记录】Lambda表达式学习总结

Lambda是什么 Lambda表达式是一种匿名函数,它可以在代码中被声明和传递,而不需要命名。Lambda表达式通常用于编写简洁的、非常具有可读性的代码,尤其是在函数式编程语言中。 一个Lambda表达式由参数列表、箭头符号和函数体组成。例如&#…

支付宝支付示例

引入alipay-sdk-java依赖 创建AlipayConfig类,包含支付宝相关配置信息 public class AlipayConfig {// 商户appidpublic static String APPID "";// 私钥public static String RSA_PRIVATE_KEY "";// 支付宝公钥public static String ALIPA…

章节1:Burp Suite基本介绍

章节1:Burp Suite基本介绍 Burp [bɜ:p] Suite [swiːt] 01 Burp Suite基本介绍 官网介绍 https://portswigger.net/ 主要产品 Burp Suite培训和认证(Academy)研究院(Research)日报(Daily)…

PHP+vue高校教学考研资料分享系统

运行环境:phpstudy/wamp/xammp等 开发语言:php 后端框架:Thinkphp5 前端框架:vue.js 服务器:apache 数据库:mysql 数据库工具:Navicat/phpmyadmin用户首次登录系统需要注册一个用户,用户在登陆平…