当前位置: 首页 > article >正文

Linux 内核内存管理子系统全面解析与体系构建

一、前言: 为什么内存管理是核心知识

内存管理是 Linux 内核最核心也最复杂的子系统之一,其作用包括:

  • 为软件提供独立的虚拟内存空间,实现安全隔离
  • 分配/回收物理内存资源,维持系统稳定
  • 支持不同类型的内存分配器,最优化性能
  • 应对内存压力,培育回收策略,防止系统 OOM

对于 Linux 内核/嵌入式/系统级程序员而言,熟悉内存管理系统是基础能力。


在这里插入图片描述

二、全局观察:内存管理子系统结构

纵向分层:内存管理三大场景

分层功能关键组件
地址转换机制虚拟地址 → 物理地址MMU, 分段+分页, TLB
物理页级管理分配和回收物理页struct page, zone, buddy
内核对象分配提供高效率小内存块分配SLAB/SLUB, kmalloc, vmalloc

横向分模块:实际功能分布

  • 虚拟内存管理 (VMM)
  • 分页/页表机制
  • 物理内存分配器 (Buddy System)
  • 内核小对象分配器 (SLAB)
  • 页面回收与 swap 机制

三、核心模块分析

1. 分段 + 分页:地址转换的基石

  • 分段(Segmentation):只在 x86 有效,Linux 采用 flat model,基本忽略
  • 分页(Paging):进程地址分成页,用页表维护,支持缺页中断、TLB、COW、hugetlb

2. 物理内存管理:Buddy System

  • 分配 granularity :页(page)
  • 划分为 zone(DMA/Normal/HighMem)
  • 通过 free_area 链表管理 2^n 大小页块
  • 分裂与合并策略,避免碎片

3. SLAB 分配器:小对象高效分配

  • 构成:cache 结构,内部 slab,实际物理 page
  • 分配路径:kmalloc → kmem_cache_alloc → slab 内分配
  • 支持 slab 装慎化 (object constructor), 并免别重复初始化
  • SLUB 是高性能环境下默认分配器

4. 页面回收 & Swap

  • 回收模型:后台线程 kswapd + 前端直接回收 direct reclaim
  • 培育 LRU 列表:active/inactive 分类,区分文件页和匿名页
  • swap 把匿名页写入 swap 分区,重新读取时产生 swapin
  • zswap/zram 提供内存压缩缓存,降低 swap IO
  • OOM Killer 根据计算的 score 选择被杀死程序

四、怎样建立自己的学习体系

1. 给自己定位和目标

  • 对内核加载/进程场景关注:先看 VMM + Buddy
  • 对性能有需求:深挑 SLAB/回收

2. 系统学习路线

  1. 了解 Linux 虚拟内存分配 (mm_struct / vma)
  2. 缺页处理流程 (do_page_fault -> handle_mm_fault)
  3. 页表结构 PGD → PTE 分析
  4. Buddy 分配器:alloc_pages()
  5. kmalloc 分配路径
  6. swap / reclaim 进阶分析

3. 配合实操 + 清单

  • 观看 /proc/meminfo /proc/slabinfo
  • 使用 kmemleak / slabtop 进行分析
  • 用 GDB/QEMU 追踪页表处理
  • 建立一份居住的进度清单 + 思维图

五、面试角度应对模型

面试常见问题

问题基本回答思路
Linux 是否使用分段?采用 Flat Model,没有分段隔离
Buddy 如何合并或分裂页块?2^n 分裂,同级 Buddy 合并
SLAB 和 Buddy 关系?SLAB 依赖 Buddy 分配整页,内部再分裂
kmalloc 与 vmalloc 区别kmalloc 返回连续物理内存,vmalloc 是虚拟连续
swap 与 zswap 差别swap 是硬盘 IO,zswap 是 RAM 压缩
OOM 如何选择杀死进程oom_score, memory usage, badness 算法

面试要点分析

  • 是否掌握核心数据结构 (page/mm_struct/slab cache)
  • 是否知道基本处理流程 (缺页、oom、swap)
  • 能否用简洁词说清楚动画软件设计者的同理

六、总结:架设体系解阶式学习

  1. 总观基本组成:分段,分页,物理,SLAB,swap
  2. 接通内核组件:形成动态场景连接
  3. 配合清单、思维图、代码进阶
  4. 最后进入一些特殊场景:NUMA、缓存分析、优化相关

这是一份基于概念 + 结构 + 应用性问题的学习根基,也是深入 Linux Kernel 必经之路。

如果需要,我可以继续给出“面向面试”的项目化问题和标准答案。

相关文章:

Linux 内核内存管理子系统全面解析与体系构建

一、前言: 为什么内存管理是核心知识 内存管理是 Linux 内核最核心也最复杂的子系统之一,其作用包括: 为软件提供独立的虚拟内存空间,实现安全隔离分配/回收物理内存资源,维持系统稳定支持不同类型的内存分配器,最优…...

Tableau for mac 驱动

