一、介紹
內存保護單元 是一種硬件模塊,通常集成在處理器內核中,用于管理和管理對內存的訪問,以提高系統的可靠性和安全性。
它的核心任務是保護。想象一下,一個操作系統中有多個任務在運行:
* 任務A的代碼 bug 可能會錯誤地寫入任務B的數據內存區域,導致任務B崩潰。
* 一個惡意的應用程序可能會嘗試訪問操作系統的內核代碼區域,獲取系統控制權。
MPU就是為了防止這類問題而存在的“內存警察”。
?
二、MPU 的工作原理
1. 定義區域:軟件(通常是操作系統內核)為MPU配置一系列保護區域。每個區域由以下屬性定義:
? ?* 起始地址:該區域在內存中的開始位置。
? ?* 大小:該區域的范圍。
? ?* 訪問權限:規定什么模式可以訪問該區域(如:只讀、讀/寫、禁止訪問)。
? ? ? * 特權訪問:僅允許在特權模式下運行的代碼(如操作系統內核)訪問。
? ? ? * 用戶訪問:允許在用戶模式下運行的代碼(如應用程序)訪問。
? ?* 內存屬性:例如該區域是否可緩存、是否可共享等。
2. 實時監控:
在程序運行期間,MPU硬件會實時檢查處理器發出的每一次內存訪問(取指令、加載數據、存儲數據)。
3. 執行規則:
? ?* 如果訪問符合為該內存區域定義的規則,則訪問正常進行。
? ?* 如果訪問違反了規則(例如,一個用戶程序試圖寫入一個只讀區域,或訪問一個未分配給它的區域),MPU會立即觸發一個異常(通常是 MemManage Fault)。
4. 異常處理:
CPU會暫停當前違規的任務,并跳轉到操作系統預設的異常處理程序。操作系統可以據此終止這個“行為不端”的任務,并可能記錄錯誤日志,從而防止它破壞其他任務或系統本身,保證了系統的整體穩定。
三、MPU與MMU的區別
MPU 內存保護單元與 MMU 內存管理單元的區別,應用場景 實時操作系統,對確定性要求高的場景,成本敏感的微控制器。硬件成本簡單,成本低,面積小
MPU對虛擬內存不支持,MPU工作在物理地址上。?
MMU的核心功能是虛擬地址到物理地址的轉換(通過頁表)。?應用場景是大型操作系統,需要復雜內存管理的場景。硬件復雜,成本高,面積大(需要TLB等緩存)
簡單比喻:
* MMU 像是一個帶高級GPS和區域權限管理的出租車系統。它不僅可以帶你到任何地方(虛擬地址 -> 物理地址),還能確保你不會進入禁區(內存保護)。
* MPU 則像一個固定的路障和檢查站系統。它沒有GPS功能,但它在各個關鍵路口設卡,檢查你的車輛是否有權限進入前方的區域(內存保護)。
?
四、MPU 的應用場景
MPU廣泛應用于運行實時操作系統 的微控制器中,例如:
* FreeRTOS with MPU support
* Azure RTOS ThreadX
* Zephyr RTOS
在這些系統中,MPU用于:
* 保護內核代碼和數據不被應用程序破壞。
* 隔離不同任務(進程)的堆棧和數據空間,實現任務間的內存保護。
* 將某些關鍵內存區域設置為只讀(例如,存儲常數或代碼的Flash區域),防止意外寫入。
* 標記某些內存區域為“不可執行”,防止代碼注入攻擊,提升安全性。
?
?