• 85查看
  • 0回复

[Autosar] 谈一谈Autosar OS的内存保护机制

[复制链接]

该用户从未签到

发表于 25-4-2024 20:01:40 | 显示全部楼层 |阅读模式

汽车零部件采购、销售通信录       填写你的培训需求,我们帮你找      招募汽车专业培训老师


在<<盘点Autosar OS和其他OS的栈监测机制>>一文中我们介绍了Autosar OS和FreeRTOS的栈监测原理。这些OS通常的方法是在栈底填充字节或者比较当前栈指针和栈底值大小来监测的,两种方法都有一定概率无法检测到栈溢出。那么有没有其他方法可以完全监测呢?另外,我们知道一些任务、中断等组成了Application,那么可以限制各个Application的访问区域么?这些都是本文谈论的重点。Autosar OS将OS的等级进行了划分:SC1、SC2、SC3和SC4,这4个等级支持的服务如下所示。
谈一谈Autosar OS的内存保护机制w1.jpg

由此可见在SC3或者SC4时,OS即支持了内存保护(Memory Protetion).而这个功能需要单片机的MPU(Memory Protection Unit)的支持,这个模块主要用来配置不同存储器区域的存储器访问权限(如只支持特权访问或全访问)和存储器属性(如可缓冲、可缓存)。以Cortex-M3和Cortex-M4处理器为例,其内部带有的MPU支持8个可编程存储器区域,每个都具有自己可编程的起始地址、大小及设置,另外还支持一种背景区域特性。那么如何将OS和MPU结合在一起呢?
1 栈监测
我们可以将栈底部的一部分区域通过MPU设置为不可访问的(如下图所示),以检测栈溢出。
谈一谈Autosar OS的内存保护机制w2.jpg

在OS的运行过程中,MPU一直监测当前的活动栈。由于MPU设置了栈底区域不可写,因此不会发生栈溢出了。当数据写到MPU设置的区域时,OS会触发ProtectionHook的钩子函数来告知用户。

2 Application间的数据交互
在Trusted Os-Applications中的任务和中断可以无限制的访问所有允许的内存区域,而属于Untrusted and Trusted-With-Protection Os-Applications的任务和中断可以无限制的访问自己Application内部的数据和位置,但是它们被限制访问其他Application上的内容,如下图所示。
谈一谈Autosar OS的内存保护机制w3.jpg

在Autosar中通过MemMap机制来将各个任务、中断等Application的部分定义在用户所需的区域,如下图所示。
谈一谈Autosar OS的内存保护机制w4.jpg

Autosar在OS_MemMap.h中将定义函数或者变量使用的宏定义映射到不同的段,如下所示。
谈一谈Autosar OS的内存保护机制w5.jpg

3 任务的访问权限
我们还可以定义存储器的访问权限,使得应用任务只能访问有限的外设和内存。因此我们可以通过每次上下文切换时配置MPU,每个任务拥有不同的MPU配置来实现。
4 使用建议
1)中断处理和OS内核的代码和数据应该设置为特权模式才能访问,即Untrusted and Trusted-With-Protection Os-Applications不能访问;2)非特权应用的代码和数据(Untrusted andTrusted-With-Protection Os-Applications)为全访问;3)OS使用的外设(如定时器)设置为特权访问。

快速发帖

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|Archiver|汽车工程师之家 ( 渝ICP备18012993号-1 )

GMT+8, 5-5-2024 13:16 , Processed in 0.207766 second(s), 30 queries .

Powered by Discuz! X3.5

© 2001-2013 Comsenz Inc.