摘要
隨著半導體行業向納米級方向發展,多核架構已成為主流趨勢。然而,這一趨勢也使得多核處理器面臨諸多挑戰,在一定程度上限制了其性能發揮。目前,汽車行業中的混合安全關鍵型系統普遍采用多核處理器。為滿足新興自動駕駛等級的需求,這些系統所包含的軟件代碼行數可能高達數百萬行,這無疑增加了設計的復雜性。同時,遵循 ISO 26262 安全標準進一步加劇了這種復雜性。本文提出了新的安全機制,旨在解決影響汽車安全完整性等級(ASIL)多核架構的內存干擾問題。文中介紹了經過優化的新型雙逆冗余存儲算法,以緩解內存數據的系統性故障;同時還引入了其他安全機制,用于應對內存中的隨機故障。研究人員在 Aurix 三核處理器和瑞薩 RH850 等目標平臺上,對所提出的安全機制進行了深入研究與評估,并提出了多項建議,以構建完全符合 ISO 26262 標準原則和方法的架構。通過蒙特卡洛分析對所提安全機制的診斷覆蓋率進行了測試,結果顯示其診斷覆蓋率超過 99%,達到了較高水平。
1.引言
幾十年來,在各類工業應用的混合關鍵型系統開發過程中,功能安全始終是至關重要的一環。其中,航空航天應用需遵循 DO 178 標準,汽車應用則需符合道路車輛 ISO 26262 標準。ISO 26262 標準對混合安全關鍵型系統的汽車安全完整性等級(ASIL)做出了明確規定,其目的在于提升系統的可靠性、模塊化程度、可維護性、可移植性和靈活性,并降低成本。
如圖 1 所示,這些關鍵型系統實際上運行在實時單核或多核處理器上,必須在規定的關鍵期限內完成任務,否則可能會導致危害事件發生,對終端用戶造成危害。隨著半導體技術從千兆赫茲時代邁向納米級水平,為了實現理想的性能功耗比,這類系統也在不斷演進。
圖 1.多核架構框圖
在混合安全關鍵型系統中,軟件組件(SWC)及其子功能通常具有不同的 ASIL 等級,這種共存特性給系統帶來了一定影響。質量管理(QM)或低 ASIL 等級的軟件組件可能會產生干擾,通過信息交換干擾、內存干擾、實時干擾和共享外設干擾等方式(如圖 2 所示),對高 ASIL 等級的安全相關軟件組件造成破壞。
圖 2.信息交換干擾、內存干擾和共享外設干擾導致的無干擾示例圖
因此,針對安全關鍵型數據的單階或多階檢測與響應安全機制得到了廣泛應用和推廣,其目的在于防止可能違反安全目標的干擾發生。這些機制的核心作用是檢測故障并控制系統失效,確保在預設時間內(該時間需小于故障容忍時間間隔(FTTI))使系統達到并維持安全狀態。若不合理設計此類機制,不僅會大幅增加開發成本,還會對系統性能造成額外負擔。
研究指出,多核處理器面臨諸多亟待解決的挑戰。為了優化軟件組件間的核心間資源共享,需避免對共享資源的并發訪問產生等待狀態,這雖然能減少計算資源消耗,但會導致獨立數據處理能力下降和并行性損失。軟件應用在運行過程中存在多種不同的關鍵問題,如任務調度、計算資源共享、資源并發訪問、核心間內存通信、通信延遲、通信鏈路以及通信資源分配等。在當今的多核架構中,這些問題在操作系統(OS)層面變得尤為突出。
盡管多核處理器在實現實時高效運行、具備更強并行處理能力以及投資回報率方面具有顯著優勢,但 ISO 26262 標準所要求的功能安全方法和機制,在一定程度上犧牲了功能系統的效率,對于多核架構系統而言,這種影響更為明顯。ISO 26262 標準提供了多種架構和設計需求方法,若錯誤值對關鍵信號(甚至包括校準數據相關信號)產生影響,這些方法可通過阻止各類故障傳播,確保所檢測系統處于安全狀態(即降級模式)。
ISO 26262 標準確保了系統的無干擾性(FFI),這意味著隔離機制必須始終符合所涉及軟件組件的最高 ASIL 等級要求。其核心目標是防止非安全代碼對安全代碼的執行造成破壞,即確保關鍵信號在軟件組件間傳輸時,能夠免受低 ASIL 等級或 QM 軟件組件的干擾,保證數據的正確性。因此,包含通信接口的軟件架構必須按照這一保護等級要求進行開發。
通常情況下,在安全相關軟件架構中,至少存在一條關鍵路徑,它代表著關鍵信號從輸入條件到輸出根源的數據流。這一關鍵路徑可通過軟件設計的關鍵路徑分析得以體現,該分析同時也會考慮不同 ASIL 等級軟件組件之間的干擾情況。在關鍵路徑中,特定 ASIL 等級的軟件組件需能夠檢測并應對軟、硬件級聯故障,以阻止可能導致安全目標被違反的不良事件傳播。由于 ASIL 等級軟件組件的數據中可能包含 QM 軟件組件的故障干擾,因此無需在 QM 軟件組件中投入安全防護資源,但這會增加中央處理器(CPU)的負載,并對架構優化產生一定影響。
軟件數據故障可能會對內存(如隨機存取存儲器(RAM)、閃存(Flash)、電可擦可編程只讀存儲器(EEPROM)、硬件寄存器、直接內存訪問(DMA))、初始化數據或校準數據(如編譯前、鏈接時和構建后的數據)造成破壞。這些故障還可能影響軟件組件間(內核間 / 內核內電子控制單元(ECU)通信)的邏輯數據處理和數據傳輸。
內存數據完整性故障會對當前多核處理器的性能產生不利影響。內存干擾主要通過以下幾種內存故障形式體現:
(1)低 ASIL 等級軟件組件執行不安全的算術指針操作,可能導致對內存中存儲的關鍵數據進行非預期修改;
(2)混合 ASIL 等級軟件組件對共享聯合結構進行不安全的并發訪問;
(3)不安全的動態內存分配,可能導致低 ASIL 等級軟件組件對堆區存儲的關鍵數據進行非預期修改;
(4)低 ASIL 等級中斷 / 任務對分配給高 ASIL 等級軟件組件任務 / 中斷的棧段 / 私有數據區棧進行最壞情況的占用,導致棧段溢出(甚至超出容忍范圍);
(5)混合 ASIL 等級軟件組件共享非易失性內存(NVM)塊,低 ASIL 等級軟件組件在刪除自身數據時,可能會對分配給高 ASIL 等級軟件組件的 NVM 區域造成不當擦除;
(6)低 ASIL 等級軟件組件執行數組越界訪問操作,可能會破壞高 ASIL 等級軟件組件的私有數據。
研究僅對由時序故障、操作系統故障和序列故障引起的實時干擾進行了探討,并提出了相應的解決方案,以將實時多核處理器面臨的挑戰轉化為符合 ISO 26262 標準的高效架構。文獻介紹了傳統的主流內存干擾保護機制,但這些機制僅能檢測單核或多核處理器的部分內存故障。
本文的研究具有開創性,為后續相關領域的發展和研究奠定了基礎。主要貢獻在于:提出了一種強調符合 ISO 26262 無干擾(FFI)方法和原則的軟件架構,該架構能夠檢測并應對復雜多層緩存多核架構(包括 AUTOSAR)中所有可能導致內存損壞故障的情況;在 Aurix、瑞薩(Renesas)和恩智浦(NXP)等多種微控制器目標平臺上,對所實現的安全設計機制相關新算法進行了測試驗證;同時,還提出了內存保護機制所需的所有安全相關配置方案。
本文其余部分結構安排如下:第 2 節闡述了用于檢測系統性內存故障的擬議空間保護機制,即雙逆冗余存儲算法,該算法為解決內存無干擾問題提供了支持;第 3 節介紹了用于檢測隨機故障的漢明距離方法;第 4 節通過蒙特卡洛分析呈現了測量結果,以證明在多個平臺上所提機制的有效性;最后,第 5 節對全文進行總結。
2.系統性內存故障頁面設置的擬議設計算法與分
在道路車輛開發過程中,安全性是核心問題之一。汽車功能的開發與集成使得對功能安全的需求日益迫切,同時也需要提供證據證明功能安全目標得以實現。對于汽車電子控制單元(ECU)這類軟件驅動的嵌入式系統而言,干擾可能在多個層面發生。一個組件的軟件可能會通過向分配給另一個組件的內存寫入錯誤數據(數據流方式),對該組件進行訪問和操控。
ISO 26262-6附錄 D.2.3 的內存干擾部分指出,可采用多種安全措施,如內存保護、奇偶校驗位、糾錯碼(ECC)、循環冗余校驗(CRC)、冗余存儲、內存訪問限制、內存訪問軟件靜態分析以及靜態分配等。然而,該標準缺乏詳細的驗證方法,如通過深入的安全分析來確定需要應用保護機制的關鍵內存區域。因此,有必要引入經過改進的檢測和響應機制,以應對此類內存故障。
在空間保護機制中,禁止非安全代碼對安全相關數據擁有授權訪問權限。若向非安全代碼授予此類權限,可能會引發多種故障,例如:導致必須取消內存安全措施的系統性確定性故障,以及由硬件異常狀況引發的隨機故障。這些隨機故障的發生遵循硬件概率分布,可能產生間歇性、永久性和瞬時性的故障元件。此類故障可能導致內存內容損壞、內存棧溢出 / 下溢、對其他軟件組件(SWC)內存的未授權訪問以及數據不一致等問題。針對不同 ASIL 等級的系統,研究人員提出了多種安全機制,用于檢測系統性故障。
圖 1 所示為雙核架構,其中包含一條高速通信路徑(標注為 “互連模塊”)以及一個共享的 L3 緩存。L3 緩存通過內存保護單元(MPU)與內存控制器相連,同時也與所有物理核心和邏輯核心(若存在)相連,以實現高效的功耗和性能表現。每個物理核心都配備有獨立的 L2 緩存。
為實現高速同步多線程操作系統(OS),每個核心都擁有私有的 L1 指令緩存和 L1 數據緩存,同時所有物理核心之間還設有共享內存控制器。此外,各核心之間不存在固有的時序干擾。每個核心都配備有 9 組冗余的 5 個寄存器(包括控制寄存器、狀態寄存器、地址寄存器和錯誤信息寄存器),這些寄存器與硬件安全單元相連。因此,該架構具備完善的硬件錯誤報告機制,能夠對未糾正錯誤、未糾正可恢復錯誤以及已糾正錯誤進行報告。
所有核心通過總線、交叉開關、網格結構以及典型的路由通信結構相互連接。為確保系統的一致性,由于采用了每個核心配備(L1、L2 和 L3)緩存的架構內存層級結構,互連模塊的訪問需要獲得來自其他核心的仲裁許可。此外,由于一個核心的 L1 緩存數據可能已過時(該數據可能在另一個核心的 L1 緩存或內存控制器中已更新),因此核心之間還需要進行額外的通信。
對于 ASIL-A 及以上等級的系統,雙逆冗余存儲結合多數表決和錯誤檢測碼是一種適用于檢測系統性故障的優選安全機制。雙逆存儲是對多副本機制的改進,通過對存儲在不同塊中的異或(XOR)數據副本進行比較,修復由低 ASIL 等級軟件組件(SWC)引起的高 ASIL 等級軟件組件關鍵隨機存取存儲器(RAM)數據損壞問題。
盡管冗余存儲機制并非全新概念,但本文對其進行了多項改進,相較于傳統機制,顯著提升了對系統性故障的檢測和響應效率。具體而言,在讀寫數據算法中引入了多層錯誤檢測機制,從而實現了高效的診斷覆蓋率。
錯誤檢測碼可用于檢測由低 ASIL 等級軟件組件(SWC)引起的高 ASIL 等級軟件組件非易失性存儲器(NVM)數據或通信消息損壞。循環冗余校驗(CRC)、校驗和以及奇偶校驗位均屬于錯誤檢測碼的范疇。在實際應用中,先計算錯誤檢測碼,然后將其與消息所附帶的錯誤檢測碼或存儲在 NVM 塊中的錯誤檢測碼進行比較。若兩者不一致,則表明消息數據已損壞。
此外,雙逆存儲的上層機制還可用于檢測并恢復因未授權寫入操作可能導致的關鍵數據損壞。
該機制僅適用于滿足以下標準的高度安全關鍵型數據:
(1)單個變量損壞會直接導致安全目標被違反;
(2)不存在其他合理性檢查方法可用于檢測此類數據損壞;
(3)變量以事件觸發方式更新(即無周期性計算和更新);
(4)變量更新速度極慢(即在故障容忍時間間隔(FTTI)內無法執行有效的恢復機制)。
相反,多副本安全機制會增加隨機存取存儲器(RAM)占用量、閃存(Flash)占用量以及中央處理器(CPU)負載。原因在于,在操作過程中,如果未在讀取使用前直接進行冗余校驗,那么從數據讀取到數據使用之間的時間間隔延長,會因故障中斷服務程序(ISR)、任務中斷或 RAM 內存損壞而導致數據損壞的風險升高。因此,該機制不能用于保護軟件代碼中的所有數據。同樣,也不建議將其用于保護棧區域或大型緩沖區,此外,它也無法用于檢測 RAM 中的隨機硬件故障。
僅在 ASIL-D 級系統中,才應將安全關鍵型變量的一個或多個冗余副本分別存儲在物理內存中。選擇合適的存儲方法以降低所有副本同時損壞的概率,對于顯著提高存儲數據的安全性至關重要。由于在低 ASIL 等級系統中實施該機制的成本較高,因此在低 ASIL 等級系統中,只要通過適當的錯誤檢測和響應機制在邏輯上對數據進行隔離,將數據存儲在同一物理內存中是可行的。
初步解決方案如下:應由負責調用使用目標數據進行讀寫操作的任務的主軟件組件(SWC)執行多副本機制。
此外,還可通過操作系統(OS)的 PreTaskHook 保護功能來檢查冗余數據副本,這是一種更優的時間優化方案。調用方 ASIL 軟件組件(SWC)需驗證屬于每個安全關鍵型任務的多個副本,然后從每個安全關鍵型任務的 PreTaskHook 中執行冗余存儲機制。最后,在 OS 的 PostTaskHook 保護功能中對多個副本進行更新。為優化 PreTaskHook 的執行時間,并能夠測試大型復雜數據,應采用循環冗余校驗(CRC)或校驗和代碼對關鍵數據進行一次性整體驗證,而非逐個檢查單個關鍵數據。
算法 1 和算法 2 分別代表了用于讀取和寫入操作的雙逆冗余存儲機制。在進行數據讀寫操作之前,它們會相應地執行多層驗證。在這種改進的機制中,安全關鍵型變量的一個或多個冗余副本被存儲在物理上分離的內存位置,以降低所有副本同時損壞的可能性。原始數據及其相應副本應分別存儲數據值及其逆值,以增加漢明距離并降低故障發生率。當原始數據更新時,存儲在不同內存塊中包含關鍵數據的所有副本應同時進行更新。同時,具有自動存儲屬性的對象地址不得分配給可能在該對象失效后仍存在的其他對象。
因此,為降低誤檢測概率,應在軟件代碼中定期檢查數據副本直至數據被使用。換言之,高 ASIL 等級軟件組件(SWC)可通過讀取非易失性存儲器(NVM)塊,確保低 ASIL 等級 NVM 棧正確寫入這些塊,前提是已驗證錯誤檢測碼的計算結果。此外,為涵蓋可能由低 ASIL 等級設備驅動程序引發的軟硬件故障,應讀取命令反饋,并將其與請求的命令進行比較。通過這種方式,可檢測低 ASIL 等級軟件組件(SWC)請求的不當命令偏差,從而確保關鍵命令的正確執行。
在使用數據副本之前,需先進行一致性檢查。根據特定多項式方程計算出的原始數據及其循環冗余校驗(CRC)碼,會與存儲的相應數據和 CRC 碼進行比較。若存儲的數據或其 CRC 碼損壞,則會對冗余內存塊中的冗余數據進行檢查。一旦發現不一致,將啟動適當的恢復操作,例如在冗余內存區域之間進行多數表決。
若更多數據內存塊(包括關鍵數據和 CRC 碼)完好無損,則可利用這些完好的數據塊更新少量損壞的存儲數據及其 CRC 碼。若大部分存儲數據損壞,則可采用其他恢復機制,例如通過微控制器復位,使用默認安全值及其正確生成的 CRC 碼來刷新損壞的塊。如果使用覆蓋區域,則使用該區域的任務應具有互斥性。
由此可見,需要滿足以下要求:
(1)若恢復機制僅適用于非安全原始值的復位和默認值恢復,則至少需要 2 個副本;
(2)若需恢復安全相關原始值,則至少應存儲 3 個副本。
應使用符合 MISRA 規則的靜態分析工具(如 Polyspace、KlocWork 或 QAC)來檢測可能導致關鍵變量損壞的潛在錯誤,例如空指針訪問、控制指針操作、數組越界訪問、除零錯誤、變量溢出、錯誤的位運算以及無法訪問的 ASIL 代碼語句等。為減少損壞情況的發生,數組索引應是唯一允許的指針運算形式。在進行數據讀寫操作之前,必須執行多層驗證,但這不可避免地會以犧牲系統性故障檢測效率為代價,降低讀寫速度。事實上,為使設計完全符合 ISO 26262 標準而引入安全機制,會對道路車輛的功能產生一定影響。
算法 1:用于讀取操作的改進型雙逆冗余存儲機制
綜上所述,算法 1 的工作流程如下:
(1)驗證包含原始塊和相應冗余塊中目標讀取數據物理地址的 RAM 完整行的 CRC 碼是否有效;
(2)驗證所有冗余內存塊中目標讀取數據所包含的 CRC 字段是否有效;
(3)驗證其他內存塊中存儲的冗余數據是否為其原始存儲內存塊數據的雙逆值。
若所有驗證均通過,則讀取操作成功執行;若任何一項驗證失敗,則觸發相應的標志狀態,并立即啟動恢復機制。
算法 2:用于寫入操作的改進型雙逆冗余存儲機制
同時,算法 2 的工作流程如下:
(1)驗證包含原始塊和相應冗余塊中目標讀取數據物理地址的 RAM 完整行的 CRC 碼是否有效;
(2)從數據緩沖區(DataBuffer)向每個冗余內存塊執行寫入操作;
(3)驗證每個塊中寫入的數據及其包含的 CRC 碼是否與 DataBuffer 中請求的數據(包括 CRC 碼)一致;
(4)寫入操作完成后,在冗余塊之間進行寫入一致性檢查,驗證所有冗余內存塊中目標讀取數據所包含的 CRC 字段是否有效;
(5)驗證其他內存塊中存儲的冗余數據是否為其原始存儲內存塊數據的雙逆值。
若所有驗證均通過,則寫入操作成功執行;若任何一項驗證失敗,則觸發相應的標志狀態,并立即啟動恢復機制。
安全或安全關鍵型變量的一個或多個冗余副本應分別存儲在物理內存中。選擇合適的存儲方法以降低所有副本同時損壞的概率,對于顯著提高存儲數據的安全性至關重要。
3.RAM隨機故障的擬議設計算法與分析
在設計任何糾錯碼時,關鍵問題在于確保任意兩個有效碼字之間存在足夠大的差異,以避免單個比特(或可能少量比特)損壞導致一個有效碼字變為另一個有效碼字。為衡量兩個碼字之間的距離,只需統計它們之間不同比特的數量。在硬件或軟件實現中,可通過對兩個碼字進行異或(XOR)運算,然后統計結果中 1 比特的數量來實現,該數量被稱為漢明距離。
將漢明距離作為安全機制應用于 ASIL-A 及以上等級的系統中,可有效應對隨機存取存儲器(RAM)中的隨機硬件故障、不可檢測錯誤、雙對稱反轉位(位翻轉)以及突發錯誤。對于關鍵數據、關鍵狀態機、真 / 假模式編碼、枚舉類型聲明、內存塊循環冗余校驗(CRC)、有效性標志和已定義常量,應采用較高的漢明距離。在該機制中,兩個相鄰狀態(真或假)之間的互補比特數應大于 4。因此,建議將關鍵變量的兩個互補狀態設置為 A5 與 5A,或 69 與 96。若變量包含更多狀態,可使用軟件工具檢測所需的漢明值。
盡管算法 1 和算法 2 主要針對 RAM 中的系統性故障,但這些算法中的局部變量仍可能出現隨機故障。因此,漢明距離機制對于降低讀取數據標志(ReadDataFlag)和寫入數據標志(WriteDataFlag)變量的實現成本具有重要意義,是一種經濟高效的安全實現方式。
表 1.算法 1 中 ReadDataFlag 的漢明距離狀態
在算法 1 中,ReadDataFlag 包含 4 種狀態(代表不同失效模式),如表 1 所示,分別為 {0x11, 0xEE, 0xDD, 0x22}。其中,{0x11, 0xEE} 和 {0x22, 0xDD} 之間的漢明距離最大,達到 8 個比特差異;而 {0x11, 0xDD}、{0x01, 0x22}、{0xEE, 0x22} 和 {0xEE, 0xDD} 之間的漢明距離最小,僅為 4 個比特差異。
表 2.算法 2 中 WriteDataFlag 的漢明距離狀態
在算法 2 中,WriteDataFlag 包含 6 種狀態(代表不同失效模式),如表 2 所示,分別為 {0x11, 0xEE, 0xDD, 0x22, 0x77, 0x88}。其中,{0x11, 0xEE}、{0x22, 0xDD} 和 {0x77, 0x88} 之間的漢明距離最大,為 8 個比特差異;而 {0x11, 0xDD}、{0x01, 0x22}、{0xEE, 0x22}、{0xEE, 0xDD}、{0x11, 0x77}、{0x11, 0x88}、{0xEE, 0x77}、{0xEE, 0x88}、{0xDD, 0x77}、{0xDD, 0x88}、{0x22, 0x77} 和 {0x22, 0x88} 之間的漢明距離最小,為 4 個比特差異。
4.測量結果
研究人員在 Aurix 三核處理器和瑞薩 RH850 等目標平臺上,對所提出的安全機制進行了評估與驗證,以確定其是否能構建完全符合 ISO 26262 標準原則和方法的架構。
ISO 26262 標準第 5 部分推薦采用失效模式影響及診斷分析(FMEDA)和故障樹分析(FTA)方法,這兩種方法是汽車行業中應用最為廣泛的定量安全分析技術。在任何定量分析中,安全機制的 “診斷覆蓋率(DC)” 都是影響最終安全指標的關鍵參數。診斷覆蓋率用于衡量系統中所實施診斷措施的有效性,從數學角度定義為安全機制檢測和 / 或控制的故障數量與該元件總故障數量的比值。失效模式涵蓋表 1 和表 2 中從 A 到 F 的各類模式。
在實際應用中,確定診斷覆蓋率并非易事。為簡化這一過程,ISO 26262 標準為評估安全機制的診斷覆蓋率(DC)提供了一個 “起點”,根據安全機制對系統的適用性,將其診斷覆蓋率分為低(60%)、中(90%)和高(99%)三個等級。安全機制被劃分為這三個相應等級,取決于多種因素,具體如下:
(1)診斷所檢測故障類型的來源差異;
(2)系統中所實施安全機制技術的具體實現方式;
(3)安全機制的執行時間與故障容忍時間間隔(FTTI)的關系。
公式(1)表示所提出安全機制的診斷覆蓋率(KDC),其中 X 為失效模式 x 的失效模式分布,x 的取值范圍根據表 1 為 A-D,根據表 2 為 A-F;KFMC,x 為失效模式 x 的失效模式覆蓋率。
為獲得有效的正態分布,研究人員針對算法 1(表 1)和算法 2(表 2)中所有相關失效模式,對所設計安全機制的診斷覆蓋率進行了蒙特卡洛分析,以評估所提設計在內存系統性故障和 RAM 隨機故障變化情況下的穩健性。圖 3 顯示,通過添加軟件組件(SWC)樁程序模擬每種失效模式后,平均診斷覆蓋率達到 99% 以上(高水平)。表 3 列出了兩種算法在不同失效模式下的診斷覆蓋率,以驗證在多個目標平臺上進行 1000 次測量運行后所提機制的有效性。
圖3.1000個執行運行樣本的擬議安全機制診斷覆蓋率的蒙特卡洛分析直方圖
表 3.包含蒙特卡洛失配情況的典型診斷覆蓋率(DC),適用于影響算法 1 和算法 2 的所有失效模式
算法 2 在失效模式 A 下的診斷覆蓋率最低,為 98.9736%。這意味著在低 ASIL 等級或 QM 軟件組件(SWC)對高 ASIL 等級軟件組件(SWC)產生干擾的情況下,算法 2 能夠檢測出 1000 個潛在系統性故障中的 989.73 個。
5.結論
本文深入探討、分析了自動駕駛應用多核架構中的內存干擾挑戰,并提出了相應的緩解措施。此外,針對不同 ASIL 等級的系統架構,本文還提出了多種新穎的解決方案設計及其相關配置,以構建符合 ISO 26262 標準方法和原則的復雜架構設計。所提出的安全機制旨在檢測內存數據完整性故障,并提供及時的響應機制,確保系統在規定的故障容忍時間間隔(FTTI)之前進入安全狀態。
內存故障可分為系統性故障和隨機硬件故障,其中隨機硬件故障會產生間歇性、永久性和瞬時性的故障元件。這些故障是由于軟件組件(SWC)對 ASIL 等級軟件組件(SWC)所屬內存區域進行不安全訪問(如算術指針操作、聯合結構訪問、動態內存分配、數組越界訪問、共享非易失性存儲器(NVM)塊訪問、棧段訪問等)而引發的。此類故障可能導致內存內容損壞、內存棧溢出 / 下溢、對其他軟件組件(SWC)內存的未授權訪問以及數據不一致等問題。
為減少此類關鍵數據故障,建議采用棧監控機制。應將邏輯相關的安全數據納入關鍵區域,以確保數據一致性,避免被原子性訪問,且僅允許高 ASIL 等級軟件組件(SWC)使用(例如,傳感器讀數和傳感器狀態應同時讀取,否則無法確保傳感器讀數的準確性)。
本文提出了多副本存儲和雙逆冗余存儲設計機制,并對相關算法進行了改進,以降低中央處理器(CPU)負載和內存消耗。這些機制作為故障檢測手段,結合新的增強型設計配置,已在 Aurix 三核處理器、恩智浦飛思卡爾 MPC 和瑞薩 RH850 等平臺上實現,用于緩解內存數據完整性的系統性故障。由于這些機制本質上是對硬件特性的軟件配置,因此本文還提出了另一種機制來克服這一局限性。借助蒙特卡洛分析,結合失效模式發生的變化情況,對診斷覆蓋率進行了測量。結果表明,在最壞情況下,所提設計機制的診斷覆蓋率仍超過 99%。
此外,本文還提出了漢明距離這一安全機制,用于應對隨機存取存儲器(RAM)中的隨機硬件故障(如位翻轉等)。為實現所提出的安全檢測機制策略,本文還介紹了多種故障響應方法。若發生內存損壞,可對非易失性存儲器(NVM)塊進行刷新操作;同時,可利用操作系統(OS)的保護鉤子等功能,提高故障響應效率。