孟开元 闫方 曹庆年 彭寒
摘 要:机载操作系统属于嵌入式实时操作系统,其内部内核对象的状态变迁、关键数据的值变化以及系统调度运行状况直接影响着机载应用程序的正确执行。本文以为机载应用程序更好地定位故障、发现并排除各种逻辑错误为目的,采用内嵌传感器的方法,结合任务的状态切换、触发状态切换,应用ARINC 653仿真器实时监控机载操作系统的状态和数据变化。经过测试,表明该系统可以得到机载应用程序的状态和行为变迁,并为机载应用程序的运行时验证、机载分区操作系统仿真器的符合性测试提供基础。
关键词: 机载操作系统仿真器;机载应用程序;状态变迁; 内嵌软件传感器
文章编号: 2095-2163(2019)03-0110-04 中图分类号: TP316 文献标志码: A
0 引 言
随着机载电子系统快速发展,机载操作系统作为学术界一个热门研究方向,也一直都是技术研发上的亮点和难点[1]。机载操作系统研究和发展起源于二十世纪中叶,最初机载实时操作系统主要与军事上需求紧密相关,但随着计算机技术应用范围不断扩大,实时操作系统已经应用于人们生活中各个领域。然而无论是在嵌入式领域、还是在通用领域,对于操作系统实时性都有严格要求。如果机载操作系统的实时性不能满足需要,将会带来不可预测后果。因此,机载操作系统实时性能是衡量机载系统优劣性的重要指标[2-3]。本文针对实时机载操作系统安全性不断提升这一项目任务,亟需对其任务状态进行监控和分析,为此专门探讨和研究了机载操作系统仿真器任务状态监控方法,设计和实现一个仿真器任务状态监控系统。
1 ARINC 653操作系统仿真器原理
为了实现资源共享,采用IMA(Integrated Modular Avionics system)架构的航空电子系统,软件体系结构采用了软件分层的方法[4-5]。而具有代表性的综合模块化软件体系架构之一就是ARINC 653。如圖1所示,ARINC 653在应用程序、操作系统、硬件之间建立标准接口,即APEX(Application/Executive)接口,并且提出了分区这一核心的概念[6-7]。
而分区是航空电子应用的一种功能划分。每个分区分别有4种模式:WAREM_START、COLD_START、IDLE、NORMAL[8]。而分区内是以进程为一个执行单元的。仿真器就是利用Windows线程仿真ARINC 653的进程,同时每个进程又各有4种状态,即:运行态(RUNNING),就绪态(READY),休眠态(DORMANT)和等待态(WAITING)[9]。
本文通过分析机载仿真操作系统ARINC653源代码,在任务状态发生变化的关键位置处,插入监控代码,实时感知分区内任务切换,根据代码上下文判断触发任务切换事件类型;通过消息通道将此序列传输到仿真器外部显示界面并保存;完成对分区内任务状态-事件序列采集。实现了实时监控机载操作系统的状态和数据变化,实现了将机载操作系统中的分歧和进程状态切换的信息接出来并发送到界面,从而在外部对系统内部进行有效的监控和研究。
2 系统总体框架
任务状态监控工具的设计主要包括了监控器模块的设计、消息通道机制的设计和显示界面模块的设计三部分。系统的总体框架如图2所示。
从图2中可以看出,监控器模块是嵌入到ARINC653仿真操作系统中的,其通过内嵌软件传感器将捕获到的状态转换信息打包后写入到消息缓冲队列中,然后通过一个工作线程不断地将缓冲队列的数据写入消息通道;消息通道底层封装了Windows的通信机制,将监控器模块写入的数据传递到显示界面;显示界面模块接收到消息后,先是对消息进行解析处理,此后将发送到界面显示或者保存到日志文件中。
3 系统的设计
3.1 监控器模块的设计
监控器模块的设计主要包括了4部分内容:状态事件的设计、内嵌传感器的设计、消息队列的设计和工作线程的设计。这里对其中每一部分的功能设计可阐释解析如下。
(1)状态事件的设计。本文将分区和进程的每次状态转换当作一次触发事件来处理,并给每个转换进行了事件编号。
分区状态事件主要依据分区状态转换图,即将分区状态的每次切换进行了编号,具体的事件编号如图3所示。
进程状态事件主要依据进程状态转换图,将进程状态的每次切换进行了编号,具体的事件编号如图4所示。
(2)内嵌传感器的设计。过程中采用了内嵌软件传感器的方法监控软件。该方法采用状态传感器代码记录分区和分区内任务的状态切换,并用事件传感器代码记录触发本次状态切换的事件;通过对机载操作系统仿真器的源代码进行分析,共找到28处发生分区状态以及任务状态切换的位置,在状态切换的位置上插入状态传感器代码。内嵌传感器的设计主要包括了捕获分区状态转换接口的设计和捕获进程状态转换接口的设计。
(3)消息队列的设计。由于仿真操作系统的分区和进程状态切换比较快,而消息通道是一个进程间的通信机制,在传送过程中会消耗大量的时间,这样就导致了监控器发送数据快,消息通道传输速度慢的情况。为了防止监控到的消息被覆盖或者丢失,专门设计了一个消息缓冲队列来延缓这个速度差。同时,又考虑到重复利用缓冲队列的空闲资源,本文使用环形队列来实现消息缓冲队列。消息队列的设计图如图5所示。
(4)工作线程的设计。工作线程的主要作用是从消息缓冲队列中读取数据,并将数据按照设计好的格式进行打包,且将打包好的数据写入消息通道中。工作线程的工作流程如图6所示。
3.2 消息通道机制的设计
消息通道的底层使用了命名管道的方式进行进程间通信,为了节省系统资源,于是采用复用的方式,一个模块只对应一个命名管道(以模块名命名),模块中各个分区复用一个通道。由于在一个模块中,同一时刻只会有一个分区在运行,就使得在某时刻,命名管道是被某一分区单独使用,如此设计既节约了资源,又不会引起多个分区同时发送数据而引发的冲突。
3.3 显示界面模块的设计
显示界面用来完成监控信息的显示、历史信息的保存和回放等功能,其控件的布局如图7所示。
从图7可以看出,显示界面主要分为3部分,即:上部分是界面的标题和控制按钮部分;中间部分是显示状态转化部分;下部分是事件显示列表。
4 测试
本系统的测试平台包括Microsoft Visual Studio2008和Microsoft Visual Studio2015,针对是否能够成功监控到机载操作系统仿真器任务执行轨迹来展开研究,并且以状态转换图的形式直观地显示在界面上进行测试。系统测试效果如图8所示。
在一个模块中配置一个分区,在该分区中创建2个进程,启动分区后,这2个进程的状态不断切换,界面成功显示预期的状态-事件序列。
从测试结果来看,能够成功监控到机载操作系统仿真器内部的状态转化,并且通过界面可以直观地观察到机载操作系统仿真器内部的状态迁移,及时了解到系统内部发生的一系列状态迁移,可以更加方便地通过任务状态轨迹对系统的内部进行监控。
5 结束语
在机载操作系统仿真器的基础上,通过监控系统内部任务状态切换,及时观察到当前系统内部任务状态切换轨迹,为机载应用程序的测试和验证提供支持。监控到机载操作系统仿真器内部任务状态,能够直观地对外显示出系统内部任务状态切换轨迹,进一步提高机载操作系统的可靠性,为机载应用程序的测试和验证提供了坚实的基础。
参考文献
[1]谭龙华,杜承烈,雷鑫. ARINC653分区实时系统的可调度分析[J]. 航空学报,2015,36(11):3698-3705.
[2] 马安祥,马麟龙,李海伟. 民用飞机机载状态监测与管理软件设计与研究[J]. 航空计算技术,2016,46(1):107-110.
[3] 张永悦,云利军,孙瑜. 基于分区的航电系统调度分析工具实现[J]. 计算机工程,2014,40(4):42-47.
[4] 张永悦. 基于仿真的实时系统可调度性分析工具的研究与实现[D]. 昆明:云南师范大学,2014.
[5] 刘鸽,叶宏,李运喜,等. 基于多分区操作系统的多核确定性调度方法設计[J]. 航空计算技术,2016,46(1):99-102.
[6] 陈福,张晓红,赵刚,等. 飞机机电综合管理平台应用任务调度方法研究[J]. 计算机测量与控制,2016,24(3):255-257,262.
[7] 杨徐晗. 新舟600飞机实时状态监控与可视化实现[D]. 德州:中国民用航空飞行学院,2016.
[8] 王冠. IMA下的实时任务调度机制研究[D]. 南京:南京航空航天大学,2012.
[9] 刘鸽,叶宏,虞保忠,等. 多分区环境下多核操作系统结构研究[J]. 信息安全与技术,2016(1):43-45.