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 啟動關鍵步驟
- 建立一級頁表於實體記憶體
- 設定頁表基址暫存器 (TTBR / CP15 c2)
- 設定域存取控制暫存器 (DACR / CP15 c3)
- 啟用 MMU:設定控制暫存器 (SCTLR / CP15 c1) 的 M bit
關鍵測試技巧:身分映射
若頁表設定「虛擬位址 = 實體位址」(身分映射),啟用 MMU 後程式繼續正常執行。這是驗證頁表正確性、除錯 MMU 啟動流程的有效方法:
// 頁表每條目:虛擬基址 == 實體基址
// 啟用 MMU 後,PC、堆疊、資料存取均不受影響
待補充主題
- 二級頁表 (4KB/64KB 小頁/大頁)
- 快取維護操作
- MMU 故障處理 (Data Abort / Prefetch Abort)
- ARMv4/v5 架構差異
掌握 MMU 原理是嵌入式 Linux 核心移植、裝置驅動開發、效能調優的基礎能力。