首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

ARM9 MMU 架構詳解:頁表、TLB、快取與啟動流程

     編輯:關於C語言

ARM9 記憶體管理單元 (MMU) 核心機制深度解析

MMU 負責虛擬位址到實體位址的轉換、存取權限控制、快取策略管理,是作業系統支援虛擬記憶體、進程隔離的關鍵硬體。

一、頁表架構

  • 位址空間:32 位元,4GB (2^32 bytes)
  • 一級頁表:4096 條目 (4K),每條目對應 1MB 區塊
  • 頁表基址範例:0x31000000,佔用 4096 × 4 bytes = 16KB
  • 條目內容:高 12 位為實體基址,低位含存取權限控制位
  • 映射範例:第 0 條目對應虛擬 0x00000000~0x000FFFFF,內容為對應實體基址

二、TLB (Translation Lookaside Buffer) - 快表

頁表駐留 DRAM,存取延遲高。TLB 為頁表的快取,儲存近期使用的頁表條目,命中時直接獲得實體位址,大幅加速位址轉換。屬全相聯或組相聯快取,由硬體自動管理。

三、快取

指令/資料快取位於 CPU 與 MMU 之間(或 MMU 之後,視架構)。快取策略(Write-through/Write-back)、一致性協定、標記/索引/位移劃分影響效能。ARM9 典型採用 Harvard 架構,分離 I-cache/D-cache。

四、MMU 啟動關鍵步驟

  1. 建立一級頁表於實體記憶體
  2. 設定頁表基址暫存器 (TTBR / CP15 c2)
  3. 設定域存取控制暫存器 (DACR / CP15 c3)
  4. 啟用 MMU:設定控制暫存器 (SCTLR / CP15 c1) 的 M bit

關鍵測試技巧:身分映射

若頁表設定「虛擬位址 = 實體位址」(身分映射),啟用 MMU 後程式繼續正常執行。這是驗證頁表正確性、除錯 MMU 啟動流程的有效方法:

// 頁表每條目:虛擬基址 == 實體基址
// 啟用 MMU 後,PC、堆疊、資料存取均不受影響

待補充主題

  • 二級頁表 (4KB/64KB 小頁/大頁)
  • 快取維護操作
  • MMU 故障處理 (Data Abort / Prefetch Abort)
  • ARMv4/v5 架構差異

掌握 MMU 原理是嵌入式 Linux 核心移植、裝置驅動開發、效能調優的基礎能力。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved