基于开放系统的测试软件架构设计研究

2020-07-15 05:04张秀芳刘洲洲
计算机技术与发展 2020年7期
关键词:嵌入式节点数据库

张秀芳,刘洲洲

(1.西安欧亚学院,陕西 西安 710065;2.西安工程大学 电信学院,陕西 西安 710000;3.西北工业大学 计算机学院,陕西 西安 710072)

0 引 言

当前嵌入式开放系统已经广泛应用在各行各业,比如通讯、电子、航空、过程控制、消费电子产品等领域[1-4]。当前嵌入式操作系统有数百种,比较流行的有苹果iOS,谷歌的安卓系统,ATI的Nucleus Plus、VXWorks等。用户可以根据自身的软硬件环境的要求,选择合适的操作系统。其中数据库作为系统的关键模块,有至关重要的作用,当前常见的数据库存储介质由连续的Flash组成,同时配合驱动和文件管理系统,且逻辑地址空间可逆且连续。文中以嵌入式Nucleus数据库为例[5-9],设计一种测试软件架构,采用直接面向Flash驱动的方法,相比传统存取方法速度有较大提高,内存占用也随之降低。

1 Nucleus开放系统

Nucleus是为实时嵌入式应用而设计的一个抢先式多任务操作系统[10-12]。Nucleus系统的各层通讯协议都提供了由ANSIC写成的源码,有利于系统的可移植性并支持大部分处理器。而且Nucleus系统针对不同的处理器的源码大部分也是相同的且少部分跟CPU相关由汇编完成。该操作系统完全开源,可以通过修改开源代码进行所需的配置,调试可以在中断和寄存器级进行。核心函数API和程序代码链接一起生成目标代码,可以直接烧制到目标板卡中,整个核心代码区内核规模非常小,方便调试。

2 数据库测试架构

文中提出了面向Flash驱动的数据库方法,该方法向上提供寻址空间,且空间为线性,将连续且可逆的逻辑地址空间用地址映射表的擦除块来映射。数据库相关设备和本身数据库相互关联,其中在连续的逻辑地址的基础上,记录需要写在同一个擦除块,数据库设备则需要提供动态记录空间。数据库设备不能独立完成整理擦除块,需要依赖记录索引,同时设备需要记录擦除块的工作情况,使得动态分配空间功能得以完善。擦除块的掉电保护在底层设备独立完成,记录等操作的掉电保护由数据库系统操作完成。记录索引表和交换块以及记录区构成本数据库系统,索引表占用首地址空间,而交换块不占用地址空间且存储索引表最后节点部分,记录区占用其他地址空间,详细记录每个数据库地址类别大小等属性,且记录唯一地址信息,ID号不冲突同时可区分数据库类别[13-15]。

2.1 地址映射

文中假定数据库相关设备存储大小为2 M,且擦除块大小占据64 K,擦除块为32块,其中一块作为交换块,其余为擦除块,每个擦除块前四字节写入ID号和bank号,结构如图1所示。

图1 擦除块结构

当嵌入式开发系统初始化时,数据库相关设备则开始扫描32块ID,并动态生成一个映射表且存储在系统的内存中,由于保留一个交换块,只可用31节点,定义最后节点地址,其余节点包括物理地址和擦除块信息。文中映射表用C语言表述成:

struct tagDbDevTab{

long Addr;//物理地址

long Free;//剩余大小

long Dirty;//脏块大小

}DbDevTab[DB_DEV_SIZE/0x10000];

2.2 分配记录空间和脏块回收

文中数据库相关设备可为系统动态分配记录空间,数据库记录表存储在同一块擦除块,且不能夸块存储。将地址映射表的空闲字段进行优先分配,减少碎片和物联块充分使用,由于操作如删除和修改等会产生脏块,为有效利用,脏块需要反复利用,回收记录触发后当设备空间无空余,脏块回收则选中要回收的目标块,根据地址映射表记录字段的大小优先判断,选定后记录转存其他空间同时删除原记录。空间所有记录移除后,调用擦除函数写入,同时修改地址映射表,如果脏块太多,需要整块回收,将有用记录逐条转存其他空间后擦除该空间,将保留空间作为逻辑空间写入记录,这样将整个物理空间有效利用。

2.3 数据库设备初始化

数据库系统初始化先由设备初始化再进行数据本身初始化。初始化不但要对调电保护做出检测和数据修复,还要初始化许多全局变量,它们包括:地址映射表、保留Bank的物理基地址、记录索引表的最大节点、索引表中已经删除的节点个数、系统索引的记录个数等,另外还要打开系统索引。

