【MMU】认识 MMU 及内存映射的流程
MMU(Memory Manager Unit),是内存管理单元,负责将虚拟地址转换成物理地址。除此之外,MMU 实现了内存保护,进程无法直接访问物理内存,防止内存数据被随意篡改。
目录
一、内存管理体系结构
1、认识框架
2、虚拟地址到物理地址的转换流程
二、页命中
三、缺页
四、虚拟地址与物理地址的多级映射
1、第一级:PGD 页目录查询(VA => PTE)
2、第二级:PTE 页表查询(PTE => PA 高20位)
3、物理地址拼接(获得完整 PA)
一、内存管理体系结构
1、认识框架

MMU:
- TLB模块:用于缓存从虚拟地址到物理地址的转换结果
- TWU模块:负责完成页表的查过程
Cache:
高速缓存。缓存某物理地址对应的内容
页表:
- 将虚拟地址转换为物理地址
- 管理CPU对物理页的访问(即检查是否具备读、写、可执行等权限)
- 隔离地址空间(隔离各个进程的地址空间,使其互不影响)
PTE: PTE 是一种数据结构,用于描述虚拟内存和物理内存之间的映射关系。通过使用PTE,CPU可以根据虚拟地址获取到物理内存地址,同时检查该地址的访问权限。
- 物理页地址:虚拟内存所映射的物理内存页的地址
- 访问权限:指示当前页面是否可读、可写、可执行等权限信息
- 脏位:标记页面是否被修改过,以支持页面置换
- 共享位:指示页面是否可以被共享
- 缓存位:用于控制页面的缓存策略,例如是否可以缓存到Cache
2、虚拟地址到物理地址的转换流程
MMU 先检查 TLB 是否命中(即TLB 是否保存了该虚拟地址和物理地址的映射)
- 如果 TLB 命中了,继续查询该物理地址的内容是否存在于 cache 中。
- 若cache命中,直接取出内容返回给处理器
- 若cache没有命中,进一步访问物理内存获取相应的内容
- 如果 TLB 没有命中,MMU 通过 TWU 查询页表,翻译虚拟地址得到物理地址(具体过程请看下面“页命中”部分)
注意:这里存在一个特殊的过程“缺页”,放到后面介绍
二、页命中
页命中就是 MMU 成功将虚拟地址转换为物理地址,获取到物理地址对应内容的过程。(下图是将过程简化以后的结果,这里假设TLB没有命中)
ps:PTE 是一种数据结构,用于描述虚拟内存和物理内存之间的映射关系,包含的内容有物理内存页的地址、访问权限、臧伟

① 处理器对虚拟地址(VA) 进行访问
② MMU 通过TWU遍历物理内存页表中的 PTEA(PTE地址)
③ 物理内存返回 PTE(检查对应物理地址是否存在,或者是否具备访问权限)
④ MMU 通过PTE 映射物理地址,将其传给高速缓存或物理内存
⑤ 高速缓存或物理内存返回数据给处理器
三、缺页
与页命中相反,当MMU没有找到虚拟地址对应的物理地址时,这个时候为防止系统崩溃,需要采取补救措施。这种异常便是“缺页”(这里同样假设TLB没有命中)

① 处理器对虚拟地址(VA) 进行访问
② MMU 通过TWU遍历物理内存页表中的 PTEA(PTE地址)
③ 物理内存返回 PTE(有效位为0,触发异常,CPU响应异常,运行相应的异常处理程序)
补救措施:
④ 选出物理内存中的牺牲页,如果该页被修改过,先保存到磁盘
⑤ 异常处理程序从磁盘中加载新的页面,并更新触发异常的PTE
⑥ 异常处理程序返回到原来的进程,重新发送一个VA 给MMU(接下来就是“命中页”的流程了)
(牺牲页可以选择长时间没被使用的页,因为后面要用新页内容覆盖该页,所以要检查有没有被修改过,如果被修改过,需要更新到磁盘)
四、虚拟地址与物理地址的多级映射
上面了解了虚拟地址到物理地址的大致转换过程,但是我们要MMU 是如何根据虚拟地址 VA 获得 PTE?又是如何根据 PTE 得到最终的物理地址 PA 的 ?

下面我们要了解便是 VA 到 PA 的具体转换过程。不同系统采取的映射策略会有所不同。(下面以ARM 32bit为例)
- Linux x86 :三级映射。PGD => PMD => PTE
- Linux x86_64:四级映射。PGD => PUD => PMD => PTE
- ARM 32bit : 两级映射。PGD => PTE
其中:
- PGD:Page Global Directory
- PUD:Page Upper Directory
- PMD:Page Middle Directory
- PTE:Page Table Entry
1、第一级:PGD 页目录查询(VA => PTE)
虚拟地址 VA 的高 12 位(bit[31:20])可作为访问一级页表的索引值,基地址保存在 TTBRx 寄存器中。从PGD 中获取到的是二级页表 PTE 的基地址(起始地址)

