内存管理-MMU

news/2026/1/18 20:28:31/文章来源:https://www.cnblogs.com/g777isbest/p/19489138

MMU(Memory Management Unit,内存管理单元) 是 CPU 中负责虚拟内存与物理内存管理的专用硬件模块,位于 CPU 与主存之间。

MMU 的一个重要功能,是让你能将任务作为独立程序管理 —— 这些程序会运行在各自专属的虚拟内存空间中。这类虚拟内存系统的核心特性之一是地址重定位,也就是把处理器发出的虚拟地址转换为主存里的物理地址。

但是物理地址不能转换为虚拟地址,因为一个物理地址可能对应多个虚拟地址。

ARM 架构的 MMU 负责将代码与数据的地址,从内存的 “虚拟视图” 转换为实际系统中的物理地址。这个转换由 MMU 硬件完成,对应用程序来说是完全透明的。此外,MMU 还会管控每个内存区域的访问权限、内存排序规则以及缓存策略。

转换流程

image
从图中看出:

  1. 数据起点是 “ARM Core(ARM 核心)”,核心生成的虚拟地址会发送到 MMU;
  2. MMU 包含两个核心组件:
    • 转换后备缓冲器(Translation Lookaside Buffer):缓存常用的地址转换信息,用于加速地址转换(避免每次都去查内存中的转换表);
    • 表遍历单元(Table Walk Unit):负责从内存中读取转换表的硬件单元;
  3. 当 TLB 中没有所需的转换信息时,表遍历单元会通过 “Caches(缓存)” 访问 “Memory(内存)” 里的 “translation tables(转换表)”,获取地址转换所需的条目;
  4. 拿到转换条目后,MMU 就能完成虚拟地址到物理地址的转换,最终实现内存访问的地址映射。

书中写的是"translation tables",但是其机制与"页表"很像。

TLB

转换后备缓冲器(TLB)是 MMU 内部用于缓存近期执行过的页转换信息的高速缓存。当进行内存访问时,MMU 会先检查该地址转换信息是否已缓存到 TLB 中:

若所需的转换信息存在,即为TLB 命中,此时 TLB 会立即提供对应的物理地址转换结果;
若 TLB 中没有该地址的有效转换信息,即为TLB 未命中,这时候就需要执行外部转换表遍历操作。

新加载的转换信息会被缓存到 TLB 中,以便后续可能的复用。
此外,若转换表条目是有效的,整个页或段对应的虚拟地址、物理地址及其他属性会被存储为一个 TLB 条目;若是无效的,不会更新。

但是,TLB存在一致性问题:当操作系统修改转换表条目时,TLB 中可能会包含过时的转换信息

因此,操作系统必须采取措施使 TLB 条目失效:存在多种 CP15 操作可供调用,这些操作支持全局失效整个 TLB,或是移除特定的 TLB 条目。

Linux 内核包含多个调用这些 CP15 操作的函数,例如flush_tlb_all()flush_tlb_range()。这类函数通常不是设备驱动程序所必需的。

L1转换表

转换的第一阶段会使用单个 1 级(L1)转换表,有时也称为主转换表。对于 32 位核心的 4GB 完整地址空间,L1 转换表会将其划分为 4096 个等大小的段,每个段对应 1MB 的虚拟内存空间。因此,L1 转换表包含 4096 个 32 位的条目,每个条目占4个字节。

image
从图中看到,L1转换表条目格式分为以下几种:

  1. 故障条目:会触发终止异常,具体是预取终止还是数据终止取决于访问类型,该条目用于标识未映射的虚拟地址;
  2. 指向 L2 转换表的条目:该条目可将 1MB 的内存块进一步细分为更小的页;
  3. 1MB 段转换条目:将 1MB 的虚拟区域映射到物理地址;
  4. 16MB 超大段条目:这是一种特殊的 1MB 段条目,需要在转换表中占用 16 个连续条目,但可减少该区域在转换后备缓冲器(TLB)中分配的条目数量。

