一种内存保护方法、保护装置及单片机与流程

文档序号:18029133发布日期:2019-06-28 22:27阅读:360来源:国知局
一种内存保护方法、保护装置及单片机与流程

本发明属于单片机技术领域,尤其涉及一种内存保护方法及单片机。



背景技术:

随着汽车电子技术的不断发展,采用autosaros(嵌入式实时操作系统)的单片机在汽车嵌入式系统中的应用越来越广泛。

其中,autosaros内存的安全性关系着汽车驾驶的安全性,因此,需要在autosaros运行时对内存进行保护。



技术实现要素:

有鉴于此,本发明的目的在于提供一种内存保护方法、保护装置及单片机,用以实现嵌入式实时操作系统在运行时内存的保护,具体方案如下:

一种内存保护方法,包括:

确定嵌入式实时操作系统的当前运行状态;

依据所述当前运行状态确定是否需要切换已加载的内存保护集;其中,所述嵌入式实时操作系统配置有多组内存保护集,每一组所述内存保护集下配置有所述嵌入式实时操作系统的内存的各个区域对应的内存数据访问权限;

若确定需要切换所述已加载的内存保护集,则在特权模式下将所述已加载的内存保护集切换为与所述当前运行状态对应的内存保护集;

在所述当前运行状态下,使用所述与所述当前运行状态对应的内存保护集对所述嵌入式实时操作系统的内存进行保护。

可选的,若确定无需切换所述已加载的内存保护集,所述方法还包括:

依据所需运行的应用数据确定是否改写所述嵌入式实时操作系统配置的数据保护范围寄存器中的数据保护范围或代码保护范围寄存器的代码保护范围;

若确定需要改写,则依据所述所需运行的应用数据对应的内存地址改写所述数据保护寄存器中的数据保护范围或依据所述所需运行的应用数据对应的代码范围改写所述代码保护寄存器中的代码保护范围。

可选的,所述依据所述所需运行的应用数据对应的内存地址改写所述数据保护寄存器中的数据保护范围或依据所述所需运行的应用数据对应的代码范围改写所述代码保护寄存器中的代码保护范围包括:

确定所需运行的应用数据对应的内存地址;

确定与所述应用数据对应的数据保护寄存器或代码保护寄存器;

将所述应用数据对应的数据保护寄存器或代码保护寄存器中的数据保护范围改写为所述所需运行的应用数据对应的内存地址。

可选的,所述嵌入式实时操作系统配置有多组内存保护集,每一组所述内存保护集下配置有所述嵌入式实时操作系统内存的各个区域对应的内存数据访问权限,包括:

系统中预先存储有获取配置表;

依据所述配置表的配置策略划分所述嵌入式实时操作系统的内存保护集以及所述嵌入式实时操作系统的内存所需保护的内存区域;

配置已划分的各个所述内存保护集下各个所述内存区域对应的内存数据访问权限。

可选的,所述依据所述配置表的配置策略划分所述嵌入式实时操作系统的内存保护集具体包括:

将所述内存保护集划分为内核保护集、一类中断保护集、二类中断保护集以及任务保护集。

可选的,所述依据配置表的配置策略划分所述嵌入式实时操作系统所需保护的内存区域具体包括:

将所述内核代码的内存地址范围保存至第一代码保护寄存器;

将系统栈的内存地址范围保存至第一数据保护寄存器;

将内核数据的内存地址范围保存至第二数据保护寄存器;

将当前任务栈的内存地址范围保存至第三数据保护寄存器;

将当前任务数据的内存地址范围保存至第四数据保护寄存器;

将当前中断栈的内存地址范围保存至第五数据保护寄存器;

将当前中断数据的内存地址范围保存至第六数据保护寄存器;

将当前应用集数据的内存地址范围保存至第七数据保护寄存器。

可选的,若确定需要切换所述已加载的内存保护集,所述则在特权模式下将已加载的内存保护集切换为与所述当前运行状态对应的内存保护集包括:

