首页> 中国专利> 一种嵌入式系统内存安全访问控制的技术实现方法

一种嵌入式系统内存安全访问控制的技术实现方法

摘要

本发明公开了一种嵌入式系统内存安全访问控制的技术实现方法,包括以下步骤:1)内存安全访问机制的系统初始化设计:引入MPU内存保护单元,分配不同等级的区域属性,设定访问属性,设置系统初始化流程;2)嵌入式操作系统进程上下文切换的内存安全访问设计:设置区域控制模块,设置系统进程上下文,并在区域控制模块内进行系统进程上下文的切换。本发明实现了通过处理器MPU硬件机制来检测和限制系统各地址空间资源的非法访问;实现了嵌入式实时多任务操作系统任何一个任务非法访问其他任务资源的边界控制及上下文切换;实现了系统中不同存储空间cache、写缓冲及MPU属性的分配和设计,确保内存各背景区域安全访问控制。

著录项

  • 公开/公告号CN105787360A

    专利类型发明专利

  • 公开/公告日2016-07-20

    原文格式PDF

  • 申请/专利权人 杭州字节信息技术有限公司;

    申请/专利号CN201610118357.9

  • 发明设计人 毛伟信;赵疆华;

    申请日2016-03-02

  • 分类号G06F21/52(20130101);G06F21/74(20130101);

  • 代理机构北京科亿知识产权代理事务所(普通合伙);

  • 代理人汤东凤

  • 地址 311422 浙江省杭州市富阳市银湖街道富闲路9号银湖创新中心15号四层

  • 入库时间 2023-06-19 00:08:08

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2019-01-04

    授权

    授权

  • 2016-08-17

    实质审查的生效 IPC(主分类):G06F21/52 申请日:20160302

    实质审查的生效

  • 2016-07-20

    公开

    公开

说明书

技术领域

本发明涉及嵌入式系统领域,具体涉及一种嵌入式系统内存安全访问控 制的技术实现方法。

背景技术

嵌入式系统运行环境差异很大,系统硬件和软件都必须在稳定、安全、 可靠的基础上量体裁衣,去除冗余,力争用较少的软硬件资源实现较高的性 能。在嵌入式实时系统中,内存管理根据不同的系统,有不同的策略,一般 的系统通常都通过软件机制实现简单的内存管理,以实现对堆和栈的访问控 制,比如跨界访问、内存泄露等,如图1所示。

一般嵌入式系统采用实存储管理策略,对内存的访问是直接的,它对地 址的访问不需要经过MMU,而是直接送到地址线上输出,所有程序中访问地 址都是实际的物理地址。在多任务的系统中,通常要运行操作系统来达到任 务间同步与通信。这些系统必须提供一种机制来保证正在运行的任务不破坏 其他任务的操作,这种资源保护通常由操作系统来完成。但这种通过软件来 协调任务运行,保护系统资源的做法有时会出现一些不可避免的问题。例如, 当对一个通信用UART寄存器进行操作时,如果一个任务正在使用UART,则 它没有办法来防止其他任务使用同一个UART,很容易破坏该UART的通信。 因此资源的不合理使用也许是不可避免的。

在无硬件保护的内存管理系统中,任何一个任务都可能破坏其他任务的 状态,因此每个任务在访问系统资源时都必须与其他任务进行仲裁,逻辑复 杂,执行效率低下。

大多数软件内存管理设计主要是针对内存碎片管理和内存泄露问题,而 没有解决当前进程非法访问系统资源及其他进程的问题,即没有从根本上解 决内存管理安全问题。在MMU内存管理单元中,虽然有硬件访问权限保护, 但虚拟内存机制会导致不确定性的I/O阻塞时间,使得程序运行时间不可预 期,这是实时嵌入式系统的致命缺陷。

发明内容

针对以上缺点,本设计提供一种嵌入式系统内存安全访问控制的技术实 现方法,包括以下步骤:

1)内存安全访问机制的系统初始化设计:在嵌入式系统中引入MPU内存 保护单元,对内存区域分配不同等级的区域属性,对协处理器的寄存器设定 访问属性,设置系统初始化流程;

2)嵌入式操作系统进程上下文切换的内存安全访问设计:设置区域控制 模块,并在区域控制模块内设置系统进程上下文,并在区域控制模块内进行 系统进程上下文的切换。

进一步的,所述步骤1)中区域属性包括背景域、系统共享域、运行任 务域、睡眠任务域和设备I/O域。

