实时性、uc/OS-Ⅱ、空间域隔离、动态内存分配、隔离域间通信
文章目录
- [1]闫广明. 嵌入式系统内存空间域隔离技术的研究与实现[D].哈尔滨工程大学,2011.
- 国外研究现状
- 国内研究现状
- 内存空间域隔离技术
- 段保护技术[8]
- 段匹配技术
- 地址沙箱技术[7]
- 基于MMU或MPU的页表技术
[1]闫广明. 嵌入式系统内存空间域隔离技术的研究与实现[D].哈尔滨工程大学,2011.
如何利用MMU在不影响实时性的前提下实现嵌入式系统中各个任务之间的隔离保护。 为了满足嵌入式操作系统对可靠性和实时性的要求,需要一种能够适用于嵌入式操作系统的、具有隔离保护功能的、实时性好的内存管理模块。
国外研究现状
无MMU:
uCLinux 是基于 Linux 的嵌入式操作系统,为了满足低端的微控制器,无 MMU,屏蔽了 Linux 的虚拟内存机制,系统运行在实地址上,内核和应用程序运行在同一特权级上,相互没有隔离,这就导致任何应用程序的运行错误可能会对其它应用程序或内核造成影响。并不是高可靠的嵌入式操作系统。
Linux 虽然可以应用在具有 MMU 的嵌入式系统中,但传统 Linux 的内存管理和保护机制是面对平均访问情况设计的,实时性很差,通过改进有 RTLinux 和 L4Linux。
具有MMU:在嵌入式系统上实现内存保护机制不仅要考虑应用程序的隔离,还要考虑系统实时性的问题。
ARINC653 标准:阐述模块化综合航空电子设备使用的应用软件的基础操作环境,定义航空应用与下层操作环境之间的接口和数据交换的模式以及服务的行为,并描述嵌入式航空电子软件的运行环境,其中特别提到的是在安全关键系统中必需使用空间隔离和时间隔离技术来保障多任务环境下的各个任务之间的安全。此规范成为了绝大多数安全关键系统的事实标准。很多著名的安全关键系统软件公司都在此标准基础上开发了新的嵌入式操作系统以适用于各种安全关键系统。
国内研究现状
实验室方案:
+ 在空间域上采用硬分区思想实现进程之间、进程与内核间、进程与空闲内存间、线程与其堆栈间的隔离;
+ 通过资源预留机制保障关键任务的内存需求,通过内存限额机制防止恶意进程占用大量内存;
+ 在时间域上采用两级调度,进程间采用抢占式调度,保障高优先级任务的实时性;
+ 在内存管理上,本系统采用两级内存管理来提高内存的使用效率和管理的实时性;
+ 进程内部采用 TLSF 算法进行动态内存管理,保证了内存分配的实时性和低碎片性;
+ 在进程间采用固定分区大小的动态内存管理方式,保证了实时性和隔离性;
+ 简化了MAC机制以实现具有实时性的I/O访问保护。在保证实时性的前提下提高了I/O空间的访问安全性;
内存空间域隔离技术
- 段保护技术
- 段匹配技术
- 地址沙箱技术
- 基于MMU或MPU的页表技术
段保护技术[8]
代码段、数据段、堆栈段和全局段。
这种技术对于缺少虚拟内存的嵌入式系统而言,通过提供一个完整的自动软件技术实现了段保护,提高了系统的可靠性。
在目标代码中的内存访问指令前插入优化过的运行时检测代码,如果发现要访问的段地址与当前段寄存器冲突,则抛出异常,并在系统失效或崩溃前做出矫正动作。
实现方法与具体硬件结构和机器语言息息相关,很难有良好的移植性。
段匹配技术
把嵌入式系统中的指令分为安全指令和不安全指令。针对不安全指令(跳转指令、访存指令)进行检查。
不安全指令可分为:可静态验证的指令(不通过运行就可确定其访问地址的指令)和不可静态验证的指令(其访问地址在程序运行时可能变化的指令)。
- 可静态验证的指令(可直接修改目标代码的相关指令,保证不会访问非法的内存区域):直接转移指令(goto、call)、存储静态变量经常使用立即地址模式、
- 不能静态验证的指令(需要在每一个不安全的指令前插入检验代码,检测目标地址):有些通过寄存器等寻址方式间接跳转的指令、用寄存器存储的目标地址、
该技术需要四个专门的寄存器(可以通过重定向编译器,使用对性能影响较小的寄存器集):1. 存储指令地址、2. 存储数据地址、3. 存储段位移量、4. 存储段标识符
该技术采用了指令分类操作和专用寄存器方式,能够进一步提高软件隔离技术的执行效率。由于其专用寄存器的使用依赖于具体编译器,很多商业编译器是不公开源码的,且该技术与特定处理器相关,移植困难。
地址沙箱技术[7]
在段匹配技术的基础上通过不提供故障处理能力来提高运行效率。
在段匹配技术中,把每一个不安全指令的插入代码中的地址高位填充为预定的段标识符,地址填充并不捕捉非法地址,它仅仅阻止影响的扩散,保证当前任务的访存地址都在本段内部。地址填充需要在每一个不安全的存储或跳转指令前插入两条算术指令:1. 清除段标识符位并把结果存储到专用寄存器 2. 设置段标识符的正确值。
需要五个专门的寄存器。
地址沙箱技术能够进一步减小软件的开销,无论是地址沙箱技术、段保护、还是段匹配技术都会影响原有程序的执行时间,会恶化系统的实时性。
基于MMU或MPU的页表技术
内存中的每个页表项都可以设定对某内存区的访问权限,当访问不可访问权限的存储器时,会有一个存储器异常通知处理器。系统软件可以捕获这个异常来判断是否有非法的存储器访问。可以捕获和处理这种异常来实现空间域保护。
一般用在内存保护单元中,实现物理内存的权限控制,将物理内存分成几个区域,每个区域通过内存管理单元中的特定寄存器决定其访问权限。访问权限一般包括读、写、可执行,灵活性差,在高端MMU中已摒弃。
以上的方法虽然都能够实现内存保护和隔离,但是并不是都适合嵌入式操作系统,尤其是实时操作系统,因为嵌入式操作系统往往都有多任务和实时性要求。因此在进行嵌入式系统设计时还是需要根据系统规模的大小和实时性的要求来决定使用何种方法。若每个任务内存空间要求不高,则使用分页法能够满足嵌入式操作系统对多任务和实时性的需求。若每个任务内存空间要求较高,则建议使用分段法或者段页法。