若所述与所述当前运行状态对应的内存保护集为任务保护集,则将系统栈中非特权模式的值修改为特权模式的值;

在特权模式下将已加载的内存保护集切换为所述任务保护集。

可选的,所述若确定需要切换所述已加载的内存保护集后还包括:

确定与所述当前运行状态对应的内存保护集的保护集组值;

将所述保护集组值写入程序状态寄存器的特殊标志位,以触发在特权模式下将所述已加载的内存保护集切换为与所述当前运行状态对应的内存保护集的步骤。

本发明另一方面提供了一种内存保护装置,包括:

运行状态确定模块,用于确定嵌入式实时操作系统的当前运行状态;

判断模块,用于依据所述当前运行状态确定是否需要切换已加载的内存保护集;其中,所述嵌入式实时操作系统配置有多组内存保护集,每一组所述内存保护集下配置有所述嵌入式实时操作系统的内存的各个区域对应的内存数据访问权限;

切换模块,用于若确定需要切换所述已加载的内存保护集,则在特权模式下将所述已加载的内存保护集切换为与所述当前运行状态对应的内存保护集;

保护模块,用于在所述当前运行状态下,使用所述与所述当前运行状态对应的内存保护集对所述嵌入式实时操作系统的内存进行保护。

本发明另一方面还公开了一种单片机,包括内存以及用于运行前述所述内存保护装置的处理器。

基于上述技术方案,本发明提供了一种内存保护方法、内存保护装置及单片机,所述内存保护方法,首先确定嵌入式实时操作系统的当前运行状态;然后依据所述当前运行状态确定是否需要切换已加载的内存保护集;其中,所述嵌入式实时操作系统配置有多组内存保护集,每一组所述内存保护集下配置有所述嵌入式实时操作系统的内存的各个区域对应的内存数据访问权限;若确定需要切换所述已加载的内存保护集,则在特权模式下将已加载的内存保护集切换为与所述当前运行状态对应的内存保护集;最后在所述当前运行状态下,使用所述与所述当前运行状态对应的内存保护集对所述嵌入式实时操作系统的内存进行保护。可以看出,本发明实施例中,已加载的内存保护集会切换到与嵌入式实时操作系统当前运行状态对应的内存保护集,依据该内存保护集配置的内存数据访问权限监控内存区域的数据访问,实现了嵌入式操作系统在运行时的内存保护。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是本发明实施例提供的一种内存保护方法的流程示意图;

图2是一种典型的嵌入式实时操作系统的结构示意图;

图3是本发明实施例公开的一种内存保护装置的结构示意图;

图4是本发明实施例公开的一种单片机的结构示意图。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

为了便于理解,首先对本发明中用到的技术用语进行解释。

autosar(opensystemarchitecture)是指汽车开放系统架构。

autosaros是在autosar架构下的一种嵌入式实时操作系统。

mpu(memoryprotectionunit)内存保护单元是单片机的硬件处理装置,可以防止系统资源和其他一些任务不被非法访问,如果发生非法访问,mpu就会发现,从而进入到对应的软件处理模块。可以理解的是,软件处理模块进行处理的过程可以参考现有技术,在此不进行赘述。

参见图1,本发明实施例提供的一种内存保护方法的流程示意图,该方法可以应用于单片机的mpu,实现对嵌入式实时操作系统,例如autosaros在运行时内存的安全性。

本发明实施例中,嵌入式实时操作系统运行在单片机中,单片机的mpu预先划分有多组内存保护集,即多个memoryprotectset,或者称为内存保护集。本发明实施例中,优选采用tc29x单片机。

其中,tc29x单片机的mpu一共支持16组dpr寄存器(数据保护范围寄存器)和8组cpr寄存器(代码保护范围寄存器),每组寄存器对应其保护的数据的地址范围或代码的地址范围。