进一步的,所述区域属性的优先等级为:背景域=睡眠任务域<系统共享 域<运行任务域<设备I/O域。

进一步的,所述步骤1)中访问属性包括Cache、Buffer和AP(Access Permission)的属性。

进一步的,所述步骤1)中系统初始化流程为:判断MPU的存在——禁止 使能MPU——选择Region并写入基址和配置信息——允许使能MPU。

进一步的,所述步骤2)中区域控制模块内设置有用户级上下文、寄存 器上下文和系统级上下文。

进一步的,所述用户级上下文包括正文,数据,用户堆栈和共享存储区; 所述寄存器上下文包括通用寄存器,程序寄存器,处理器状态寄存器和栈指 针;所述系统级上下文包括进程控制块、内存管理信息和内核栈。

进一步的,所述步骤2)中系统进程上下文的切换为将原进程更改成低 级别的区域属性,再将待运作进程更改为高级别的区域属性。

与目前现有内存保护机制相比较,本设计发明针对嵌入式实时操作系统 的特性进行了调整,相比较无内存保护的系统,增加了区域访问权限控制, 保证了系统内存资源访问的安全性。同时,在操作系统进程或线程切换时, 利用MPU的区域访问控制特性,实现了当前线程或进程和背景线程或进程的 内存区域属性的动态切换,确保了当前线程或进程栈空间的合法访问,防止 其他线程或进程非法程序的非法访问或篡改。从软件上不仅提供了内存碎片 管理和内存泄露的管理策略,使程序能够更加充分的利用系统资源;基于硬 件处理器内核的MPU及CACHE机制提供了进程快速切换上下文的方法,在进 程切换的控制策略上有更多的发挥空间;在硬件上还提供了快速有效的区域 权限访问策略。本发明通过软硬件结合的设计,既解决了内存访问安全问题, 又提高了系统效率。

本设计实现通过物理和逻辑设计的结合,既提供了可靠的系统内存安全 访问机制,防止系统内存资源及操作系统任务栈被非法访问,又极大地减少 了操作系统线程或进程切换上下文所产生的CPU时间片消耗。相比较一般的 内存保护机制,本设计基于处理器特有的MPU、CACHE及写缓冲区域保护机制 的系统内存安全访问控制实现更可靠、安全、高效。

本设计针对嵌入式实时系统的内存安全访问问题,采用软硬件结合的设 计策略,实现了系统内存分区管理、动态安全访问控制等系统安全策略。利 用系统内存控制区域属性的动态切换,保证了系统内存空间资源及操作系统 任务堆栈空间的可信、安全访问,防止非法篡改。同时,也保证操作系统多 任务切换不引起系统的IO堵塞,以及程序执行的可预测性和实时性。

本发明一种嵌入式系统内存安全访问控制的技术实现方法的有益效果 有:

1、本设计实现了通过处理器MPU硬件机制来检测和限制系统各地址空间 资源的非法访问;

2、本设计实现了嵌入式实时多任务操作系统任何一个任务非法访问其他 任务资源的边界控制及上下文切换;

3、设计实现了系统中不同存储空间cache、写缓冲及MPU属性的分配和 设计,确保内存各背景区域安全访问控制。

附图说明

图1为常规嵌入式系统的内存保护机制流程示意图;

图2为本发明的系统初始化流程图;

图3为本发明的系统区域划分示意图;

图4为本发明的区域保护控制示意图;

图5为本发明的Cache、处理器与内存之间的联系示意图;

图6为本发明的进程的上下文切换示意图;

图7为本发明中受MPU保护的实时系统上下文切换进程访问;

图8为本发明的方法流程图。

具体实施方式

为了使本发明实现的技术手段、创作特征、达成目的与功效易于明白了 解,下面结合具体图示,进一步阐述本发明。

如图8所示,一种嵌入式系统内存安全访问控制的技术实现方法,包括 以下步骤:

1)内存安全访问机制的系统初始化设计1:在嵌入式系统中引入MPU内 存保护单元,对内存区域分配不同等级的区域属性,具体有背景域、系统共 享域、运行任务域、睡眠任务域和设备I/O域,其优先等级为背景域=睡眠任 务域<系统共享域<运行任务域<设备I/O域;对协处理器的寄存器设定访问属 性,具体有Cache、Buffer和AP(AccessPermission)的属性,设置系统 初始化流程:判断MPU的存在——禁止使能MPU——选择Region并写入基址 和配置信息——允许使能MPU,如图2所示。

