APP下载

一种嵌入式软件组件更新方法的研究与实现

2020-08-14郭秋丽赵益民邸海涛

无线互联科技 2020年10期
关键词:嵌入式软件一致性组件

郭秋丽,赵益民,邸海涛

(航空工业西安航空计算技术研究所,陕西 西安 710068)

动态更新的研究始于19世纪60年代,在开放的Internet环境下,动态性和多变性的需求越来越明显。大多数系统都处于持续运行中,如果停机更新维护,则会带来巨大的损失,这就要求软件系统具有动态更新的能力,能实现系统的动态更新。嵌入式软件组件经过组装和集成后形成庞大的软件系统,但对执行时间、可靠性、安全性、可用性及功耗等因素要求较高,使用者在经过评估或性能改进后,会对不符合需求的软件组件进行更新,于是就引入了对软件组件更新的需求。文章提出了一种嵌入式软件组件的更新方法,并具体实现了更新过程。

1 组件更新方式

根据嵌入式软件组件更新发生的时机不同,可将组件更新方式分为以下4种:

(1)设计时更新:在软件编译前,通过修改组件的设计或源代码,重新编译和部署来适应变化。在文章中不考虑这种类型的组件更新。(2)运行前更新:又称为静态更新,指在软件编译之后、运行之前进行的更新。(3)有限制的动态更新:一般在设计时就规定了更新的具体条件,比如将系统设置为“安全”模式后进行一些规定的更新操作,不会破坏系统的稳定性和一致性。黄英兰等[1]提到了基于确定策略的机载分布式系统多级重构方法就是通过预先定义系统的重构策略,并将策略存储在配置数据中来实现的。(4)动态更新:又称为运行时更新,指在组件运行过程中,根据应用需要和环境变化,动态的进行组件运行、维护和更新。

2 一种嵌入式软件组件更新方法的设计

组件更新在本质上是指删除旧组件和增加新组件的替换操作。在具体替换时,需要收集旧组件的状态和数据,然后传递给新组件,新组件通过直接使用这些状态和数据或根据系统约束对其进行转化,最终使新系统能正确运行。若替换操作不成功,系统必须恢复到原来的状态。因此,组件必须满足以下特性:

(1)新、旧组件必须兼容,并且新组件必须符合功能属性要求,以减少更新后对整个系统的影响。(2)新组件只影响与其相连的组件,不能影响系统中的其他组件。(3)保证组件满足一致性要求,即行为一致性、状态一致性、应用一致性。

2.1 嵌入式软件组件系统的组成

嵌入式软件组件系统由操作系统、驱动、组件管理框架、组件和组件库组成,其中操作系统和驱动与硬件环境紧密联系,组件分为应用组件和中间件组件,中间件组件运行在组件管理框架中。组件是不能直接与底层软件进行交互的,需要组件管理框架来完成。组件管理框架是一个支持组件运行和部署的环境,主要负责组件与外部的连接、组件生命周期的管理、组件服务的绑定调用、为组件分配系统资源等功能[2-3]。组件管理框架在组件更新时起到了非常重要的作用,通过组件管理框架可以实现组件状态的迁移,如:组件增加、组件删除、组件修改、组件升级和组件替换等操作。嵌入式软件组件系统组成如图1所示。

图1 嵌入式软件组件系统组成

2.2 组件更新策略

当嵌入式系统有组件更新需求时,系统需要判断当前更新操作是否可以进行,一般是通过组件的依赖关系来判断的。配置描述文件以一种规范化、易于理解的方式来全面、准确地描述组件信息,包括:组件名称、版本、提供商、功能、服务、依赖服务等,其中组件依赖服务属性描述了该组件对其他组件的依赖关系及依赖强度。

假如系统中有组件A、组件B和组件C 3个组件在运行,其中,组件A依赖于组件B,且组件B是为组件A而加载运行的,组件C依赖于组件A。现在要求动态更新组件A,处理规则如下:

