MMU段式映射(VA -> PA)过程分析
MMU:内存管理单元。
CPU寻址的方式:
未使用MMU:CPU发出地址(PA) 直接内存寻址(SDRAM or DDRx)。
使用MMU :CPU发出地址(VA) MMU接收CPU发来的地址 经过某种转换
变成实际的物理地址去寻址。
那么是MMU是如何实现VA到PA的转化的呢?
建立VA与PA的对应关系:
MMU有段描述符(1M)(还有页描述符大页(64KB)小页(4KB)和极小页(1KB))
我们这里说段页表的建立。
比如32位CPU,4G的寻址空间可分为4096个段(4G/1MB)
所以可以建立4096个对应的关系而实际的内存肯定没到4G(VA-PA 可多对一)
所以首先要在内存中指定存放该对应表的实际位置(可通过CP15协处理器指定)
映射表的大概示意图如下
VA(0-4095) PA(高12位)
0 ---- 有效PA高12bit + AP + DOMAIN + cacheable + bufferable + 描述符
1 ---- 有效PA高12bit + AP + DOMAIN + cacheable + bufferable + 描述符
2 ---- 有效PA高12bit + AP + DOMAIN + cacheable + bufferable + 描述符
···
···
4094 ---- 有效PA高12bit + AP + DOMAIN + cacheable + bufferable + 描述符
4095 ---- 有效PA高12bit + AP + DOMAIN + cacheable + bufferable + 描述符
AP:AP权限为所有用户可读写 在多进程时使用 用来保护进程
DOMAIN:配合AP使用 权限管理
cacheable :C位 使能MMU缓存
bufferable :B位 使能MMU缓冲区
描述符:MMU使用段描述符(还有页描述符大页(64KB)小页(4KB)和极小页(1KB))
以下是建立1MB映射的C语言描述:
phyaddr = 0x30000000;
viraddr = 0xa0000000;
*(mmu_ttb_base + (viraddr >> 20)) = ((phyaddr & 0xfff00000) | 低20位的属性描述);
VA到PA转化过程:
CPU发出VA:比如0xa0000123,转化过程如下图:

本文来自博客园,作者:闹闹爸爸,转载请注明原文链接:https://www.cnblogs.com/wanglouxiaozi/p/9676087.html
分类:
arm-linux
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)