当前位置 : 主页 > 编程语言 > java >

【文献心得】内存隔离技术

来源:互联网 收集:自由互联 发布时间:2022-06-23
实时性、uc/OS-Ⅱ、空间域隔离、动态内存分配、隔离域间通信 文章目录 ​​[1]闫广明. 嵌入式系统内存空间域隔离技术的研究与实现[D].哈尔滨工程大学,2011.​​ ​​国外研究现状​​

实时性、uc/OS-Ⅱ、空间域隔离、动态内存分配、隔离域间通信


文章目录

  • ​​[1]闫广明. 嵌入式系统内存空间域隔离技术的研究与实现[D].哈尔滨工程大学,2011.​​
  • ​​国外研究现状​​
  • ​​国内研究现状​​
  • ​​内存空间域隔离技术​​
  • ​​段保护技术[8]​​
  • ​​段匹配技术​​
  • ​​地址沙箱技术[7]​​
  • ​​基于MMU或MPU的页表技术​​


[1]闫广明. 嵌入式系统内存空间域隔离技术的研究与实现[D].哈尔滨工程大学,2011.

如何利用MMU在不影响实时性的前提下实现嵌入式系统中各个任务之间的隔离保护。 为了满足嵌入式操作系统对可靠性和实时性的要求,需要一种能够适用于嵌入式操作系统的、具有隔离保护功能的、实时性好的内存管理模块。

国外研究现状