Tableau 驱动程序安装指南 对于希望在 Mac OS 上使用 Tableau 进行数据分析的用户来说,确保正确安装相应的驱动程序至关重要。Tableau 支持多种数据库连接方式,并提供官方文档指导如何设置这些连接。 安装适用于 Mac 的 JDBC 或 ODBC 驱动程序 为了使…...

fast-reid部署

配置设置: 官方库链接: https://github.com/JDAI-CV/fast-reid# git clone https://github.com/JDAI-CV/fast-reid.git 安装依赖: pip install -r docs/requirements.txt 编译:切换到fastreid/evaluation/rank_cylib目录下&a…...

Steam爬取相关游戏评测

## 因为是第一次爬取Steam。所以作为一次记录发出;有所错误欢迎指出。 无时间指定爬取 import requests import time import csv import osappid "553850" # 这里你也可以改成 #appid int(input()) max_reviews 10000 # 想爬多少条 # max_reviews…...

《开篇:课程目录》

大家好!我是一名.NET技术开发者,长期以来积累了比较多的项目实战经验,现在把它分享给大家,希望能够帮助到大家,同时为.NET社区提供一份力量,让更多的开发者参与进来。 要讲解的课程如下: 《介绍…...

大陆4D毫米波雷达ARS548调试

本文介绍了大陆ARS548毫米波雷达的调试与测试流程,主要包括以下内容: 设备参数:最大检测距离301m(可调93-1514m),支持gPTP时间同步。 接线调试: Windows需使用USB-RJ45转换器 Linux可直接连接网…...

Qt Quick模块功能及架构

Qt 6.0 中的 Qt Quick 模块是构建现代、动态用户界面的核心框架,基于声明式编程(QML)和 JavaScript,专注于高性能、流畅的动画和跨平台 UI 开发。、 一、主要功能改进 1. Qt Quick 核心架构 QML 引擎升级:Qt 6.0 使用…...

C++信息学竞赛中常用函数的一般用法

在C 信息学竞赛中,有许多常用函数能大幅提升编程效率。下面为你介绍一些常见函数及其一般用法: 一、比较函数 1、max()//求出a,b的较大值 int a10,b5,c;cmax(a,b);//得出的结果就是c等于10. 2、min()//求出a,b的较小值 int a1…...

大语言模型解析

1. Input Embedding embedding:将自然语言翻译成index 每个index对应一个embedding,embedding需要训练,embedding是一个数组...

全面解析网络端口:概念、分类与安全应用

在计算机网络的世界里,数据的传输与交互如同一场繁忙的物流运输,而网络端口就是其中不可或缺的 “货运码头”。无论是日常浏览网页、收发邮件,还是运行各类网络服务,都离不开网络端口的参与。本文将深入介绍网络端口的相关知识&am…...

Python网页自动化测试,DrissonPage库入门说明文档

🛰️ 基本逻辑​ 操作浏览器的基本逻辑如下: 创建浏览器对象,用于启动或接管浏览器获取一个 Tab 对象使用 Tab 对象访问网址使用 Tab 对象获取标签页内需要的元素对象使用元素对象进行交互 除此以外,还能执行更为复杂的操作&am…...

C++.OpenGL (9/64)摄像机(Camera)

颜色(Color) 颜色理论在OpenGL中的应用 #mermaid-svg-dKNDfS4EKDUmG4Ts {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-dKNDfS4EKDUmG4Ts .error-icon{fill:#552222;}#mermaid-svg-dKNDfS4EKDUmG4Ts .error-text…...

民锋视角下的资金流效率与账户行为建模

民锋视角下的资金流效率与账户行为建模 在当前复杂多变的金融环境中,资金流效率已成为衡量一家金融服务机构专业能力的重要指标。民锋在账户管理与资金调配的实战经验中,逐步建立起一套以资金流路径为核心的行为建模方法,用以评估客户行为、交…...

python打卡第48天

知识点回顾: 随机张量的生成:torch.randn函数卷积和池化的计算公式(可以不掌握,会自动计算的)pytorch的广播机制:加法和乘法的广播机制 ps:numpy运算也有类似的广播机制,基本一致 **…...

matlab实现DBR激光器计算

DBR激光器计算程序。非常值得参考的程序。DBR激光器程序 DBR计算/1.txt , 2056 DBR计算/4.asv , 22 DBR计算/4.txt , 32 DBR计算/GetDeviceEfficiency.asv , 2012 DBR计算/GetDeviceEfficiency.m , 2014 DBR计算/GetOneLayerArray.asv , 837 DBR计算/GetOneLayerArray.m , 836…...

Java在word中指定位置插入图片。

Java使用(Poi-tl) 在word(docx)中指定位置插入图片 Poi-tl 简介Maven 依赖配置Poi-tl 实现原理与步骤1. 模板标签规范2.完整实现代码3.效果展示 Poi-tl 简介 Poi-tl 是基于 Apache POI 的 Java 开源文档处理库,专注于…...

uni-app学习笔记三十--request网络请求传参