条目中的最低两位(位 [1:0])用于区分该条目的格式类型;当低两位为 10 时,通过位 18判断它是指向 L2 转换表的条目还是16MB 超大段条目;
Domain是域编号,表示这个条目属于哪个域;SBZ (Should Be Zero)表示应置0,保留位;nG(non-Global)是全局 / 非全局标识,表示所有进程是否共享映射;
AP(Access Permissions)是访问权限类,定义读写权限;APX 和 TEX 为访问权限和内存类型的扩展位;XN(Execute Never)是执行禁止位;
S(Shareable)是可共享标识,用于缓存一致性;P(Present)是存在位,表示是否有效;C(Cacheable)是缓存使能位;B(Bufferable)是缓冲使能位;
最后,除了故障条目,其他类型的高几位均表示对应物理段或者条目的基地址,但是并不是真正的基地址,因为物理段需要内存对齐,比如 1MB 物理段的低 20 位均为0,所以真正的基地址是 Section Base Address 向左偏移 20 位。

L1 转换表主要有两个用途:

  • 存储 L2 转换表基地址;
  • 存储用于转换 1MB 段的转换表条目。

接下来讲述,当用于 1MB 段转换时,如何得到物理地址:
image
首先,虚拟地址会通过条目索引以及转换表的物理基地址找到对应条目,计算方式是:
条目地址 = 转换表的物理基地址 + 条目索引 * 4

由于 L1 转换表有 4096 个条目,因此虚拟内存至少要有 12 位用于存放条目索引,剩下的20位用于存放地址偏移。

而条目中含有虚拟地址对应物理段的基地址信息(后面会详细介绍),通过物理段基地址+地址偏移即可得到最终的物理地址。

L1 转换表的基地址存储在转换表基址寄存器中,后续会讲。

更详细的转换图如下:
image

前面说了,L1 转换表有4096个条目,每个条目占4个字节,因此,L1 转换表的大小是 16KB。因为需要内存对齐,所以它的基地址低 14 位一定为 0。

L2转换表

L2 转换表包含 256 个 4 字节的字长条目,占用 1KB 内存空间,因此必须按 1KB 边界对齐。每个条目负责映射到 4KB 的物理内存块,同时提供 4KB 或 64KB 页的基地址。
image
与L1 转换表类似,L2 转换表的条目分为图中3类,除了故障条目,另外两种条目为:

  • 小页条目:对应 4KB 页,是 L2 表的基础物理段映射单元,此时L2 转换表;
  • 大页条目:通过 “重复 16 个 L2 条目” 实现 64KB 物理段映射,平衡映射粒度与 TLB 效率。

当检测到 16 个连续、完全相同的大页条目时,会在硬件层面把它们合并成一个 64KB 的逻辑大页。
此外,由于大页条目对应的物理段是 64KB,因此对应的虚拟地址有 4 位是 L2 转换表条目索引,16位是地址偏移。小页条目的话,8 位是转换表条目索引,12位是地址偏移。

当 L1 转换表条目用于存储 L2 转换表基地址时,虚拟地址向物理地址的转换与之前类似,仅仅中间多了一个步骤,那就是需要通过 L1 转换表条目中包含的基地址信息以及虚拟地址中的 L2 转换表索引去找到 L2 转换表的条目,见下图:
image

内存访问权限

转换表条目除了能够实现虚拟地址向物理地址的转换,还会定义与每个页关联的多项属性,比如访问权限
首先是访问权限,通过APX + AP来管理:
image

多任务时转换表的使用

在大多数使用 Cortex-A 系列处理器的系统中,会有多个应用或任务并发运行。每个任务都可以拥有自己独有的转换表,存储在物理内存中。通常,内存系统的组织方式是让虚拟地址到物理地址的映射大部分固定不变(转换表条目不会修改),这部分固定映射通常包含操作系统的代码和数据,以及各任务使用的转换表本身。

当应用启动时,操作系统会分配一组转换表条目,将该应用的代码和数据映射到物理内存。如果应用需要额外的数据空间(例如通过malloc调用),内核可以后续修改这些条目。当任务完成且应用不再运行时,内核可以删除关联的转换表条目,并为新应用复用该空间。通过这种机制,多个任务可以同时驻留在物理内存中。

在任务切换时,内核会将转换表条目切换到下一个待运行任务对应的页表。此外,休眠任务会被完全保护,防止运行中的任务访问其代码或数据 —— 这意味着MMU可以阻止运行任务访问其他任务的内存

而之前在介绍 L1 转换表的条目时,提到了 nG(non-global,非全局)位,如果某页的nG位被置位,该页就与特定应用关联。当 MMU 执行地址转换时,会同时使用虚拟地址和ASID 值。