无MMU:

  • 利用静态源代码分析来检测内存访问冲突、指针越界和非法跳转进而实现任务间的隔离,没有实现真正的内存保护,无法解决程序运行期间访问非法内存地址的问题[5,6]。
  • 基于软件技术的动态故障隔离技术[7]。对软件模块分区,把不可信模块加载到容错分区中;改进编译后的目标代码,将在容错分区中不安全的间接跳转或间接读写指令前填充判断代码,防止此分区内指令访问其它分区内容。软件实现难度大,需要对机器代码二次编译,涉及到大量的汇编代码插入,不宜移植,会恶化系统的实时性。
  • uCLinux 是基于 Linux 的嵌入式操作系统,为了满足低端的微控制器,无 MMU,屏蔽了 Linux 的虚拟内存机制,系统运行在实地址上,内核和应用程序运行在同一特权级上,相互没有隔离,这就导致任何应用程序的运行错误可能会对其它应用程序或内核造成影响。并不是高可靠的嵌入式操作系统。
    Linux 虽然可以应用在具有 MMU 的嵌入式系统中,但传统 Linux 的内存管理和保护机制是面对平均访问情况设计的,实时性很差,通过改进有 RTLinux 和 L4Linux。

    具有MMU:在嵌入式系统上实现内存保护机制不仅要考虑应用程序的隔离,还要考虑系统实时性的问题。

  • 基于硬件MMU和外存交换技术的的虚拟内存保护技术(分段和分页机制来实现任务间的隔离)。这种内存保护技术己经在服务器操作系统和桌面操作系统中得到了大量应用,但存在任务切换时间不确定,实时性差等缺点,无法直接应用在嵌入式操作系统中。
  • RTLinux 采用实时任务与内核共享内核空间的方式。非实时任务运行在用户空间。内核空间与用户空间之间采用和特权级机制进行隔离。这样用户空间的运行错误不会影响到实时任务的运行,起到了一定的隔离保护作用。但是实时任务与内核之间却没有任何保护,当实时任务出错时会影响到整个系统的稳定性。所以也不能满足嵌入式操作系统对可靠性的全部要求。
  • [16] 一方面解决传统内存保护粒度过粗问题(传统的内存保护都是以页为基础的),能精确到字一级的访问保护,通过在内存中建立每个内存地址的访问权限表,每次内存访问都要通过此表的权限检查,若不通过则抛出异常;另一方面加快权限的验证速度,对现有的 MMU 进行改造,加入权限表高速缓存,把常用的访问权限表放在缓存中,当访问某个内存地址时只需要访问权限表缓存即可迅速获得此地址的权限,不需要再次访问内存中的权限表了,减少访存次数,这种细粒度的内存保护方法需要改进现有 CPU 硬件,CPU 需要集成此类高速缓存。类似方法还有:Linux 内核多尺寸页的保护[17],[18] 将精细内存保护应用到基于权能的实时系统上。
  • uc/OS-Ⅱ 是一种面向嵌入式系统的实时操作系统,具有实时性强、体积小、移植方便、代码清晰、可裁剪、易于扩展的特点,但其内存管理过于简单,任务间没有任何保护,且核心任务实现结构多采用全局变量来实现,无法保障各个任务间的安全性,使其很难应用在安全关键系统场合。uc/OS-Ⅲ 加入了基于 MMU 的空间隔离模块 uC/MMU,但由于其为商业软件,具体实现技术未公开。
  • ARINC653 标准:阐述模块化综合航空电子设备使用的应用软件的基础操作环境,定义航空应用与下层操作环境之间的接口和数据交换的模式以及服务的行为,并描述嵌入式航空电子软件的运行环境,其中特别提到的是在安全关键系统中必需使用空间隔离和时间隔离技术来保障多任务环境下的各个任务之间的安全。此规范成为了绝大多数安全关键系统的事实标准。很多著名的安全关键系统软件公司都在此标准基础上开发了新的嵌入式操作系统以适用于各种安全关键系统。

    国内研究现状

  • DeltaOS。国产的高可靠嵌入式实时操作系统,可以嵌入到以 32 位微控制器为核心的各种智能设备中,作为应用程序的支撑环境。特别是其已经被成功应用于航空/航天的高可靠性设备。据报道该操作系统于2005年进行了升级,加入了符合 ARINC653 规范的高可靠模块并使用MMU实现物理空间隔离。
  • EOSnux。以 Linux 操作为蓝本,不适合实时性要求高的嵌入式系统。
  • Hopen OS。北京凯思昊鹏软件工程技术有限公司自主研发的一款嵌入式实时操作系统,其核心一般为左右。其特点是占用空间小、实时性好、易于定制、支持多任务和多线程。但其任务间并无任何保护措施,并不是高可靠的嵌入式操作系统。
  • 实验室方案:

  • 熊光泽等学者在其开发的S-CRTOS系统上借鉴ARINC653思想,实现了基于空间和时间隔离保护机制[23]。S-CRTOS主要采用两种方式来实现应用与内核以及应用之间的隔离和保护,第一种方式是使用MMU,第二种方式是TRAP系统调用。但对其实现方法和系统实时性未作深入说明。
  • 龚育昌、唐玲等学者在分析现有操作系统安全机制的基础上,针对空间隔离技术的不足之处,提出了功能隔离的新思想[24]。功能隔离可以提供更细致的隔离粒度,并可使不同类别的功能请求在相互隔离的执行域中执行,从而提高系统的可靠性与安全性。但该思想主要面向访问的安全性,对系统的实时性影响未做讨论。而在嵌入式系统中不仅要满足安全性要求,实时性也必须要考虑。
  • 学者欧庆于证明了在分区内核系统中,其隔离安全性通过系统层层结构中的分区隔离机制能够得到实现[25]。
  • 提出了一种在 ARM9 等有 MMU 的微控制器上实现具有空间域隔离功能的嵌入式操作系统模型。
    + 在空间域上采用硬分区思想实现进程之间、进程与内核间、进程与空闲内存间、线程与其堆栈间的隔离;
    + 通过资源预留机制保障关键任务的内存需求,通过内存限额机制防止恶意进程占用大量内存;
    + 在时间域上采用两级调度,进程间采用抢占式调度,保障高优先级任务的实时性;
    + 在内存管理上,本系统采用两级内存管理来提高内存的使用效率和管理的实时性;
    + 进程内部采用 TLSF 算法进行动态内存管理,保证了内存分配的实时性和低碎片性;
    + 在进程间采用固定分区大小的动态内存管理方式,保证了实时性和隔离性;
    + 简化了MAC机制以实现具有实时性的I/O访问保护。在保证实时性的前提下提高了I/O空间的访问安全性;

    内存空间域隔离技术

  • 基于软件的隔离技术
    • 段保护技术
    • 段匹配技术
    • 地址沙箱技术
  • 基于硬件与软件的隔离技术
    • 基于MMU或MPU的页表技术

    段保护技术[8]

    代码段、数据段、堆栈段和全局段。

    这种技术对于缺少虚拟内存的嵌入式系统而言,通过提供一个完整的自动软件技术实现了段保护,提高了系统的可靠性。

    在目标代码中的内存访问指令前插入优化过的运行时检测代码,如果发现要访问的段地址与当前段寄存器冲突,则抛出异常,并在系统失效或崩溃前做出矫正动作。

    实现方法与具体硬件结构和机器语言息息相关,很难有良好的移植性。

    段匹配技术

    把嵌入式系统中的指令分为安全指令和不安全指令。针对不安全指令(跳转指令、访存指令)进行检查。

    不安全指令可分为:可静态验证的指令(不通过运行就可确定其访问地址的指令)和不可静态验证的指令(其访问地址在程序运行时可能变化的指令)。

    • 可静态验证的指令(可直接修改目标代码的相关指令,保证不会访问非法的内存区域):直接转移指令(goto、call)、存储静态变量经常使用立即地址模式、
    • 不能静态验证的指令(需要在每一个不安全的指令前插入检验代码,检测目标地址):有些通过寄存器等寻址方式间接跳转的指令、用寄存器存储的目标地址、

    该技术需要四个专门的寄存器(可以通过重定向编译器,使用对性能影响较小的寄存器集):1. 存储指令地址、2. 存储数据地址、3. 存储段位移量、4. 存储段标识符

    该技术采用了指令分类操作和专用寄存器方式,能够进一步提高软件隔离技术的执行效率。由于其专用寄存器的使用依赖于具体编译器,很多商业编译器是不公开源码的,且该技术与特定处理器相关,移植困难。

    地址沙箱技术[7]

    在段匹配技术的基础上通过不提供故障处理能力来提高运行效率。

    在段匹配技术中,把每一个不安全指令的插入代码中的地址高位填充为预定的段标识符,地址填充并不捕捉非法地址,它仅仅阻止影响的扩散,保证当前任务的访存地址都在本段内部。地址填充需要在每一个不安全的存储或跳转指令前插入两条算术指令:1. 清除段标识符位并把结果存储到专用寄存器 2. 设置段标识符的正确值。

    需要五个专门的寄存器。

    地址沙箱技术能够进一步减小软件的开销,无论是地址沙箱技术、段保护、还是段匹配技术都会影响原有程序的执行时间,会恶化系统的实时性。

    基于MMU或MPU的页表技术

  • 虚拟地址到物理地址的映射。
  • 提供硬件机制的存储器访问授权。
  • 内存中的每个页表项都可以设定对某内存区的访问权限,当访问不可访问权限的存储器时,会有一个存储器异常通知处理器。系统软件可以捕获这个异常来判断是否有非法的存储器访问。可以捕获和处理这种异常来实现空间域保护。

  • 位图法
  • 一般用在内存保护单元中,实现物理内存的权限控制,将物理内存分成几个区域,每个区域通过内存管理单元中的特定寄存器决定其访问权限。访问权限一般包括读、写、可执行,灵活性差,在高端MMU中已摒弃。

  • 分页法
  • 分段法
  • 多级分页法
  • 段页法
  • 短路段树法
  • 以上的方法虽然都能够实现内存保护和隔离,但是并不是都适合嵌入式操作系统,尤其是实时操作系统,因为嵌入式操作系统往往都有多任务和实时性要求。因此在进行嵌入式系统设计时还是需要根据系统规模的大小和实时性的要求来决定使用何种方法。若每个任务内存空间要求不高,则使用分页法能够满足嵌入式操作系统对多任务和实时性的需求。若每个任务内存空间要求较高,则建议使用分段法或者段页法。


    上一篇:常见的开源协议的主要差异
    下一篇:没有了
    网友评论