request用于发起网络请求。 OBJECT 参数说明 参数名类型必填默认值说明平台差异说明urlString是开发者服务器接口地址dataObject/String/ArrayBuffer否请求的参数App 3.3.7 以下不支持 ArrayBuffer 类型headerObject否设置请求的 header,header 中不能设置 Refere…...

可视化图解算法48:有效括号序列

牛客网 面试笔试 TOP101 | LeetCode 20. 有效的括号 1. 题目 描述 给出一个仅包含字符(,),{,},[和],的字符串,判断给出的字符串是否是合法的括号序列 括号必须以正确的顺序关闭,"()"和"()[]{}"都是合法的括号序列&…...

Continue 开源 AI 编程助手框架深度分析

Continue 开源 AI 编程助手框架深度分析 一、项目简介 Continue 是一个模块化、可配置、跨平台的开源 AI 编程助手框架,目标是让开发者能在本地或云端环境中,快速集成和使用自定义的 LLM 编程辅助工具。它通过支持 VS Code 与 JetBrains 等主流 IDE 插件…...

MySQL技术内幕1:内容介绍+MySQL编译使用介绍

文章目录 1.整体内容介绍2.下载编译流程2.1 安装编译工具和依赖库2.2 下载编译 3.配置MySQL3.1 数据库初始化3.2 编辑配置文件3.3 启动停止MySQL3.4 登录并修改密码 1.整体内容介绍 MySQL技术系列文章将从MySQL下载编译,使用到MySQL各组件使用原理源码分析&#xf…...

RMQ 算法详解(区间最值问题)

RMQ 算法详解(区间最值问题) 问题介绍解决方法暴力法ST表法基本思想算法步骤C实现 问题介绍 RMQ问题是OI中经常遇到的问题,主要是一下形式: 给你一堆数,不断的对里面的数进行操作,例如:让某个…...

SpringCloud——Nacos

1、核心功能: 服务注册与发现: 服务实例可动态注入到Nacos中,消费者通过服务名发现可用实例。 // 启用EnableDiscoveryClient注解启用Nacos SpringBootApplication EnableDiscoveryClient public class UserServiceApplication {public st…...

ubuntu自定义服务自动启动

自定义服务 在路径 /etc/systemd/system/ 下 定义example.service [Unit] DescriptionMy Custom Script[Service] ExecStart/root/exe_start.sh Typeoneshot RemainAfterExityes[Install] WantedBymulti-user.target在/root/ 路径下执行 vi exe_start.shcd /root/mes_server/…...

网络安全问题及对策研究

摘 要 网络安全问题一直是近年来社会乃至全世界十分关注的重要性问题,网络关乎着我们的生活,政治,经济等多个方面,致力解决网络安全问题以及给出行之有效的安全策略是网络安全领域的一大目标。 本论文简述了课题的开发背景&…...

Ubantu-Docker配置最新镜像源250605

尝试其他镜像加速器 阿里云镜像加速器:登录阿里云,进入容器镜像服务获取专属加速器地址。毫秒镜像:https://docker.1ms.run。DockerHub镜像加速器:https://docker.xuanyuan.me。Docker Hub 镜像加速服务:https://dock…...

【计算机网络】NAT、代理服务器、内网穿透、内网打洞、局域网中交换机

🔥个人主页🔥:孤寂大仙V 🌈收录专栏🌈:计算机网络 🌹往期回顾🌹:【计算机网络】数据链路层——ARP协议 🔖流水不争,争的是滔滔不息 一、网络地址转…...

后端解决跨域问题的三种方案:注解配置 vs 全局配置 vs 过滤器配置(附完整代码详解)

文章目录 一、引言:跨域问题的本质与解决方案分类解决方案分类二、方案一:`WebMvcConfigurer` 全局配置(推荐)1. 核心代码(你提供的 `CorsConfig` 示例)2. 代码详解3. 优点4. 注意事项三、方案二:`CorsFilter` 过滤器配置(传统方式)1. 核心代码(你提供的 `ResourcesC…...

在 Vue 的template中使用 Pug 的完整教程

在 Vue 的template中使用 Pug 的完整教程 引言 什么是 Pug? Pug(原名 Jade)是一种高效的网页模板引擎,通过缩进式语法和简洁的写法减少 HTML 的冗长代码。Pug 省略了尖括号和闭合标签,使用缩进定义结构,…...

【立体匹配】:双目立体匹配SGBM:(1)运行

注:这是一个专题,我会一步步介绍SGBM的实现,按照我的使用和优化过程逐步改善算法,附带实现方法 系列文章【立体匹配】:双目立体匹配SGBM:(1)运行 【立体匹配】:双目立体匹…...

< 自用文 OS有关 新的JD云主机> 国内 京东云主机 2C4G 60G 5Mb 498/36月 Ubuntu22

攒了这么久,废话一些: 前几周很多事儿,打算回北京,开个清真的德克萨斯烤肉店,写了一篇 : < 自用文 Texas style Smoker > 美式德克萨斯烟熏炉 从设计到实现 (第一部分&…...