在與從事功能安全開發行業的同事以及SASETECH 社區的成員討論時,筆者經常被問及有關芯片內存保護單元(MPU)的問題。ISO 26262的第6部分和第11部分都提及了MPU,但并未詳細描述MPU在功能安全開發中的具體要求。因此,本文旨在討論以下問題:什么是MPU?MPU解決哪些問題?功能安全開發對MPU的功能安全需求有哪些?
01.
MPU簡述
微處理器單元內的內存保護單元(Memory Protection Unit,簡稱MPU)是執行內存訪問控制和隔離的硬件機制。其核心功能是確保系統中的每個程序或進程只能訪問其被分配的內存區域。這一機制有效防止了非法內存訪問,保護系統不受惡意軟件攻擊及數據損壞的威脅。此外,它還支持多任務環境下的上下文切換,確保了任務間的獨立性及系統整體的穩定性。
幾乎所有具備功能安全等級的芯片均集成了MPU,例如英飛凌(Infineon)的AURIX系列、瑞薩(Renesas)的RH850系列以及恩智浦(NXP)的S32K系列等。
在功能安全相關產品開發的背景下,MPU的主要目標可概括為以下幾點:
● 代碼訪問保護:通過定義存儲器區域之間的訪問規則,確保數據安全和系統穩定。
●內存或外設保護:為不同的存儲區域配置存儲器訪問權限,這包括指令/數據緩存(I/D Cache)、靜態隨機存取存儲器(SRAM)以及外設存儲。
MPU主要防御的故障模式包括:
●數據完整性破壞:防止用戶應用程序破壞操作系統所依賴的數據。
●任務隔離:避免一個任務異常地訪問另一個任務的數據區域,確保任務之間的隔離。
●意外存儲訪問:防止諸如堆棧溢出或數組越界等意外的存儲訪問行為。
●關鍵數據保護:通過將不可寫的關鍵數據區域設為只讀,防止對該區域數據的錯誤篡改。
02.
MPU工作原理
MPU負責實現一系列內存保護功能,其工作原理主要包括以下幾個方面:
●內存區域定義:MPU可以定義多個內存區域,通常能夠保護多達16個不同的內存區域。
●訪問權限設置:操作系統(OS)可以根據安全策略為每個內存區域配置特定的訪問權限。這意味著可以指定哪些進程或任務有權讀取、寫入或執行內存中的數據。例如,可以設定Region A僅允許執行任務Task X,而Region B僅允許執行任務Task Y。如果一個屬于Task X的4字節指令“DCBA”被放置在Region A中,并且該指令的一部分延伸到了不允許執行的Region B,則該指令將無法執行。

●地址映射與檢查:MPU與內存管理單元(Memory Management Unit,MMU)協同工作,負責將虛擬地址映射到物理地址。在映射過程中,MPU會檢查每個內存訪問請求的權限,確保其與內存區域的訪問設置相匹配。
●異常生成:一旦檢測到違反內存區域訪問權限的請求,MPU將觸發一個異常或中斷,以阻止非法訪問。這會通知操作系統,操作系統隨后可以采取措施,如終止非法訪問進程或記錄安全事件以供后續分析。以英飛凌(Infineon)的AURIX系列芯片為例,當MPU激活時,任何未包含在活動保護集選擇的MPU范圍內的指令或數據訪問都將立即導致CPU陷入陷阱(trap),并可向安全管理單元(Safety Management Unit,SMU)發出警報。
作為硬件組件,MPU的執行速度通常優于軟件實現的內存保護機制,這使得它能夠高效地處理大量的內存訪問請求,同時保持系統的響應性。MPU是現代計算機系統中的一個關鍵部分,它為操作系統提供了一種強有力的方法來隔離任務、保護數據,并防御惡意軟件攻擊。通過這種方式,MPU有助于維護整個系統的穩定性和安全性。
03.
功能安全開發中對于MPU的要求
在功能安全開發中,MPU扮演著至關重要的角色。其核心要求主要遵循ISO 26262這一國際功能安全標準。對于不同功能安全完整性等級要求的軟件組件,必須滿足要素共存的設計原則。對于沒有安全相關功能的軟件組件,其安全要求遵循無干擾原則,確保:
◆ 安全的內存訪問
◆正確的時間執行
◆安全的數據交換
以操作系統(OS)為例,MPU可用于實現空間隔離保護,以防止內存錯誤。在這種情況下,MPU的目的是確保:
●同一軟件分區內的任務(Task)之間不會相互干擾。一個軟件分區不能修改其他分區的代碼或數據,也不能控制其他分區的非共享資源。如下圖所示。

●在操作系統切換正在運行的任務或中斷服務例程時,執行上下文切換。此時,上下文數據被存儲,MPU重新配置,僅激活當前任務或中斷服務例程所需的內存分區。這可以保護任務Task1和Task2免受應用程序Application B的未授權訪問。如下圖所示。

在功能安全開發過程中,MPU主要保護的對象包括安全相關的應用程序數據、寄存器數據和堆棧數據等。
04.
總結
通常,在功能安全開發過程中,MPU主要用于確保不同ASIL(Automotive Safety Integrity Level)等級的任務或不同執行任務之間的獨立性。通過進行故障模式與影響分析(FMEA)和獨立性故障分析(DFA),我們可以確定分區保護的軟件安全需求。

作者
邊俊
磐時創始人/首席安全專家
汽車安全社區SASETECH發起人;智能網聯預期功能安全工作組核心成員;國內最早從事汽車功能安全、預期功能安全的專家之一
-
微處理器
+關注
關注
11文章
2434瀏覽量
86037 -
MPU
+關注
關注
0文章
456瀏覽量
51453 -
功能安全
+關注
關注
2文章
204瀏覽量
6210
發布評論請先 登錄
大唐恩智浦啟動首個ISO 26262功能安全開發流程認證項目
Android安全開發之WebView中的地雷
什么是SEooC?SEooC和正常功能安全開發有什么不同?
貿澤開售面向安全應用的英飛凌OPTIGA Trust M物聯網安全開發套件
傾倒安全開關的作用
功能安全開發的“降本利器”:高效平臺化工具鏈實戰
邊聊安全 | ASPICE與功能安全流程體系融合
邊聊安全 | 人機交互對功能安全的影響
邊聊安全 | 功能安全開發之MPU
評論