本发明实施例中,划分了多组内存保护集,每一组内存保护集配置有不同的内存数据访问权限,即,每一组内存保护集对应一组数据读使能寄存器dpre,对应于数据保护范围寄存器的可读权限,一组数据写使能寄存器dpwe,对应于数据保护范围寄存器的可写权限,一组代码可执行使能寄存器cpxe,对应于代码保护范围寄存器的可执行权限,用于实现内存访问权限的配置。如果mpu发现没有按照内存区域应有的访问权限进行访问,则认为是异常,则触发异常处理流程。具体内存的各个区域相关内存数据访问权限的配置过程以及配置内容在后面进行详细介绍。

基于此,参照图1,本发明实施例提供的一种内存保护方法,可以包括:

步骤s100,确定所述嵌入式实时操作系统的当前运行状态;

步骤s200,依据所述当前运行状态确定是否需要切换已加载的内存保护集;其中,所述嵌入式实时操作系统配置有多组内存保护集,每一组所述内存保护集下配置有所述嵌入式实时操作系统的内存的各个区域对应的内存数据访问权限;

参见图2,图2是一个典型的嵌入式实时操作系统的结构示意图。其包括有若干任务和中断,不同的任务和中断属于不同的应用集,例如图2中的os应用集1和os应用集2。嵌入式实时操作系统要保护的内存区域被划分为任务栈区域,例如os应用集1中task1的stack,任务私有数据区域,例如os应用集1中task1中的privatedata,中断栈区域,例如os应用集1中的isr的stack,中断数据区域,例如os应用集1中isr中的privatedata,应用集私有数据区域,例如os应用集1除task1、task2以及isr外的privatedata,以及系统栈和内核代码区域code。os应用集2中可以参考os应用集1中的各个区域设置。

可以理解的是,图2中的任务、中断及应用集个数仅作示意,实际情况可能更多。本发明实施例可以应用于嵌入式实时操作系统,用于在嵌入式实时操作系统运行时对内存进行保护。

本发明实施例中,由于嵌入式实时操作系统可以运行在内核状态、中断状态以及任务状态,其中,中断状态可以包括一类中断状态和二类中断状态。因此,需要根据嵌入式实时操作系统的运行状态确定是否需要切换当前运行的保护集。

其中,依据所述当前运行状态确定是否需要切换已加载的内存保护集包括:

确定与所述当前运行状态对应的内存保护集;

判断所述与所述当前运行状态对应的内存保护集是否对应已加载的内存保护集;

若相同,则确定无需切换内存保护集;

否则,确定需要切换内存保护集。

本发明实施例中,如果已加载的内存保护集无需切换,则可以进行进一步的判断,依据所需运行的应用数据确定是否改写所述嵌入式实时操作系统配置的数据保护范围寄存器或代码保护范围寄存器的数据内容,此过程在后面进行详细介绍。

实际使用中,可以通过程序状态寄存器psw中的特殊标志位prs位来表示当前内存保护集的保护集组值,嵌入式实时操作系统可以通过改变该保护集组值来实现内存保护集切换的触发。当该特征标志位改变时,则切换当前内存保护集至与所述特权标志位相对应的内存保护集。

例如,所需切换的内核保护集对应的保护集组值为1,则将该程序状态寄存器psw中的特殊标志位prs修改为1。

可以理解的是,本发明实施例中,当嵌入式操作系统初始化时,可以加载预设的内存保护集,如内核保护集,也可以设置不加载任何内存保护集,不进行具体限定。

步骤s300,若确定需要切换所述已加载的内存保护集,则在特权模式下将所述已加载的内存保护集切换为与所述当前运行状态对应的内存保护集。

步骤s400,在所述当前运行状态下,使用所述与所述当前运行状态对应的内存保护集对所述嵌入式实时操作系统的内存进行保护。

