📖
🎥 B 站博文精讲视频:点击链接,配合视频深度学习


四级页表通俗讲解与实践(以 64 位 ARM Cortex-A 为例)

本文面向希望彻底理解现代 64 位架构下四级页表的开发者,结合 ARM Cortex-A 系列处理器,详细讲解虚拟地址到物理地址的映射全过程。结构清晰,细节完整,结合真实虚拟地址与物理地址举例,适合学习与实践。


0x1F

一、四级页表是什么?

1. 概念引入

  • 在现代 64 位处理器(如 ARMv8-A Cortex-A 系列)中,内存管理单元(MMU)将 虚拟地址(VA) 转换为 物理地址(PA)
  • 为了高效管理大空间内存,ARMv8-A 采用四级页表结构,层层映射。
  • 页表本质是多级查找的“索引表”,每一级根据虚拟地址的一部分找到下一级页表或物理页框。

2. 四级页表的结构

  • 每一级页表存放固定数量的表项,每个表项保存下一级页表的物理基地址及权限/属性等。

  • 常见配置下:

    • 每级索引 9 位,512 个表项(2⁹ = 512)
    • 最后 12 位为页内偏移(支持 4KB 页大小)
  • 总共:9 + 9 + 9 + 9 + 12 = 48 位虚拟地址

| LVL0 | LVL1 | LVL2 | LVL3 | Offset |
|------|------|------|------|--------|
| 9bit | 9bit | 9bit | 9bit | 12bit  |
|<---------- 48 位虚拟地址 ------------>|
  • 在 ARM 文档/代码中,四级页表常称为:

    • Level 0 table(L0)
    • Level 1 table(L1)
    • Level 2 table(L2)
    • Level 3 table(L3)
    • 每一级页表项均为 8 字节(64 位),其中高位用于存储下一级物理基地址。

二、虚拟地址如何拆分?(以 Cortex-A 64 位为例)

假设一个 48 位虚拟地址:

0x0000_1234_5678_9ABC

拆解如下:

位段位数含义示例值
47 ~ 399L0 索引(表项)0x0000000000000002
38 ~ 309L1 索引0x0000000000000046
29 ~ 219L2 索引0x00000000000000B0
20 ~ 129L3 索引0x0000000000000123
11 ~ 012页内偏移(4KB 页)0x00000000000009ABC

(示例值以实际拆分得到的二进制高/低位为例,便于理解)


三、查表过程:虚拟地址到物理地址的详细流程

1. 分解虚拟地址

  • 每一级用虚拟地址的 9 位做索引,查找该级表的第 N 项。
  • 最后 12 位为页内偏移。

2. 四级查找过程(ARM 通用流程)

  1. L0 表基地址(由 TTBR0/TTBR1 寄存器给出,物理地址)
  2. 用 L0 索引查表,得到 L1 表物理地址(通常 4KB 对齐)
  3. 用 L1 索引查表,得到 L2 表物理地址
  4. 用 L2 索引查表,得到 L3 表物理地址
  5. 用 L3 索引查表,得到最终物理页框地址(高位)
  6. 用页内偏移补齐低 12 位,拼出完整物理地址

3. 图示结构

VA [47:39] [38:30] [29:21] [20:12] [11:0]|       |       |       |      |v       v       v       v      v+-------------------------------------------------+|   L0   |   L1   |   L2   |   L3   |   Offset    |+-------------------------------------------------+

四、完整举例:Cortex-A 64 位四级页表查找过程

例子设定

假设有如下参数:

  • TTBR0_EL1 = 0x4000_0000(L0 页表物理基地址)
  • 虚拟地址 VA = 0x0000_1234_5678_9ABC
1. 拆分虚拟地址
  • L0 索引 = (VA >> 39) & 0x1FF = (0x0000_1234_5678_9ABC >> 39) & 0x1FF = 0x2
  • L1 索引 = (VA >> 30) &
    F = (0x0000_1234_5678_9ABC >> 30) & 0x1FF = 0x46
  • L2 索引 = (VA >> 21) & 0x1FF = (0x0000_1234_5678_9ABC >> 21) & 0x1FF = 0xB0
  • L3 索引 = (VA >> 12) & 0x1FF = (0x0000_1234_5678_9ABC >> 12) & 0x1FF = 0x123
  • Offset = VA & 0xFFF = 0x9ABC
2. 查找过程
  • Step 1:L0(TTBR0_EL1 + 2 × 8)

    • L0表的第2项,假设内容为 0x0000_6000_0003 (L1表物理基地址 0x6000_0000)
  • Step 2:L1(0x6000_0000 + 0x46 × 8)

    • L1表的第70项,内容为 0x0000_7F00_0003 (L2表物理基地址 0x7F00_0000)
  • Step 3:L2(0x7F00_0000 + 0xB0 × 8)

    • L2表的第176项,内容为 0x0000_9000_0003 (L3表物理基地址 0x9000_0000)
  • Step 4:L3(0x9000_0000 + 0x123 × 8)

    • L3表的第291项,内容为 0x0000_A200_3003 (物理页框基地址 0xA200_3000)
  • Step 5:加上 offset

    • 物理地址 = 0xA200_3000 + 0x9ABC = 0xA200_CABC