(1)如果新组件A没有提供给组件C所需要的服务,则系统判断其不符合一致性规则,不允许更新。(2)如果新组件A提供了组件C所需要的服务,但没有依赖组件B,则不影响整个系统的运行,允许更新。在更新成功后,将旧组件A和组件B同时卸载。(3)如果新组件A提供了组件C所需要的服务,也依赖于组件B,则允许更新,更新成功后,将旧组件A卸载,保留组件B。

3 一种嵌入式软件组件更新方法的实现

3.1 组件更新软件

组件更新软件用来实现组件的更新。如图2所示,组件更新软件分为更新响应、动态更新、状态恢复共3个子模块。

图2 组件更新软件功能模块

(1)更新响应模块:当组件框架接收到组件更新的命令后,即调用更新响应模块,对组件及当前状态进行判断,确定能否更新、静态更新或动态更新等。(2)动态更新模块:主要进行组件的动态更新。(3)状态恢复模块:无论组件更新成功与否,系统都要进行更新动作后的清理工作。如果更新失败,则要将系统恢复到更新之前的状态;如果更新成功,则要将旧组件相关信息清除。

3.2 组件更新的过程

当组件框架调用了更新响应功能后,组件更新软件就开始执行,组件更新的过程如图3所示。

图 3个组件更新过程

(1)执行组件下载功能,将新组件下载到本地组件库中。(2)判断所要更新的模块名称是否安装在当前的软件组件管理框架中,如果没有被安装,则结束更新过程。(3)判断新组件是否满足一致性要求,如果不满足则结束更新过程。(4)判断旧组件是否被加载到内存,如果没有则将新组件进行安装,并在安装文件中记录安装信息,卸载旧组件,结束更新过程。(5)如果组件被加载到内存,且参与了系统功能服务,则要进行动态更新。先判断旧组件是否被当前运行的组件强制依赖,如果有,则结束更新过程。(6)如果旧组件没有被强制依赖,则将旧组件的状态设置为“Updating”,将其他组件对旧组件的依赖关系标记为“Updating”,将旧组件对其他组件的服务依赖关系标记为“Updating”。(7)安装加载新组件,为新组件注册并建立服务依赖关系,将其他组件对旧组件的依赖关系迁移到新组件上来,并将依赖关系标记为“Normal”,将新组件的状态设置为“Runing”。新组件安装时,将旧组件的安装信息更名位“_old”。(8)如果新组件安装运行正常,将系统中旧组件的依赖关系删除,将安装文件目录中旧组件的安装文件删除,结束组件更新过程。(9)如果新组件在安装加载过程中出了问题,系统将会退回到旧组件状态,并且结束更新过程。退回过程:将其他组件对旧组件的依赖关系记录标记为“Normal”;将旧组件对其他组件的服务依赖关系标记为“Normal”;将旧组件的状态设置为“Runing”;从安装文件目录中将新组件的安装文件删除,将旧组件的安装文件名称恢复成原来的名称。

4 结语

文章提出了一种嵌入式软件组件的更新方法,并实现了更新过程。在嵌入式系统向开放式系统发展的道路上,软件的复杂度越来越高,动态性和多变性的需求就越来越明显,提供软件系统的动态更新能力,保证系统在不停机的状态下进行软件更新,将会降低人工成本,提高嵌入式系统的运行效率。

猜你喜欢

嵌入式软件一致性组件
关注减污降碳协同的一致性和整体性
无人机智能巡检在光伏电站组件诊断中的应用
注重教、学、评一致性 提高一轮复习效率
IOl-master 700和Pentacam测量Kappa角一致性分析
U盾外壳组件注塑模具设计
实时嵌入式软件的测试技术
全景相机遥控器嵌入式软件V1.0 相关操作分析
桥梁组件搭配分析
基于事件触发的多智能体输入饱和一致性控制
基于Eclipse的航天嵌入式软件集成开发环境设计与实现