本发明实施例中,根据嵌入式实时操作系统的运行情况来确定是否需要切换已加载的内存保护集,如果确定需要切换已加载的内存保护集,则执行切换内存保护集的过程。

具体的,本发明实施例中的所述内存保护集可以包括内核保护集、中断保护集以及任务保护集,则将所述已加载的内存保护集切换为与所述运行状态对应的内存保护集具体包括:

当所述嵌入式实时操作系统的当前运行状态为内核状态时,将所述已加载的内存保护集切换为内核保护集;

当所述嵌入式实时操作系统的运行状态为中断状态时,将所述已加载的内存保护集切换为中断保护集;其中,中断状态可以分为一类中断状态和二类中断状态,一类中断状态对应一类中断保护集,二类中断状态时对应二类中断保护集。

当所述嵌入式实时操作系统的运行状态为任务状态时,将所述已加载的内存保护集切换为任务保护集;

实际使用中,当嵌入式实时操作系统启动后,运行在内核状态,因此,将psw的prs修改为与内核状态对应的内核保护集的值,则已加载的内存保护集切换到内核保护集,当嵌入式实时操作系统需要运行任务时,当前运行状态为任务状态,需要将内核保护集切换成任务保护集。

可以理解的是,本发明实施例中,预先配置了各个内存保护集下嵌入式实时操作系统的内存的各个区域的内存数据访问权限。

例如,当前运行的是内核保护集,当前嵌入式实时操作系统的运行状态是任务状态,则将内核保护集切换为任务保护集。

切换到新的内存保护集后,mpu会根据切换后的内存保护集所设置的内存数据访问权限对内存区域的运行进行监控。如果发现有异常,如非法访问,则会进入到相应的软件处理模块,对异常进行处理。监控出现异常后的处理过程可以参见现有技术,在此不进行赘述。

本发明实施例中,本发明实施例中,由于嵌入式实时操作系统在运行中,mpu支持在supervisormode特权模式下直接切换内存保护集,不支持在非特权模式下直接切换,因此,切换内存保护集的过程需要在特权模式下进行。如果需要在非特权模式下,需要执行修改的过程,将非特权模式修改为特权模式才可以实现内存保护集的切换。

本发明实施例中,由于在嵌入式实时操作系统触发了系统trap陷阱指令在中断状态的条件下,会自动切换到特权模式,并且操作系统内核代码运行在触发了陷阱指令的条件下,因此,嵌入式实时操作系统在内核状态、一类中断状态以及二类中断状态下,可以直接切换内存保护集。

如果当前运行状态为任务状态,在非特权模式下,可以通过系统调度(systemcall)来实现内存保护集的切换。当嵌入式实时操作系统触发了系统调度后,当前非特权模式对应的值会被硬件自动压入系统栈中,然后通过例如具有修改功能的软件将系统栈中对应的非特权模式的值改为特权模式的值,在陷阱指令返回出系统栈后,系统就切成了特权模式,可以实现在任务状态下内存保护集的切换。

可以看出,本发明实施例中,已加载的内存保护集会切换到与嵌入式实时操作系统当前运行状态对应的内存保护集,依据该内存保护集配置的内存数据访问权限监控内存区域的数据访问,实现了嵌入式操作系统在运行时的内存保护。

上述实施例中,介绍了内存保护集的切换过程,实际使用中,如果不需要切换内存保护集,有可能嵌入式实时操作系统当前运行状态并未发生变化,只是所需运行的应用数据发生了变化,例如嵌入式实时操作系统运行在任务状态下时,任务的应用数据发生了变化,因此,依据所需运行的应用数据确定是否改写所述嵌入式实时操作系统配置的数据保护范围寄存器或代码保护范围寄存器的数据内。

上述实施例的基础上,若确定无需切换所述已加载的内存保护集,本发明实施例还包括:

s500、依据所需运行的应用数据确定是否改写所述嵌入式实时操作系统配置的数据保护范围寄存器中的数据保护范围或代码保护范围寄存器的代码保护范围;