本发明中,系统使用区域作为系统保护的主要概念。区域是一个存储空 间属性的集合,也代表一个具有特定属性的逻辑存储空间。区域可以重叠, 这样就可以使用背景区域来保护睡眠任务的存储空间不受当前运行任务的非 法访问。域的定义在MPU的作用下可以重叠。当重叠的域被访问时,MPU会 判断域的优先权,决定使用那个域的属性来操作重叠域。

如图3所示,这是一段内存空间,将起始地址为0x0的32KB地址空间定 义为区域1,其访问属性AP定义为特权模式只读。将0x4000到0x6000的区 域定义为区域2,其访问属性AP定义为特权模式读/写访问,用户模式只读。

当在用户模式下从0x3000地址写入数据时,会发生写入数据失败;当在 用户模式下从0x4ffc地址取数据时,0x4ffc地址既在区域1中也在区域2 中,因为域2的属性优先级高于域1,所有MPU执行域2的访问属性从0x4ffc 地址取数据。区域2是用户模式可读,所以不会发生数据异常。

当ARM处理器需要访问内存时,内存保护单位将负责检查要访问的地址 是否在被定义的域中。如果地址不在任何域中,将产生存储器产生异常。如 果内核预取指令则产生预取中止异常;如果是存储器数据请求,则产生数据 中止异常。

在分配访问权限时重叠区域比非重叠区域有更大的灵活性,用来给一块 大存储空间分配相同的属性的低优先级域作为背景区域。当背景区域与其它 优先级更高的区域重叠时,背景区域的属性被改成优先级更高的区域属性, 见表1。

背景域:保护系统区域,作为背景区域和作为睡眠态用户任务的保护区 域:作为背景区域,它保证整个存储器空间默认被分配系统级访问,防止用 户任务访问备用或未用的存储空间;作为用户任务保护区域,保护睡眠态任 务不受运行态任务的非法访问。

系统共享区:共享系统代码的共享存储器

运行任务区:控制运行任务的存储器空间和属性。当控制权从一个任务 到传给另一个任务时,操作系统重新定义任务区,使它覆盖运行任务的存储 器空间,原来任务的空间交给背景区域的属性控制。这样运行任务就不能访 问原来的任务空间,它受背景域保护。

设备I/O区:建立没有cache和没有写缓冲器的空间。

表1域优先级与访问权限

注:特权级数字越大,优先级越高。高优先级可以把低优先级覆盖。

访问属性可以在协处理器的寄存器中设定,可设定的位为Cache位、 Buffer位(写缓存区)、AP(AccessPermission)。这些属性的具体定义为: AP决定域是否可以被访问。如果在当前处理器模式下,该域不能被访问,MPU 将产生一个存储器访问异常;Cache位和Buffer位可以控制Cache和写缓存 属性的Cache策略,如图4所示。

与MPU相关的CP15协处理器寄存器主要是c1、c2、c3、c5及c6。

1、寄存器c1中:

c1中的(bit[0])控制控制MPU的使能;

c1中的(bit[1])选择是否支持内存访问地址对齐检查。

2、ARM系统中通过写协处理器CP15:c6:c0:0-CP15:c6:c7:0这8个 次寄存器来定义域的大小和地址范围。区域的起始地址必须是区域大小的整 数倍。

3、协处理器CP15的寄存器c5的bits[15:0]存放域的AP(access permission,访问权限)。

AP编码与访问权限的对应关系如表2所示。

表2AP编码与访问权限的对应关系

AP编码 管理者 用户 00 不可访问 不可访问 01 读/写 不可访问 10 读/写 只读 11 读/写 读/写

cache和写缓冲介于cpu和主内存之间,以块为单位进行。内存储器的 地址以及cache的地址由块号和块内地址两部分组成。通过地址变换部件进 行转换,当cpu进行访问的时候,将对应的地址进行转化,转化成功则成为 命中,则直接从cache中读取数据,反之到主存中进行访问,并将访问的字 在内的一整块读取出来放在cache中。如图5所示:

当配置数据域时,域的Cache位和写缓存区位一起决定域的访问策略。 写缓存位有两个用途:使能/禁止域的写缓存和设置域的Cache写策略。域的 Cache位控制写缓存位的作用。

协处理器CP15的寄存器c2、c3用来配置cache和写缓冲的属性。具体 位分配见表3。

表3Cache位和写缓存区的分配策

