四級頁表通俗講解與實踐(以 64 位 ARM Cortex-A 為例)


📖
🎥 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;并會隨之…