s600、若确定需要改写,则依据所述所需运行的应用数据对应的内存地址改写所述数据保护寄存器中的数据保护范围或依据所述所需运行的应用数据对应的代码范围改写所述代码保护寄存器中的代码保护范围。

本发明实施例中,还会确定是否需要改写嵌入式实时操作系统配置的数据保护范围寄存器的数据保护范围或代码保护范围寄存器的代码保护范围。即前述所述的dpr寄存器中保存的数据或cpr寄存器中保存的数据。

依据所述所需运行的应用数据对应的内存地址改写所述数据保护寄存器中的数据保护范围或依据所述所需运行的应用数据对应的代码范围改写所述代码保护寄存器中的代码保护范围具体包括:

确定所需运行的应用数据对应的内存地址;

确定与所述应用数据对应的数据保护寄存器或代码保护寄存器;

将所述应用数据对应的数据保护寄存器或代码保护寄存器中的数据保护范围改写为所述所需运行的应用数据对应的内存地址。

例如,嵌入式实时操作系统需要运行任务1和任务2,任务1对应的任务栈的内存地址为1-3,任务2对应的任务栈的内存地址为4-6,任务1的任务数据的内存地址为7-8,任务2的任务数据的内存地址为9-10,嵌入式实时操作系统在运行在任务状态,正在执行任务1,此时,已加载的内存保护集为任务保护集,当前任务栈寄存器dpr2中的数据保护范围为1-3,当前任务数据寄存器dpr3数据保护范围为7-8。如果此时接收到了任务优先级高于当前运行任务1的任务2,需要运行任务2的应用数据,由于任务1和任务2嵌入式实时操作系统的运行状态均是在任务状态下,因此,无需切换内存保护集,但是,由于任务1和任务2的任务栈的内存地址和任务数据的内存地址均不相同,因此,需要将所需运行的应用数据即任务2所对应的当前任务栈寄存器dpr2中的数据内容改写为4-6,将当前任务数据寄存器dpr3的数据内容改写为9-10,来切换数据保护范围。当然,代码保护范围的修改可以参考数据保护范围来实现。

当然,可以理解的是,如果s400后,确定无需改写,则返回步骤s100。

可以看出,本发明实施例中,在autosaros运行时,如果有应用数据发生了改变,会自动将mpu中数据保护范围寄存器或代码保护范围寄存器中的内存地址范围进行修改,实现相同运行状态下不同应用数据的内存保护。避免嵌入式系统中任务和系统资源被非法访问,提高系统软件运行的安全性。

前述实时中介绍了所述嵌入式实时操作系统配置有多组内存保护集,每一组所述内存保护集下配置有所述嵌入式实时操作系统的内存的各个区域对应的内存数据访问权限,下面对配置多组内存保护集以及配置每一组内存保护集下各个内存区域对应的内存数据访问权限的过程进行详细介绍。

本发明实施例中,优选的,依据如下的配置表来对嵌入式实时操作系统的各组内存保护集的地址范围和对应的寄存器以及数据访问权限进行配置。

配置表

其中,x表示可执行,r表示可读,w表示可写,-表示不可读写执行。

本发明实施例中,配置嵌入式实时操作系统中内存的各个区域各自对应的内存数据访问权限包括:

系统中预先存储有获取配置表;

依据配置表的配置策略划分所述嵌入式实时操作系统的内存保护集以及所述嵌入式实时操作系统的内存所需保护的内存区域;

配置已划分的各个所述内存保护集下各个所述内存区域对应的内存数据访问权限。

本发明实施例中,内存保护集被配置为内核保护集、一类中断保护集、二类中断保护集以及任务保护集。各个内存保护集分别运行在嵌入式实时操作系统不同的运行状态下。

本发明实施例中,可以根据所需保护的内存的不同属性划分为如下内存区域:内核代码、系统栈、内核数据、当前任务栈、当前任务数据、当前中断栈、当前中断数据以及当前应用集数据。