2、第二级:PTE 页表查询(PTE => PA 高20位)
虚拟地址 VA 的 bit[19:12] 可作为访问二级页表的索引值,基地址来自 PGD 获得的页表项。从PTE 中获取到的是物理地址PA的高20位。

3、物理地址拼接(获得完整 PA)
完整的物理地址 PA = 从PTE获得 PA 高 20 位 + 虚拟地址 VA 的bit[11:0]

参考文章:
一文搞懂MMU工作原理 - 知乎 (zhihu.com)
linux中的pte是什么_linux中的pte是什么意思-PHP博客-李雷博客 (mdaima.com)
ARM32 页表映射过程 - DF11G - 博客园 (cnblogs.com)
MMU内存管理单元的工作原理和作用-电子发烧友网 (elecfans.com)
相关文章:
【MMU】认识 MMU 及内存映射的流程
MMU(Memory Manager Unit),是内存管理单元,负责将虚拟地址转换成物理地址。除此之外,MMU 实现了内存保护,进程无法直接访问物理内存,防止内存数据被随意篡改。 目录 一、内存管理体系结构 1、…...
Clion开发Stm32之存储模块(W25Q64)驱动编写
前言 涵盖之前文章: Clion开发STM32之HAL库SPI封装(基础库) W25Q64驱动 头文件 #ifndef F1XX_TEMPLATE_MODULE_W25Q64_H #define F1XX_TEMPLATE_MODULE_W25Q64_H#include "sys_core.h" /* Private typedef ---------------------------------------------------…...
SpringBoot动态切换数据源
SpringBoot整合多数据源,动态添加新数据源并切换 1.需求2.创建数据源配置类3.切换数据源4.切换数据源管理类5.使用案例5.AOP切面拦截 1.需求 低代码服务需要给多套系统进行功能配置,要求表结构必须生成在对应系统的数据库中,所以表结构的生成…...
[C++项目] Boost文档 站内搜索引擎(4): 搜索的相关接口的实现、线程安全的单例index接口、cppjieba分词库的使用、综合调试...
有关Boost文档搜索引擎的项目的前三篇文章, 已经分别介绍分析了: 项目背景: 🫦[C项目] Boost文档 站内搜索引擎(1): 项目背景介绍、相关技术栈、相关概念介绍…文档解析、处理模块parser的实现: 🫦[C项目] Boost文档 站内搜索引擎(2): 文档文本解析模块…...
SAP ABAP元素域值描述通过函数(DD_DOMVALUE_TEXT_GET)获取
代码如下: PERFORM FRM_GET_DOMVALUE_TEXT USING ZMMD_ZFLZQ <GFS_DATA>-ZFLZQ CHANGING <GFS_DATA>-ZZQTEXT .IF <GFS_DATA>-ZXYLX IS NOT INITIAL .PERFORM FRM_GET_DOMVALUE_TEXT USING ZMMD_ZXYLX <GFS_DATA>-ZXYLX CHANGING <GFS_…...
原型模式与享元模式:提升系统性能的利器
原型模式和享元模式,前者是在创建多个实例时,对创建过程的性能进行调优;后者是用减 少创建实例的方式,来调优系统性能。这么看,你会不会觉得两个模式有点相互矛盾呢? 在有些场景下,我们需要重复…...
uniapp封装手写签名
组件代码 cat-signature <template><view v-if"visibleSync" class"cat-signature" :class"{visible:show}" touchmove.stop.prevent"moveHandle"><view class"mask" tap"close" /><view c…...
掌握 JVM 调优命令
常用命令 1、jps查看当前 java 进程2、jinfo实时查看和调整 JVM 配置参数3、jstat查看虚拟机统计信息4、jstack查看线程堆栈信息5、jmap查看堆内存的快照信息 JVM 日常调优总结起来就是:首先通过 jps 命令查看当前进程,然后根据 pid 通过 jinfo 命令查看…...
扩增子分析流程——Lotus2: 一行命令完成所有分析
为什么介绍lotus2 因为快,作者比较了lotus2流程和qiime2、dada2、vsearch等,lotus2的速度最快、占用内存最小。 因为方便,只需要一行代码,即可完成全部分析。 lotus2 -i Example/ -m Example/miSeqMap.sm.txt -o myTestRun而且分…...
微服务 云原生:搭建 Harbor 私有镜像仓库
Harbor官网 写在文前: 本文中用到机器均为虚拟机 CentOS-7-x86_64-Minimal-2009 镜像。 基础设施要求 虚拟机配置达到最低要求即可,本次系统中使用 docker 24.0.4、docker-compose 1.29.2。docker 及 docker-compose 的安装可以参考上篇文章 微服务 &am…...
Ceph入门到精通-远程开发Windows下使用SSH密钥实现免密登陆Linux服务器
工具: win10、WinSCP 服务器生成ssh密钥: 打开终端,使账号密码登录,输入命令 ssh-keygen -t rsa Winscp下载 Downloading WinSCP-6.1.1-Setup.exe :: WinSCP window 生成密钥 打开powershell ssh-keygen -t rsa 注意路径 …...
APP外包开发的开发语言对比
在开发iOS APP时有两种语言可以选择,Swift(Swift Programming Language)和 Objective-C(Objective-C Programming Language),它们是两种不同的编程语言,都被用于iOS和macOS等苹果平台的软件开发…...
基于Python++PyQt5马尔科夫模型的智能AI即兴作曲—深度学习算法应用(含全部工程源码+测试数据)
目录 前言总体设计系统整体结构图系统流程图 运行环境Python 环境PC环境配置 模块实现1. 钢琴伴奏制作1)和弦的实现2)和弦级数转为当前调式音阶3)根据预置节奏生成伴奏 2. 乐句生成1)添加音符2)旋律生成3)节…...
Android中简单封装Livedata工具类
Android中简单封装Livedata工具类 前言: 之前讲解过livedata和viewmodel的简单使用,也封装过room工具类,本文是对livedata的简单封装和使用,先是封装了一个简单的工具类,然后实现了一个倒计时工具类的封装. 1.LiveD…...
国内大模型在局部能力上已超ChatGPT
中文大模型正在后来居上,也必须后来居上。 数科星球原创 作者丨苑晶 编辑丨大兔 从GPT3.5彻底出圈后,大模型的影响力开始蜚声国际。一段时间内,国内科技公司可谓被ChatGPT按在地上打,毫无还手之力。 彼时,很多企业…...
监控设置ip地址怎么设置
监控设备的IP地址设置是保障监控系统正常工作的基础。通过设置IP地址,我们可以确定监控设备在局域网内的位置,并远程访问监控设备进行实时查看、存储视频等操作。下面虎观代理小二二将介绍具体步骤。 方法一: 和电脑连接在一起,…...
力扣:56. 合并区间(Python3)
题目: 以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] [starti, endi] 。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间 。 来源:力扣(Lee…...
最小二乘问题和非线性优化
最小二乘问题和非线性优化 0.引言1.最小二乘问题2.迭代下降法3.最速下降法4.牛顿法5.阻尼法6.高斯牛顿(GN)法7.莱文贝格马夸特(LM)法8.鲁棒核函数 0.引言 转载自此处,修正了一点小错误。 1.最小二乘问题 在求解 SLAM 中的最优状态估计问题时,我们一般…...
Selenium/webdriver原理解析
最近在看一些底层的东西。driver翻译过来是驱动,司机的意思。如果将webdriver比做成司机,竟然非常恰当。 我们可以把WebDriver驱动浏览器类比成出租车司机开出租车。在开出租车时有三个角色: 乘客:他/她告诉出租车司机去哪里&…...
多用户跨境B2B2C商城后台管理系统快速搭建
搭建一个多用户跨境B2B2C商城后台管理系统需要考虑多个方面,包括系统架构设计、用户权限管理、商品管理、订单管理、支付管理、物流管理等。搭建步骤如下: 1. 系统架构设计 首先,需要设计一个稳定可靠的系统架构。选择一个适合B2B2C商城的商…...
地震勘探——干扰波识别、井中地震时距曲线特点
目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波:可以用来解决所提出的地质任务的波;干扰波:所有妨碍辨认、追踪有效波的其他波。 地震勘探中,有效波和干扰波是相对的。例如,在反射波…...
利用ngx_stream_return_module构建简易 TCP/UDP 响应网关
一、模块概述 ngx_stream_return_module 提供了一个极简的指令: return <value>;在收到客户端连接后,立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量(如 $time_iso8601、$remote_addr 等)&a…...
三维GIS开发cesium智慧地铁教程(5)Cesium相机控制
一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点: 路径验证:确保相对路径.…...
家政维修平台实战20:权限设计
目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系,主要是分成几个表,用户表我们是记录用户的基础信息,包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题,不同的角色…...
五年级数学知识边界总结思考-下册
目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解:由来、作用与意义**一、知识点核心内容****二、知识点的由来:从生活实践到数学抽象****三、知识的作用:解决实际问题的工具****四、学习的意义:培养核心素养…...
使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装
以下是基于 vant-ui(适配 Vue2 版本 )实现截图中照片上传预览、删除功能,并封装成可复用组件的完整代码,包含样式和逻辑实现,可直接在 Vue2 项目中使用: 1. 封装的图片上传组件 ImageUploader.vue <te…...
论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)
笔记整理:刘治强,浙江大学硕士生,研究方向为知识图谱表示学习,大语言模型 论文链接:http://arxiv.org/abs/2407.16127 发表会议:ISWC 2024 1. 动机 传统的知识图谱补全(KGC)模型通过…...
Caliper 配置文件解析:config.yaml
Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...
【JavaWeb】Docker项目部署
引言 之前学习了Linux操作系统的常见命令,在Linux上安装软件,以及如何在Linux上部署一个单体项目,大多数同学都会有相同的感受,那就是麻烦。 核心体现在三点: 命令太多了,记不住 软件安装包名字复杂&…...
Redis数据倾斜问题解决
Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中,部分节点存储的数据量或访问量远高于其他节点,导致这些节点负载过高,影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...
