2026/1/20 14:41:54
网站建设
项目流程
做网站竞争大吗,成都家居网站建设,机器配件做外贸上什么网站,网易云音乐wordpress文是我读ARM手册时根据自己的理解做的一些记录虚拟地址#xff08;VA#xff09;到物理地址#xff08;PA#xff09;的转换是由 MMU#xff08;内存管理单元#xff09; 和 页表机制完成的。具体过程如何我举例分享一下我的理解ARM64 虚拟地址结构#xff08;假设 4KB …文是我读ARM手册时根据自己的理解做的一些记录虚拟地址VA到物理地址PA的转换是由 MMU内存管理单元 和 页表机制完成的。具体过程如何我举例分享一下我的理解ARM64 虚拟地址结构假设 4KB 页大小介绍转换过程之前先来介绍虚拟地址构成虚拟地址一般使用四级页表结构通常是 48 位分段如下VA[47:39] VA[38:30] VA[29:21] VA[20:12] VA[11:0]PGDPage Global Directory一级页表 PUDPage Upper Directory二级页表 PMDPage Middle Directory三级页表 PTEPage Table Entry四级页表/物理页 Offset 页内偏移/页内具体地址比如地址 0x01234567VA[47:39] 0x0 → PGD 索引VA[38:30] 0x0 → PUD 索引VA[29:21] 0x91 → PMD 索引VA[20:12] 0x1A → PTE 索引VA[11:0] 0x567 → 页内偏移MMUMemory Management Unit介绍MMU是处理器中的一个硬件模块主要负责虚拟地址 → 物理地址转换访问权限检查如只读、用户/内核态缓存控制决定哪些地址可缓存触发异常如页错误、权限错误本文其实就是在讲它的一部分工作过程。TLBTranslation Lookaside Buffer介绍介绍转换过程之前先来介绍TLBTLB是一个硬件缓存缓存最近的 VA→PA 映射用来加速地址转换物理上在 MMU 内部或旁边。TLB 存储的内容包括键Key虚拟页号VPN即虚拟地址高位值Value物理页帧地址PPN 权限等信息转换过程比如CPU 触发指令访问请求使用虚拟地址 0x01234567以linux为例MMU 会自动查询TLB它问TLB有没有现成的转换好的物理地址具体是指用地址的高位如 47–12位作为键去查找是否有对应的物理页帧地址如果TLB 命中则返回物理地址结果否则触发下面将要提及的页表遍历。MMU 启动页表遍历从 TTBRTranslation Table Base Register获取页表基地址使用 VA 的各段索引依次访问 PGD → PUD → PMD → PTEPTE 中记录了物理页的起始地址将页内偏移加到物理页地址上即物理页帧地址 页内偏移得到最终物理地址权限检查MMU 检查该页是否允许读/写 如果如果允许访问继续执行并更新TLB否则触发异常。VIPT拓展如果是要获取这个地址对应的指令内容则需要提及ARM 架构中的 FEAT_VIPTVirtually Indexed, Physically Tagged指令缓存策略,从ARM8.0开始是强制性要求指的是用虚拟地址索引物理地址标记来加速访问。ARM 兼容处理器为了兼顾性能与灵活性在指令缓存中采用 VIPT 策略我们以一个指令访问为例假设虚拟地址为 VA 0x12345678页大小为 4KB缓存大小为 32KB采用 VIPT 策略。步骤 1使用虚拟地址索引缓存集合Cache Set页大小为 4KB → 页内偏移为 12 位VA[11:0]假设缓存有 64 个集合sets需要 6 位索引 → 通常从 VA[11:6] 提取CPU 立即用 VA 的这部分位定位到某个缓存集合这一步不需要地址转换速度快步骤 2并行启动 TLB 查询同时MMU 使用虚拟地址启动页表查询或 TLB 查询如果 TLB 命中直接返回物理地址PA如果 TLB 未命中走页表遍历流程这一步可能慢但可以与索引并行进行.步骤 3查询缓存集合缓存集合中一般有多个缓存行每个缓存行都有一个 tag代表物理地址的高位我们用 TLB 返回的物理地址与缓存行的 tag 做比较只有 tag 匹配才命中缓存。tag 必须用物理地址因为虚拟地址可能存在别名aliasing问题 - 两个不同的虚拟地址可能映射到同一个物理地址。一个 64B 的缓存行大概是长这样Tag Valid Dirty LRU bits Data[0..63]物理地址的高 20 位 该行无/有效 数据被修改后是否已写回主存 决定哪个缓存行最久未使用 实际存储的数据块步骤 4命中则读取未命中则访问主存如果 tag 匹配 → 命中 → 直接读取缓存数据如果 tag 不匹配 → 未命中 → 访问主存并更新缓存VIPT总结与说明性能优化使用虚拟地址索引可以在地址转换完成前就开始缓存查找提升速度。索引使用虚拟地址用于定位缓存行Cache Line标记Tag使用物理地址用于验证缓存行是否匹配CPU 可以立刻用虚拟地址的部分位通常是页内偏移来定位缓存集合Cache Set不需要等待本文第一部分提到的MMU完成地址转换VA → PA这就允许缓存查找和 TLB 查询并行进行节省时间硬件简化VIPT 可以减少 TLBTranslation Lookaside Buffer访问延迟。如果缓存查找必须等 TLB 返回结果如 PIPT 策略就会引入延迟。而 VIPT 策略允许先用虚拟地址索引缓存同时启动 TLB 查询以获取物理地址用于标签匹配如果缓存命中TLB 查询结果可以用于验证如果缓存未命中TLB 结果用于访问主存这种并行机制显著减少了等待 TLB 的时间从而提升了指令访问速度。兼容性考虑ARM 架构支持多种内存管理单元MMU配置VIPT 更适合嵌入式系统或高性能场景。