SC1 | SC2 | SC3 | SC4 | |
---|---|---|---|---|
支持多核 | 支持 | 支持 | 支持 | 支持 |
内存保护 | — | — | 支持 | 支持 |
时间保护 | — | 支持 | — | 支持 |
调度表 | 支持 | 支持 | 支持 | 支持 |
OSEK OS | 支持 | 支持 | 支持 | 支持 |
OS通过MPU(Memory Protection Unit)监控内存的访问权限,将相关Object分为两级:1)、受信任的Object—读写大部分内存的权限,但无读取未激活的栈区的权限;2)、非受信任的Object—读取少数内存的权限,包含当前活跃的栈、当前OS Application的数据以及LMU中的共享数据。
每一个OS Application和其中的OS Object都有各自的私有栈,不同的OS Object无需存在共享栈。操作系统禁止非可信OS-Application对自己的任务栈进行写操作,允许任务或者二类中断处理程序对私有任务栈进行读写操作,但禁止非可信OS-Application内的其他任务/中断对私有任务栈进行写操作。栈保护能够更为快速的检测出栈溢出以及非法访问,同时栈保护也是划分OS Application的一种方式和依据。
OS Application和其中的OS Object都有各自的私有数据,OS Application的私有数据从属于该OS Application的Objects的共享数据区。操作系统禁止非可信OS-Application对自己的数据段进行写操作,并禁止对另一个OS-Application的数据段进行读(可选)/写操作,但允许对自己的私有数据段的读写操作。
代码区既可以为OS Application所私有,也可以被共享。在没有代码保护的情况下,错误的代码执行会导致内存、时间和服务上的错误。
内存分区可以实现免干扰(FFI:Freedom From Interface, 参考ISO 26262),需要确保以下几点:
1)、共享资源在使用时需要利用软件分区确保FFI
a)、在软件分区内的任务不会彼此之间相互干扰
b)、一个软件分区不能更改其他软件分区的代码或数据,也不能控制其他分区上的共享资源
c)、来自一个分区的共享资源服务不能受另一个软件分区的影响,这也包括在访问资源时对性能和调度延时等方面造成负面影响
2)、软件分区有专用的硬件特性或等效手段予以支持
3)、实现软件分区的软件应该遵循相同或者高于最高ASIL等级要求
软件分区依据需要综合考虑软件模块之间的关联性、功能安全等级等相关内容。软件上是通过OS-Application的概念实现,将不同的OS-Application映射到不同的内存分区上,通过这种方式比避免OS-Application之间的相互影响,并且出现错误可以将相应的OS-Application进行终止或者重新启动(可单独为每一个OS-Application设置恢复策略)
#存储空间的访问控制依赖于OS的存储保护模块(SC3/SC4),并且要求硬件存在内存保护单元(Memory Protection Unit, MPU)
单纯采用截止时间不能反映该任务的具体执行过程以及出现超时的原因,在OS中存在基于任务优先级的抢占调度方式、资源存在锁定的情况以及任务之间的间隔执行时间等影响因素,从而导致在出现超时时无法锁定具体的原因(如下图所示)。
因此OS在进行时间监控时针对以上情况采用了以下措施:
1)、任务/二类中断设置了执行时间上限(如下图所示);
2)、一类中断锁定时间上限(资源锁定);
3)、二类中断锁定时间上限(资源锁定);
4)、以及两次调用之间的时间间隔最小值(如下图所示);