引用AUTOSAR_SWS_OS.pdf(7.7.1)
背景与原理(Background & Rationale)
内存保护(Memory protection)只能在为内存保护提供硬件支持的处理器上实现。比如硬件上MPU(MemoryProtectionUnits)功能的芯片。
内存保护方案基于可执行程序的(data、code和stack)区域。
Stack: 一个OS-Application由若干个对象(Task和ISR)组成,根据定义,这些对象的栈(Stack)只属于这些对象(Object)自己本身的,因此不需要在对象间共享数据,即使那些对象属于同一个OS-Application。
对于任务和中断的栈的内存保护是非常有用的,主要有两个原因:
- 与栈监测(stack monitoring)功能相比,为任务和中断提供更及时的栈溢出(包括上溢和下溢)检测。
- 提供OS-Application之间的保护,例如满足某些安全约束。
Data: OS-Application有自己的私有数据(Data)区,任务和中断也有自己的私有数据区,OS-Application的私有数据部分被所属它的所有任务和中断共享。
Code: 代码(Code)段要么是OS-Application的私有部分,要么可以在所有的OS-Application之间共享(使用共享库)。在不使用代码段保护的情况下,执行不正确的代码将导致内存、时序或服务冲突。
需求(Requirements)
规定哪些内容需要保护
数据区和栈(Data Sections and Stack)
[SWS_Os_00198] OS应阻止不受信任的OS-Applications对自己的数据区和栈区(即内核的数据和栈)进行写访问。
[SWS_Os_00795] OS应提供一种选择,是否限制受信任的OS-Application的写访问,其方式与限制不受信任的OS-Application相同。(SRS_Os_11005)
这个可以通过<OsTrustedApplicationWithProtection>配置项进行配置选择。
OS-Application私有数据(Private data of an OS-Application)
[SWS_Os_00026] OS可能会阻止其他不受信任的OS-Applications尝试读取一个OS-Application的数据区。(SRS_Os_11000)
[SWS_Os_00086] OS应允许OS-Application对自己的私有数据区进行读写访问。(SRS_Os_11006)
[SWS_Os_00207] OS应阻止其他不受信任的OS-Application对一个OS-Application的私有数据区进行写访问。(SRS_Os_11005)
中断/任务的私有栈(Private Stack of Task/ISR)
[SWS_Os_00196] OS应允许任务/2类中断对自己的私有栈进行读写访问。(SRS_Os_11006)
[SWS_Os_00208] OS可以阻止不受信任的OS-Application中的任务/2类中断的私有栈被该不受信任的OS-Application(同一OS-Application)中的其他任务/中断对其进行写访问。(SRS_Os_11005)
[SWS_Os_00355] OS应该阻止其他不受信任的OS-Applications对一个OS-Application中的任务/2类中断的私有栈进行写访问。
中断/任务的私有数据(Private data of a Task/ISR)
[SWS_Os_00087] OS应允许任务/2类中断对自己的私有数据区进行读写访问。(SRS_Os_11006)
[SWS_Os_00195] OS可以阻止不受信任的OS-Application中的任务/2类中断的私有数据区被该不受信任的OS-Application(同一OS-Application)中的其他任务/中断对其进行写访问。(SRS_Os_11005)
[SWS_Os_00356] OS应该阻止其他不受信任的OS-Application对一个OS-Application中的任务/2类中断的私有数据区进行写访问。
代码区(Code Sections)
[SWS_Os_00027] OS可以提供一种保护能力,保护一个OS-Application的代码段不被不受信任的OS-Application执行。
[SWS_Os_00081] OS应该可以对所有OS-Application都可执行的代码区提供共享代码库。(SRS_Os_11007)
外设(Peripherals)
[SWS_Os_00209] 如果<OsTrustedApplicationWithProtection == FALSE>,则OS应允许受信任的OS-Applications对外设进行读写访问。
[SWS_Os_00083] OS应允许不受信任的OS-Application仅向分配给它的外设写入数据(包括一些可以引起写内存区域的读操作)。
触发内存访问错误(Memory Access Violation)
如果检测到内存访问冲突,OS应调用Protection Hook接口,其错误码为E_OS_PROTECTION_MEMORY。(SRS_Os_11013)
要点归纳
- 内存保护(Memory Protection)只能在提供内存保护硬件支持的处理器上实现(芯片提供MPU功能(MemoryProtectionUnits))。
- MPU作用是根据总线上的信息对访问的合法性进行判断,其中指令信息包括地址、操作符。