ASID(Address Space ID,地址空间 ID) 是操作系统为每个独立任务分配的编号,取值范围为 0-255。当前任务的 ASID 值会写入 ASID 寄存器(通过 CP15 c13 访问)。当 TLB 更新且条目被标记为 “非全局” 时,ASID 值会与正常的转换信息一起存储在 TLB 条目中。后续的 TLB 查找仅在当前任务的 ASID 与条目中存储的 ASID 匹配时,才会命中该条目。

这样,TLB 中可以同时存在多个对相同虚拟地址有效的条目,显著减少了上下文切换的软件开销,因为它避免了任务切换时,不同任务的相同虚拟地址在 TLB 中的刷新,只需要修改 CP15 的 ASID 寄存器。

但是还有一个问题:可能存在多个 L1 转换表副本(每个应用对应一个),每个副本大小为 16KB。这些表中的大多数条目是相同的(仅任务特定的内存区域不同,内核空间在各表中保持不变)。此外,如果全局转换表条目被修改,所有表中的对应条目都需要同步更新。

因此,ARM提供了两种转换表基址寄存器:TTBR0和TTBR1。此外,还有一个控制寄存器(TTB 控制寄存器)用于配置一个 0 到 7 之间的值(记为 N),该值告知 MMU 需要检查虚拟地址的多少个高位,以决定使用两个 TTB 寄存器中的哪一个:

  • 当 N 为 0(默认值)时,所有虚拟地址都通过 TTBR0 映射;
  • 当 N 在 1-7 之间时,硬件会检查虚拟地址的最高 N 位:如果这 N 位全为 0,则使用 TTBR0;否则使用 TTBR1。

通过配置 N 值,可将虚拟地址空间划分为 “低地址私有区域” 和 “高地址全局区域”(如 N=7 时,32MB 以下为私有、以上为全局),进一步减少页表大小和维护成本。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1179328.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

1.18假期记录

今天继续教资科目二到学习,以及了解寒假生活指导中的智能体、大模型的知识准备深入研究

区间dp

一、核心思想与适用题型 核心思想 区间DP的核心是将问题分解为子区间求解,通过解决子区间的最优解来构建整个区间的最优解。其基本思路是:定义状态表示区间[i, j]的属性通过枚举分割点将大区间划分为两个或多个子区间…