3. 总结查表过程
  • 虚拟地址 VA = 0x0000_1234_5678_9ABC
  • 物理地址 PA = 0xA200_CABC
  • 每一级查表都用虚拟地址的 9 位,+ 8 字节(64 位表项大小)
  • 终极目标:虚拟地址的页内偏移直接对应物理地址的低 12 位,高位来自页表递归查找结果。

五、总结与实战要点

  • 四级页表让大内存空间管理变得高效且灵活,支持细粒度权限和属性控制。
  • 只要搞懂“每一级 9 位索引 + 最后 12 位偏移”,四级页表的本质其实非常直观。
  • ARM Cortex-A(v8 64 位)架构四级页表结构和 x86_64 类似,易于类比和移植理解。
  • 实际开发中,如需分析虚拟地址映射,结合 TTBR0/TTBR1、页表物理地址、虚拟地址拆分即可快速定位。

小结:四级页表是一种多级查找机制,核心在于“索引分段 + 递归查表”,只要学会虚拟地址的二进制拆分与索引对应,每一级表项的物理地址拼接,配合工具观测,就能轻松掌握虚拟到物理的完整映射流程。


视频教程请关注 B 站:“嵌入式 Jerry”

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

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

相关文章

AI模型整合包上线!一键部署ComfyUI,2.19TB模型全解析

最近体验了AIStarter平台上线的AI模型整合包&#xff0c;包含2.19TB ComfyUI大模型&#xff0c;整合市面主流模型&#xff0c;一键部署ComfyUI&#xff0c;省去重复下载烦恼&#xff01;以下是使用心得和部署步骤&#xff0c;适合AI开发者参考。工具亮点这款AI模型整合包由熊哥…

灰色优选模型及算法MATLAB代码

电子装备试验方案优选是一个典型的多属性决策问题&#xff0c;通常涉及指标复杂、信息不完整、数据量少且存在不确定性的特点。灰色系统理论&#xff08;Grey System Theory&#xff09;特别擅长处理“小样本、贫信息”的不确定性问题&#xff0c;因此非常适合用于此类方案的优…

AI框架工具FastRTC快速上手6——视频流案例之物体检测(下)

一 前言 上一篇,我们实现了用YOLO对图片上的物体进行检测,并在图片上框出具体的对象并打出标签。但只是应用在单张图片,且还没用上FastRTC。 本篇,我们希望结合FastRTC的能力,实现基于YOLO的实时视频流的物体检测。 本篇文字将不会太多。学习完本篇,对比前面的文章,你…

PHP常见中高面试题汇总

一、 PHP部分 1、PHP如何实现静态化 PHP的静态化分为&#xff1a;纯静态和伪静态。其中纯静态又分为&#xff1a;局部纯静态和全部纯静态。 PHP伪静态&#xff1a;利用Apache mod_rewrite实现URL重写的方法&#xff1b; PHP纯静态&#xff0c;就是生成HTML文件的方式&#xff0…

基于Java AI(人工智能)生成末日题材的实践

Java AI 生成《全球末日》文章的实例 使用Java结合AI技术生成《全球末日》题材的文章可以通过多种方式实现,包括调用预训练模型、使用自然语言处理库或结合生成式AI框架。以下是30个实例的生成方法和示例代码片段。 调用预训练模型(如GPT-3或GPT-4) 使用OpenAI API生成末日…

针对软件定义车载网络的动态服务导向机制

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 做到欲望极简,了解自己的真实欲望,不受外在潮流的影响,不盲从,不跟风。把自己的精力全部用在自己。一是去掉多余,凡事找规律,基础是诚信;二是…

Pytorch实现婴儿哭声检测和识别

Pytorch实现婴儿哭声检测和识别 目录 Pytorch实现婴儿哭声检测识别 1. 项目说明 2. 数据说明 &#xff08;1&#xff09;婴儿哭声语音数据集 &#xff08;2&#xff09;自定义数据集 3. 模型训练 &#xff08;1&#xff09;项目安装 &#xff08;2&#xff09;准备Tra…

海信IP810N/海信IP811N_海思MV320-安卓9.0主板-TTL烧录包-可救砖

海信IP810N&#xff0f;海信IP811N_海思MV320处理器-安卓9主板-TTL烧录包-可救砖准备工作&#xff1a;TTL线自备跑码工具【putty跑码中文版】路径&#xff1a;【工具大全】-【putty跑码中文版】测试跑码以后将跑码窗口关闭&#xff1b;然后到下方下载烧录工具并大致看下教程烧录…

Go 中的 interface{} 与 Java 中的 Object:相似之处与本质差异