Cache位 写缓存区 区域属性 0 0 不使用cache和写缓冲 0 1 不使用cache,使用写缓冲 1 0 使用cache,数据cache直写策略 1 1 使用cache,数据cache回写策略

2)嵌入式操作系统进程上下文切换的内存安全访问设计2:设置区域控 制模块,并在区域控制模块内设置系统进程上下文,具体有用户级上下文、 寄存器上下文和系统级上下文,其中用户级上下文包括正文,数据,用户堆 栈和共享存储区;寄存器上下文包括通用寄存器,程序寄存器,处理器状态 寄存器和栈指针;系统级上下文包括进程控制块、内存管理信息和内核栈; 并在区域控制模块内进行系统进程上下文的切换,将原进程更改成低级别的 区域属性,再将待运作进程更改为高级别的区域属性。

系统进程上下文切换原理:

正常运行状态,操作系统硬件运行了它的一个任务“进程A”,在某个时 刻,系统可能需要运行另外一个任务“进程B”,须切换上下文。再执行“进 程B”,等待“进程B”执行完毕或“进程B”被挂起等待信号量时,保存“进 程B”的当前状态,再读取“进程A”被中断时候的状态,再继续执行“进程 A”。如图6所示。

进程的上下文分为三个部分:用户级上下文,寄存器上下文及系统级上 下文:

用户级上下文:正文,数据,用户堆栈,以及共享存储区;

寄存器上下文:通用寄存器,程序寄存器(IP),处理器状态寄存器(CPSR), 栈指针(ESP);

系统级上下文:进程控制块task_struct、内存管理信息(mm_struct)、 内核栈。

如果在“进程B”在执行的时候被其他进程抢占,会发生多级嵌套压栈, 所产生的多次读取和保存上下文所产生的消耗会对操作系统的工作效率造成 严重的影响,降低系统实时性。

而在本发明中,区域控制模块包含了当前任务区域的上下文信息,所以 在上下文切换时,无须通过从CP15寄存器读取数据来保存区域信息。

为了切换到“进程B”,操作系统只须将“执行区域”地移动到“进程B” 的存储空间上,只需先将“进程A”的区域属性改成“背景区域”属性;再 将“进程B”的区域属性改成“执行区域”属性。用这种方法切换任务,不 需要大规模读写数据,也不需要进行虚拟地址转换,使程序执行时间更可控。

图7表示一个简单的多任务环境系统,系统有三个进程,保护每个进程 不受其他2个进程的非法访问。本设计首先定义一个受保护的系统,然后显 示了如何初始化它,初始化以后,运行一个受保护系统的最后一个步骤:在 进程切换时,针对下一个任务改变区域分配。

区域1是一个背景区域,覆盖整个可寻址的存储器空间。使能指令cache, 数据cache使用直写策略操作。它是一个特权区域,但区域的优先级最低。 它保证整个存储器空间默认被分配系统级访问,这样就能防止用户任务访问 备用的或未用的存储空间;它也保护睡眠态任务不受运行态任务的非法访问。

区域2控制运行任务的存储器空间和属性。当控制权从“进程A”传给 “进程B”时,操作系统会重新定义区域2,使它覆盖“进程B”的存储器空 间,并将“进程A”任务空间交给区域1的来控制。原来的进程变成背景区 域的一部分,而当前运行的任务又变成一个新的区域2。

在本发明中,当“进程A”运行时,背景区域保护“进程B”和“进程C” 的空间不受“进程A”访问;同理当“进程B”和“进程C”在其运行的时候, 其他两个进程的空间也会被保护。这样工作的原因是“区域2”比“区域1” 有较高的优先级,尽管“区域1”有较高的访问权限。

本实施例的一种嵌入式系统内存安全访问控制的技术实现方法的有益效 果有:

1、本设计实现了通过处理器MPU硬件机制来检测和限制系统各地址空间 资源的非法访问;

2、本设计实现了嵌入式实时多任务操作系统任何一个任务非法访问其他 任务资源的边界控制及上下文切换;

3、设计实现了系统中不同存储空间cache、写缓冲及MPU属性的分配和 设计,确保内存各背景区域安全访问控制。

以上显示和描述了本发明的基本原理、主要特征和本发明的优点。本行 业的技术人员应该了解,本发明不受上述实施例的限制,上述实施例和说明 书中描述的只是说明本发明的原理,在不脱离本发明精神和范围的前提下本 发明还会有各种变化和改进,这些变化和改进都落入要求保护的本发明围内。 本发明要求保护范围由所附的权利要求书及其等同物界定。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号