STM32-S57-烟雾浓度+温度+人体防盗报警+水泵+风扇+TFT彩屏+阈值+声光报警+(无线方式选择)(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码

STM32-S57-烟雾浓度温度人体防盗报警水泵风扇TFT彩屏阈值声光报警(无线方式选择)(设计源文件万字报告讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码STM32-S57N无无线-无APP板: STM32-S57B蓝牙无线-APP版: STM32-S57W-WIFI无线-APP版: STM32-S57C…

综述《导航定位与授时》封面丨飞行器视觉导航新时代——从地形匹配到空间智能 - MKT

综述《导航定位与授时》封面丨飞行器视觉导航新时代——从地形匹配到空间智能 https://mp.weixin.qq.com/s/TH24qu1fDlMkRSr4e8z7zw《导航定位与授时》2025年第3期封面文章由北京自动化控制设备研究所尚克军研究员等完…

STM32-S184-车位感应+停车引导+闸道控制+车道防夹+计时计费+结算+OLED屏+声光报警+按键+(无线方式选择)(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫

STM32-S184-车位感应停车引导闸道控制车道防夹计时计费结算OLED屏声光报警按键(无线方式选择)STM32-S184N无无线-无APP板(硬件操作详细): STM32-S184B蓝牙无线-APP版: STM32-S184W-WIFI无线-APP版: STM32-S184CAN-视频监控WIFI无线-APP版: STM32-S184I-云平台-APP版: 产品功能描…

AI Agent在智能新闻事件检测中的应用

AI Agent在智能新闻事件检测中的应用 关键词:AI Agent、智能新闻事件检测、自然语言处理、机器学习、信息抽取 摘要:本文深入探讨了AI Agent在智能新闻事件检测中的应用。随着新闻信息的爆炸式增长,传统的新闻事件检测方法面临诸多挑战,而AI Agent凭借其强大的自主学习、推…

【六杆】基于matlab六杆快速回归机制运动学和动力学分析【含Matlab源码 14990期】

💥💥💥💥💥💥💞💞💞💞💞💞💞💞欢迎来到海神之光博客之家💞💞💞&#x1f49…

应用——基于 51 单片机的多功能嵌入式系统

基于 51 单片机的多功能嵌入式系统代码分析笔记一、项目概述本项目是一个基于 8051 单片机的嵌入式系统,实现了 UART 通信、LED 控制、数码管显示、蜂鸣器频率控制、DS18B20 温度传感器读取等多种功能。系统采用模块化设计,通过自定义的通信协议接收命令…

2026国产时序数据库:格局演变下金仓融合多模架构的差异化突围

2026年国产时序数据库盘点:格局嬗变下的多模态融合新锐摘要:进入2026年,在“数字中国”与工业物联网浪潮的强劲推动下,国产时序数据库市场持续繁荣,竞争格局日趋清晰。本文将对当前主流的国产时序数据库进行梳理盘点&a…

面试 Java 基础八股文十问十答第十四期

面试 Java 基础八股文十问十答第十四期 作者:程序员小白条,个人博客 相信看了本文后,对你的面试是有一定帮助的!关注专栏后就能收到持续更新! ⭐点赞⭐收藏⭐不迷路!⭐ 1)为什么要有 hashCode…

深度测评8个一键生成论文工具,MBA论文写作必备!

深度测评8个一键生成论文工具,MBA论文写作必备! 1.「千笔」—— 一站式学术支持“专家”,从初稿到降重一步到位(推荐指数:★★★★★) 在众多AI论文生成工具中,「千笔」以其强大的功能和精准的算…

【机翼】基于matlab三维机翼几何进行耦合静态气弹性分析【含Matlab源码 14991期】

💥💥💥💥💥💥💞💞💞💞💞💞💞💞欢迎来到海神之光博客之家💞💞💞&#x1f49…

医疗数据用KNN插补稳缺失值

📝 博客主页:jaxzheng的CSDN主页 医疗数据缺失值的稳健KNN插补:技术深度与实践挑战目录医疗数据缺失值的稳健KNN插补:技术深度与实践挑战 引言:医疗数据缺失的隐性危机 一、KNN插补:原理与医疗场景的特殊性…

深度测评8个AI论文平台,继续教育学生轻松搞定毕业论文!

深度测评8个AI论文平台,继续教育学生轻松搞定毕业论文! AI 工具助力论文写作,让学术之路更轻松 在当今快节奏的学习环境中,继续教育学生面临着越来越大的学术压力,尤其是毕业论文的撰写。传统的写作方式不仅耗时费力&a…

【案例】某零售品牌AI驱动的库存与品牌营销联动系统:架构师的设计思路

零售智能新纪元:AI驱动的库存与品牌营销联动系统架构设计与实践 元数据框架 标题:零售智能新纪元:AI驱动的库存与品牌营销联动系统架构设计与实践 副标题:从数据孤岛到决策协同:构建零售企业的智能神经中枢 关键词:零售AI架构 | 库存优化系统 | 营销协同决策 | 需求预…

【飞机】基于matlab倾转旋翼飞机齿轮箱建模与仿真(含非线性阻尼和立方摩擦效应)【含Matlab源码 14988期】

💥💥💥💥💥💥💞💞💞💞💞💞💞💞欢迎来到海神之光博客之家💞💞💞&#x1f49…

LangGraph详解:构建智能代理工作流的新范式

目录 前言 什么是LangGraph? 核心概念 主要特性 与传统链式调用的对比 开始使用: LangGraph核心架构 状态管理 节点与边 条件边与循环 实战案例:构建智能客服工单处理系统 案例需求分析 系统实现 步骤1:定义状态结构…

web手势剑阵(开源)

项目源码:「剑阵网页」 链接:https://pan.quark.cn/s/4c489fd6cc2c基于Three.js和MediaPipe手势识别技术打造的交互式3D剑阵演示项目。通过摄像头捕捉用户手势,实时控制数百把飞剑形成不同的剑阵形态,创造出震撼的视觉效果。核心特…

【机翼】三维机翼几何进行耦合静态气弹性分析【含Matlab源码 14991期】

💥💥💥💥💥💥💥💥💞💞💞💞💞💞💞💞💞Matlab武动乾坤博客之家💞…

【流体】基于matlab上风及一阶、二阶中心差分方案二维稳态对流扩散方程分析【含Matlab源码 14989期】含报告

💥💥💥💥💥💥💞💞💞💞💞💞💞💞欢迎来到海神之光博客之家💞💞💞&#x1f49…