景月娟,彭寒,刘洲洲,张晓丽
(西安航空学院计算机学院,陕西西安 710077)
嵌入式实时多分区操作系统广泛应用于当代航空电子系统,是支撑航电系统向综合化、集成化方向发展的基础平台软件,如国产的天脉2(ACoreOS)[1]以及美国WindRiver 公司推出的VxWorks AE653 操作系统[2]。嵌入式实时多分区操作系统提供了高安全性、高可靠性的多分区调度和管理机制,确保应用系统的安全运行。
非易失性随机访问存储器(Non-Volatile Random Access Memory,NVRAM)是一种特殊的存储介质,其兼有内存的高速读写特性和在掉电情况下仍然保持数据完整不丢失的特点[3]。
该文研究了一种NVRAM 的管理机制,规避了存储器访问越界和冲突的风险,有效提高了系统的安全性与可靠性。
在嵌入式实时多分区操作系统中,NVRAM 能满足实时系统的实时性访问以及从持久化存储的数据快速恢复的要求,但是NVRAM 提供的原生访问接口通过绝对物理存储地址进行数据读写,将地址完全暴露给接口调用者。上层应用程序直接以绝对地址访问NVRAM,存在存储器访问越界的风险,进而会造成软件运行错误甚至系统失效。
在嵌入式实时多分区操作系统平台下,各分区在访问NVRAM 时,每个分区必须确认其与他分区之间是否存在地址冲突。
常规的NVRAM 访问机制是通过一个公共资源配置表(如图1 所示),实现了各分区可访问的NVRAM 地址段的全局定义,应用层可按照配置分配的地址段进行NVRAM 的读写,即直接访问对应的NVRAM 绝对物理地址。
图1 常规多分区访问NVRAM机制示意图
常规多分区NVRAM 访问机制依赖公共资源配置的正确性和NVRAM 访问的合规性,实际应用中存在以下隐患:
1)当分区内存在多个应用访问NVRAM 时,公共资源配置表和操作系统未提供分区访问NVRAM保护机制,如果访问地址之间存在地址重叠,将引发资源访问冲突,导致不可预料的错误;
2)如果在应用层增加相关设计避免访问冲突,会增加应用层软件的复杂度。
为了解决上述问题,提出一种NVRAM 管理机制,实现了各分区应用对NVRAM 的互斥访问和越界保护。
为了解决以绝对地址访问NVRAM 时产生的问题,在常规NVRAM 访问机制基础上,增加了NVRAM代理管理层[4-5],如图2 所示,NVRAM 代理管理层的主要职责是对访问的地址进行校验,同时对可访问的地址空间进行有效性判断。
图2 增加NVRAM管理机制后的示意图
图3 为嵌入式实时多分区操作系统NVRAM 管理系统结构,即在模块支持层之上增加NVRAM 代理管理模块,以隔离应用层对NVRAM 物理地址的直接访问,由NVRAM 管理模块统一管理NVRAM 存储空间的分配,透明化NVRAM 的管理机制,应用层不再关心存储器的空间管理[6]。
图3 嵌入式实时多分区操作系统NVRAM管理系统结构
NVRAM 管理层负责存储器的管理[7]。NVRAM是一个独立的存储设备,具有连续的存储空间,NVRAM 管理层可将其分成多块存储区,每块存储区域以字符串表示其存储区标识,如图4 所示,存储区标识默认使用初次注册时定义的字符串名称,字符串名称需定义最大长度SIZE,存储区标识存储于注册的NVRAM 存储空间地址起始位置。
图4 NVRAM空间存储说明
NVRAM 管理层通过配置信息实现存储器的管理。配置信息通过应用层的注册申请生成[8]。配置参数如表1 所示。
表1 配置参数
如表1 所示,id 是存储区访问的唯一标识,id 在进行注册访问时自动生成;nameSIZE 是存储区的字符串标识;length 是存储区的可用最大长度;addr 是存储区的绝对访问地址,该地址应用层不可见。
除此之外,根据硬件平台中NVRAM 的实际大小,需要预先配置其他参数:NVRAM 的最大空间MAX_NVRAM_ADDR、系统最大支持访问存储区个数MAX_NVRAM_SUM 及每个访问存储区对应的最大空间MAX_NVRAM_LENGTH
NVRAM 管理模块定义了注册接口、读取接口和写入接口,分别用于支持NVRAM 的注册、读取和写入服务[9]。各分区应用通过调用这些接口实现对NVRAM 的互斥访问[10]。具体的接口定义如下:
1)注册接口
int CreatNvRam(int*id,int length,char*name);
功能:创建并申请NVRAM 空间;
返回值定义:
0:注册成功;
1:名称过长;
表3、4、5分别为Z、Y、X方向的前3阶模态频率和阻尼统计表,图6、7、8分别为Z、Y、X方向的1阶模态振型。因为模态振型具有较强的方向性,单方向的模态频率、振型与仿真整体模态频率、振型的阶数并不一定相等。
2:超过最大长度限制;
3:存储区个数超界;
4:NVRAM 空间不足;
5:注册失败。
2)读取接口
int ReadNvRam(char*pbuf,int id,int length);
功能:在id 处读取长度为length 的内容到pbuf;
0:读取成功;
1:无效的id;
2:访问越界;
3:指针为空。
3)写入接口
int WriteNvRam(char*pbuf,int id,int length);
功能:从pbuf中取length 长度的内容写在id 处;
返回值定义:
0:写入成功;
1:无效的id;
2:访问越界;
3:指针为空。
开机初次使用NVRAM 存储区时,需要创建NVRAM 配置参数表[11]。配置表的内容为注册存储区时生成的配置参数,配置参数内容如表1 所示。注册接口、读取接口和写入接口的具体算法实现流程分别如图5-7 所示。
图5 注册接口算法流程
由图5 可知,在注册接口的实现算法中,除了要检查输入参数(即注册标识和注册长度)的有效性,还需要判断待注册存储区是否已经注册。唯一的注册标识和禁止重复注册同一块存储区的机制确保了后续访问注册存储区的安全性[12]。
由图6 和图7 可知,在访问存储区时,通过有效的存储区id 和存储区长度,准确地检索、定位到对应的存储区,将存储区的数据读取到缓冲区或者把缓冲区的数据写入到存储区中[13]。
图6 读取接口算法流程
图7 写入接口算法流程
在整个NVRAM 管理机制算法中,不同应用使用NVRAM 时必须先注册再访问,注册的存储区不可重叠[14],不同的存储区通过不同标识区分,访问存储区时利用id 在配置表中进行检索存储区地址[15],准确定位后再访问。因此,该机制为不同分区应用的访问提供了有效的保护,避免了访问冲突[16],也消除了访问越界的风险。
该管理机制在某个机载计算机系统进行了测试,其软件运行平台为天脉2 操作系统,系统配置了三个应用分区,每个分区均配置了多个实时任务,均涉及NVRAM 的访问。
在该机载系统的配置过程中,采用了该文提出的NVRAM 的管理机制,具体的系统配置定义如表2所示。同时,与不采用该机制时的使用效果进行了对比,表3 为采用NVRAM 管理机制前后配置时间和维护时间的对比情况说明。
表2 NVRAM系统配置
表3 NVRAM管理机制应用前后情况对比
由表3 可以看出,不采用NVRAM 管理机制时,虽配置简单,但需要大量的维护时间,且在系统集成后存在一定概率的出错风险;相比之下,采用NVRAM 管理机制后,配置时间增加了一倍,但应用系统需要维护的时间明显减少[17]。
因此,对软件开发设计人员来说,无需耗费过多的精力考虑非易失存储器的管理问题,一次配置完成后,后期不再需要进行系统维护,解决了非易失存储器访问出现问题时难以定位和维护的顽疾。
对于嵌入式实时多分区操作系统,引入具有高速读写和非易失性的NVRAM,可以快速存储应用程序数据,应用软件采用原生访问接口NVRAM,存在严重安全性隐患。该文提出的一种新NVRAM 管理机制,实现了应用层设计与底层NVRAM 管理间的隔离,解决了多分区对NVRAM 的访问冲突,消除了访问过程中数据越界的风险,提高了多分区应用的集成效率和软件的健壮性。