在软件系统开发中&#xff0c;“通用类型”的处理是各语言设计中不可忽视的一部分。Java 使用 Object&#xff0c;Go 使用 interface{}&#xff0c;它们都可以容纳任意类型的值&#xff0c;是实现动态行为或通用容器的基础类型。然而&#xff0c;虽然两者在使用层面看似相似&am…

Docker-07.Docker基础-数据卷挂载

一.案例首先我们通过一则案例来引出问题。我们要修改nginx容器内的html目录下的index.html文件&#xff0c;并且要将静态资源部署到nginx的html目录&#xff0c;就要首先知道该html目录的所在位置。我们首先查看nginx镜像的帮助文档&#xff0c;这里就是将有关静态资源目录的&a…

数据结构(三)双向链表

一、什么是 make 工具&#xff1f;make 是一个自动化构建工具&#xff0c;主要用于管理 C/C 项目的编译和链接过程。它通过读取 Makefile 文件中定义的规则&#xff0c;自动判断哪些文件被修改&#xff0c;并仅重新编译这些部分&#xff0c;从而大幅提高构建效率。二、什么是 M…

如何在没有iCloud的情况下将联系人转移到新iPhone?

升级到新 iPhone 后&#xff0c;设置已完成&#xff0c;想在不使用 iCloud 的情况下将联系人从 iPhone 转移到 iPhone 吗&#xff1f;别担心。还有其他 5 种方法可以帮助您轻松地将联系人转移到新 iPhone。这样&#xff0c;您就无需再次重置新设备了。第 1 部分&#xff1a;如何…

SpringBoot3.x入门到精通系列:4.2 整合 Kafka 详解

SpringBoot 3.x 整合 Kafka 详解 &#x1f3af; Kafka简介 Apache Kafka是一个分布式流处理平台&#xff0c;主要用于构建实时数据管道和流应用程序。它具有高吞吐量、低延迟、可扩展性和容错性等特点。 核心概念 Producer: 生产者&#xff0c;发送消息到Kafka集群Consumer: 消…

Android audio之 AudioDeviceInventory

1. 类介绍 AudioDeviceInventory 是 Android 音频系统中的一个核心类,位于 frameworks/base/services/core/java/com/android/server/audio/ 路径下。它负责 管理所有音频设备的连接状态,包括设备的添加、移除、状态更新以及策略应用。 设备连接状态管理:记录所有已连接的音…

系统设计入门:成为更优秀的工程师

系统设计入门指南 动机 现在你可以学习如何设计大规模系统&#xff0c;为系统设计面试做准备。本指南包含的是一个有组织的资源集合&#xff0c;旨在帮助你了解如何构建可扩展的系统。 学习设计大规模系统 学习如何设计可扩展系统将帮助你成为更优秀的工程师。系统设计是一个…

Pandas数据分析工具基础

文章目录 0. 学习目标 1. Pandas的数据结构分析 1.1 Series - 序列 1.1.1 Series概念 1.1.2 Series类的构造方法 1.1.3 创建Series对象 1.1.3.1 基于列表创建Series对象 1.1.3.2 基于字典创建Series对象 1.1.4 获取Series对象的数据 1.1.5 Series对象的运算 1.1.6 增删Series对…

大模型——Qwen开源会写中文的生图模型Qwen-Image

Qwen开源会写中文的生图模型Qwen-Image 会写中文,这基本上是开源图片生成模型的独一份了。 这次开源的Qwen-Image 的最大卖点是“像素级文字生成”。它能直接在像素空间内完成排版:从小字注脚到整版海报均可清晰呈现,且同时支持英文字母与汉字。 以下图片均来自官网的生成…

大模型知识库(1)京东云 JoyAgent介绍

一、核心定位​ JoyAgent 是京东云推出的 ​首个 100% 开源的企业级多智能体平台&#xff0c;定位为“可插拔的智能发动机”&#xff0c;旨在通过开箱即用的产品级能力&#xff0c;降低企业部署智能体的门槛。其特点包括&#xff1a; ​完整开源​&#xff1a;前端&#xff0…

PowerShell 入门2: 使用帮助系统

PowerShell 入门 2&#xff1a;使用帮助系统 &#x1f3af; 一、认识 PowerShell 帮助系统 1. 使用 Get-Help 查看命令说明 Get-Help Get-Service或使用别名&#xff1a; gsv2. 更新帮助系统 Update-Help3. 搜索包含关键词的命令&#xff08;模糊搜索&#xff09; Help *log*&a…

hyper-v实战系列:显卡虚拟化(GPU分区)--windows篇详解

一般来说&#xff0c;windows系统中最常使用的虚拟机就3个&#xff1a;vmware workstation&#xff0c;virtualbox和微软系统自带的hyper-v。后面与前两者最大的区别就是能调用物理显卡的性能。 我在这篇博文会详述如何设置windows虚拟机的显卡虚拟化&#xff0c;并会随之…