初始化过程为扫描各个Bank ID,填写地址映射表的addr字段,如果发现Bank ID的Flag是0xF,则擦掉该Bank,如果发现Bank0 ID是0xE0000000,则改写为0xC0000000。如果注册表没有填写满,也就是有的逻辑Bank找不到,则找到一个ID为0xFFFFFFFF的块,擦除后写入ID为0xC*******,并作为这个逻辑Bank。找到保留Bank并把基地址写入地址映射表的最后一个节点。扫描Bank0的记录索引表的addr字段,如果某个节点的Flag是0xF,改写为0x8,如果Flag是0xE,读出该节点id,找出该记录旧的节点并删除,同时改写Flag为0xC。最后统计出记录索引表的最大节点以及索引表中已经删除的节点个数。还要统计出各个Bank的已经用掉的空间、剩余空间、脏记录的空间,其中剩余空间是根据该Bank的最后一条记录再加上这个记录的大小算出来一个初始值,然后再从该Bank的最后向前搜索到初始值,遇到不是0xFFFFFFFF的时候退出,该地址就是该Bank的剩余起始地址。

3 掉电保护

嵌入式开放数据库设备必须使用掉电保护,目的是嵌入式系统在突发掉电情况,资料完整性得以保存,要求在写操作步骤进行。首先系统启动后初始化过程中需要记录之前掉电现象是正常模式下掉电还是异常模式下掉电,当突发掉电可以还原掉电前资料信息,数据库的空间地址分别由四个字节信息组成,相关记录含义目录名的相关性不得冲突、同时依靠数据库的鲁棒性。

数据库的掉电保护是指在用户打开数据库后,在数据库的操作期间(关闭数据库之前)发生低电压或者突然掉电时应保证数据库资料的完整性。在这个过程中允许且只允许丢失用户最后一次的操作。在这个数据库的实现中,利用了两套数据文件来保证这一点,每个数据库打开后同时存在两套文件:一是(*.dat,*.def.*,*.ida,*.idb,*.idc,...),另一套是(*.dat,*.bef,*.bda,*.bdb.*.bdc,...),其中*.dat是同一个文件。其余的文件两者一一对应。在数据库打开时,根据两套文件的完整性(文件个数)及其相互关系(记录数的个数)来确定当前使用哪一套文件,并将另外一套文件全部置空(此时这套文件无效)。在对数据库进行操作的过程中,先将当前这套文件的内容修改后写入另一套文件中,全部完成后将当前使用的文件标志修改并将原来那套文件全部置空。这样一来就可以保证在任何时候都有一套完整的数据,在关闭数据库的时候将空的那一套文件删除。对于数据库的保护,在本数据库系统里数据处理过程中采用备份的方式:两份数据库定义文件(*.def,*.bef),两份索引文件(*.id*,*.bd*),但只有一份数据文件,因为数据块的使用可以由文件系统保障。这两份文件组在使用中互为备份:在第一组为当前使用时,执行操作前恢复当前文件组的数据,然后在备份组上进行修改,修改完成,在将当前组指向第二组。

4 系统实验测试

通过上位机和下位机测试两种方式:同时按下电源开关键(挂断键)和退出键(右功能键)用传输线将小机同PC连接起来:在PC端启动“数据库测试程序”,小机端:按开关键开机连接成功后,在PC端选择“系统自检”。首先进行串口测试如图2所示,同时分别测试串口0和串口1,并显示测试结果。在测试夹具上,会将串口0和串口1短接,故各串口自发自收,自动判断测试结果。

图2 串口通讯

然后再通过SRAM测试和DATA/PROGRAM校验,如图3和图4所示。测试过程中对于数据库的保护,在本数据库系统里数据处理过程中采用备份的方式:两份数据库定义文件(*.def,*.bef),两份索引文件(*.id*,*.bd*),但只有一份数据文件,因为数据块的使用可以由文件系统保障。这两份文件组在使用中互为备份:在第一组为当前使用时,执行操作前恢复当前文件组的数据,然后在备份组上进行修改,修改完成,再将当前组指向第二组。存储一条记录时,首先存贮该记录的数据,然后存入记录的节点,最后对该记录进行排序。针对上述流程,发生掉电时,如果发生在存数据过程,该记录将完全不存在;如果发生在存节点过程中,该节点将不存在,但会浪费一块数据文件空间;如果发生在排序过程中,由于记录数目不一致,将会删除失效的一套文件。数据库保持原来的结构。

图3 SDRAM测试

图4 DATA/PROGRAM校验

通过软件测试,表明该方法便于移植且当其他模块崩溃时不会直接影响数据库系统同时存取速度有所提高,同时占用内存也会大大降低,由于有掉电保护,系统可靠性也得到了增强。

5 结束语

Nucleus作为开放嵌入式系统,具有实时性和多任务性,系统资源的调度都在其有效管理控制下可以使嵌入式多任务的开发变得省时省力,同时高效,文中分析了基于Nucleus的嵌入式数据库测试软件架构的机理,对于嵌入式实时操作系统的开发具有重要的意义。

猜你喜欢
嵌入式节点数据库
基于RSSI测距的最大似然估计的节点定位算法
基于IMX6ULL的嵌入式根文件系统构建
分区域的树型多链的无线传感器网络路由算法
基于图连通支配集的子图匹配优化算法
Focal&Naim同框发布1000系列嵌入式扬声器及全新Uniti Atmos流媒体一体机
基于点权的混合K-shell关键节点识别方法
数据库
数据库
数据库
数据库