依据所述配置策略对划分的各个内存区域配置各自对应的数据保护范围寄存器或代码保护范围寄存器;

具体包括:

将所述内核代码的内存地址范围保存至第一代码保护寄存器cpr0;

将所述系统栈的内存地址范围保存至第一数据保护寄存器dpr0;

将所述内核数据的内存地址范围保存至第二数据保护寄存器dpr1;

将所述当前任务栈的内存地址范围保存至第三数据保护寄存器dpr2;

将所述当前任务数据的内存地址范围保存至第四数据保护寄存器dpr3;

将所述当前中断栈的内存地址范围保存至第五数据保护寄存器dpr4;

将所述当前中断数据的内存地址范围保存至第六数据保护寄存器dpr5;

将所述当前应用集数据的内存地址范围保存至第七数据保护寄存器dpr6。

然后配置已划分的各个所述内存保护集下各个内存区域对应的内存数据访问权限。

配置内核保护集的内存数据访问权限,设置所述内核代码的数据访问权限为可执行,所述系统栈、内核数据、当前任务栈、当前任务数据、当前中断栈、当前中断数据以及当前应用集数据的数据访问权限为可读、可写。

配置中断保护集的内存数据访问权限,设置所述内核代码的数据访问权限为可执行、所述系统栈、所述当前任务栈以及所述当前任务数据的数据访问权限为不可读、不可写、不可执行,所述内核数据的数据访问权限为可读,所述当前中断栈、当前中断数据以及当前应用集数据的数据访问权限为可读、可写。

其中,配置内存数据访问权限是通过配置前述所述的数据读使能寄存器dpre,数据写使能寄存器dpwe,代码可执行使能寄存器cpxe实现的。

本发明实施例中,嵌入式实时操作系统在初始化时,mpu会加载配置表,依据配置策略来执行配置过程。

可以理解的是,上述配置方式可以应用到tc29x单片机中,如果单片机的型号有变化,根据实际需要进行配置方式的改动即可,同样也可以实现对内存的保护,在此不进行赘述。

与内存保护方法相应的,本发明实施例另一方面还提供了一种内存保护装置。

参见图3,图3是本发明实施例公开的一种内存保护装置的结构示意图。

一种内存保护装置,包括:

运行状态确定模块1,用于确定嵌入式实时操作系统的当前运行状态;

判断模块2,用于依据所述当前运行状态确定是否需要切换已加载的内存保护集;其中,所述嵌入式实时操作系统预先配置有多组内存保护集,每一组所述内存保护集设置有所述嵌入式实时操作系统的内存的各个区域对应的内存数据访问权限;

切换模块3,用于若确定需要切换所述已加载的内存保护集,则在特权模式下将已加载的内存保护集切换为与所述当前运行状态对应的内存保护集;

保护模块4,用于在所述当前运行状态下,使用切换后的内存保护集对所述嵌入式实时操作系统的内存进行保护。

图4是本发明实施例公开的一种单片机的结构示意图。本发明另一方面还公开了一种单片机。其可以包括内存10以及用于运行如前述所述内存保护装置20的处理器。该处理器可以为mpu。

可以理解的是,本发明中的内存保护装置的各个模块的功能可以实现前述实施例中内存保护方法实施例中相应的各个步骤,在此不进行赘述。

可以看出,本发明实施例中,已加载的内存保护集会切换到与嵌入式实时操作系统当前运行状态对应的内存保护集,依据该内存保护集配置的内存数据访问权限监控内存区域的数据访问,实现了嵌入式操作系统在运行时的内存保护。

本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。

专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。

结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(ram)、内存、只读存储器(rom)、电可编程rom、电可擦除可编程rom、寄存器、硬盘、可移动磁盘、cd-rom、或技术领域内所公知的任意其它形式的存储介质中。

对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的核心思想或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1