《深入淺出AUTOSAR OS》之內存保護

                                        內存保護

1 背景與基本原理

內存保護(Memory protection)只能在爲內存保護提供硬件支持的處理器上實現。比如硬件上MPU(MemoryProtectionUnits)功能的芯片。

 

內存保護方案基於可執行程序的(data、code和stack)區域。

 

Stack: 一個OS-Application由若干個對象(Task和ISR)組成,根據定義,棧(Stack)是隻屬於這些對象(Object)自己本身的,因此不需要在對象間共享數據,即使這些對象屬於同一個OS-Application。

對於任務和中斷的棧的保護是非常有用的,主要有兩個原因:

  1. 與棧監測(stack monitoring)功能相比,爲任務和中斷提供更即時的棧溢出(包括上溢和下溢)檢測。
  2. 提供OS-Application之間的保護,例如滿足某些安全約束。

 

Data: OS-Application有自己的私有數據(Data)區,任務和中斷也有自己的私有數據區,OS-Application的私有數據部分被屬於它的任務和中斷所共享。

 

Code: 代碼(Code)段要麼是OS-Application的私有部分,要麼可以在所有的OS-Application之間共享(使用共享庫)。在不使用代碼段保護的情況下,執行不正確的代碼將導致內存、時序或服務衝突。

2 需求

即規範要求哪些內容需要保護。

 

數據區和棧

 

(1)OS應防止不可信的OS-Application對自己的數據區和棧區(即內核的數據和棧)進行寫訪問。

 

(2)OS應提供一種選擇,是否限制可信OS-Application的寫訪問,其方式與限制不可信OS-Application的方式相同。

 

可以通過設置一個OsTrustedApplicationWithProtection配置項進行選擇。

 

OS-Application的私有數據

 

(1)OS可能會阻止其他不可信OS-Application嘗試讀取一個OS-Application的數據區。

 

(2)OS應允許OS-Application對自己的私有數據進行讀寫訪問。

 

(3)OS應防止其他不可信OS-Application對一個OS-Application的私有數據進行寫訪問。

 

中斷/任務的私有棧

 

(1)OS應允許任務/2類中斷對自己的私有棧進行寫訪問。

 

(2)OS可以防止不可信OS-Application中的任務/2類中斷的私有棧被同一OS-Application下的其他任務/2類中斷對其進行寫訪問。

 

(3)OS應該防止其他不可信的OS-Application對一個OS-Application中的任務/2類中斷的私有棧進行寫訪問。

 

中斷/任務的私有數據

 

(1)OS應允許任務/2類中斷對自己的私有數據區進行寫訪問。

 

(2)OS可以防止不可信OS-Application中的任務/2類中斷的私有數據區被同一OS-Application下的其他任務/2類中斷對其進行寫訪問。

 

(3)OS應該防止其他不可信的OS-Application對一個OS-Application中的任務/2類中斷的私有數據區進行寫訪問。

 

代碼區

 

(1)OS可以提供一種保護能力,保護一個OS-Application的代碼段不被不可信OS-Application執行。

 

(2)OS應該可以對所有OS-Application都可執行的代碼區提供共享代碼庫。

 

外設

 

(1)如果OsTrustedApplicationWithProtection == FALSE,則OS應允許可信OS-Application對外設進行讀寫訪問。

 

(2)OS應允許不可信OS-Application僅向非配給它的外設寫入數據(包括一些可以引起寫內存區域的讀操作)。

 

觸發內存訪問錯誤

 

如果檢測到內存訪問錯誤,OS應調用Protection Hook接口,其錯誤碼爲E_OS_PROTECTION_MEMORY。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章