航空电子分区层次调度模型及其优化设计英文
王彦明++毛元泽++刘一臻
[摘 要]随着新一代航空电子系统高度综合化、模块化发展,航空电子软件(以下简称航电软件)的应用范围和规模迅速扩大,成为了航空电子系统的核心部分。为了防止航电软件之间故障的相互影响,综合模块化的航空电子系统软件标准——ARINC653中引入了分区的概念,使不同的航电软件在时间和空间上彼此隔离,从而防止错误在不同关键级别的应用软件之间传播。本文着重讨论了符合ARINC653要求的分区调度的一种设计与实现方法,分区间调度设计与实现以及时间的管理。
[关键词]航空电子;ARINC653;分区;调度
中图分类号:TM222 文献标识码:A 文章编号:1009-914X(2017)12-0288-01
引言
符合ARINC653要求的操作系统的结构采用程序分区化的技术,将IMA系统中的一组功能相关的应用软件当作一个分区(Partition),分区在时间和空间上相互隔离,并向用户提供满足ARINC653规范要求的应用程序接口。而分区由一个或多个进程组成,每个进程隶属于特定的分区。分区在概念上相当于通用操作系统的进程,而分区内运行的进程相当于线程。
航电操作系统根据预先定义的主时间框架(MAF)进行分区时间调度,分区内各进程之间按照优先级抢占的调度策略并发执行,每个进程具有截止时间,对于周期进程有周期的属性,当进程发生周期超时或者截止期超时,系统将进行相应处理。本文着重讨论符合ARINC653要求的分区两级调度的设计与实现,设计分区间调度。
1 两级调度模型
由于IMA需要允許多个不同关键级别的应用程序并行执行,因此有必要保护各个应用程序免受其他程序的潜在干扰。为了保护应用程序和系统资源,ARINC653规范定义了应用执行(Application Executive ,APEX)接口支持应用程序的时间和空间分区。空间分区是指ARINC653系统在物理内存中分别为每个软件分区程序(由多个进程组成)分配一段专有空间,以保证其免受其他与之共享的物理资源的应用程序的不利干扰。而时间分区是指ARINC653系统为每个分区程序分别分配时间窗口,以保证每个程序使用CPU不超过预定义时间。
为解决时间分区问题,当前主要有两种调度模型[4][5]:一级调度模型和二级调度模型。一级调度模型中只有一个内核调度器,既能调度分区任务又能调度分区任务内的进程;二级调度模型中包含两个级别的调度器:调度分区任务的模块调度器和调度分区内进程的分区调度器。由于二级调度模型能够通过周期计算而获知当前的分区,而分区内进程有允许抢占,因而这种调度模型在一定程度上增强了系统的可预测性和灵活性[6],因此在实现方案中采用二级调度模型[7]。
在二级调度模型中,模块调度器需要完成模块中各个分区的按时间窗口轮转方式调度;分区调度器则负责完成分区内进程的按优先级抢占式调度。
2 分区调度
模块中的分区的调度策略是在配置文件(以XML格式定义)中预先定义的,不允许运行过程中进行修改。因此,程序首先解析配置文件,将分区调度策略读取到调度表数据结构中,系统选择一个分区调度策略进行分区调度。
在设计时,为了完成分区间的切换,模块调度器线程优先级应当设置为较高,使其可以随时进行抢占运行以便调度分区,并且保证其周期性调用。在分区间切换时,模块调度器需要对当前分区进行挂起操作,并且按照时间片轮询顺序唤醒下一分区。由于调度模型为两级调度,因此分区的唤醒与挂起操作由分区调度器执行,因此模块调度器仅仅需要向分区调度器发送相应挂起分区或唤醒分区的指令即可。
在进行分区调度之前,要判断制定模块的状态。当指定模块的状态为MODULE_BUILD时,就为模块内的每个分区创建一个调度事件,等到所有分区的调度事件创建完毕后,将模块的状态改为MODULE_RUNNING。当指定模块的状态为MODULE_RUNNING时,就可以对模块进行调度。调度时,首先判断当前系统时间是否小于当前调度方案的调度时间,如果小于则暂不进行调度,但需要判断模块中当前是否有活动的分区,如果有则设置该分区的内区内调度事件;如果没有,则要判断当前模块中是否有正在活动的分区。如果此时系统时间不小于调度时间,则按照系统选择的分区调度策略进行调度,从第一个时间窗口开始对模块进行首次调度,并计算下一次出发调度的时刻;如果此时有活动分区,则先停止当前分区,依照当前的调度方案,调度当前被停止的时间窗口的下一个时间窗口,即实现了分区间的切换。在分区切换时,如果该分区窗口的计数(从0开始计数)已经超过了调度方案中的最大窗口数目,则要将该分区窗口清0,以当前系统时刻作为调度方案的其实时刻开始调度,同时计算出下一次出发调度的时刻。分区调度完成后,设置被调度分区的分区内调度事件,以出发分区内的进程间调度。
3 结果验证
Windows下测试调度是否符合设计要求,首先读取配置文件,通过配置文件获得有关分区、调度的配置信息。
其分区、调度相关初始化结果与XML配置文档中的一致,故配置信息获取成功。画出分区时序图,下图3为模块0的调度时序图,分析可得其调度序列与配置表中一致,正常进行模块调度。
此时,没有启动进程,可以看出根据硬件环境,已经创建2个模块,每个模块下根据配置信息中配置的分区及时间窗口信息,不停地根据调度配置进行分区间切换。
此时模拟加载用户程序。测试时,指定加载到模块0中的分区中,每个分区运行两个进程,即分区ACT4A-SAMPLE-0000运行进程1和进程2,分区ACT4A-SAMPLE-0001运行进程3和进程4,分区ACT4A-SAMPLE-0002运行进程5和进程6。每个分区中的进程通过StartApplication()函数进行加载,加载后每个分区进程运行。可以画出此时模块0中的时序图,如图1所示。
由上述测试例子可以看出分区与分区内进程调度正常。
4 结论
本文按照ARINC653文档需求完成了调度仿真器的设计与实现,并移植到RTX环境,初步可以模拟运行用户代码,经过简单测试分区间调度与分区内调度时序正确,基本按照预期完成了论文内容。但是依旧存在一些尚未解决,如没有在RTX环境下系统进行测试、对ARINC653文档其他章节规范不清楚等,都将在今后的学习中不断的完善。
参考文献
[1] 刘怀,张继峰.实时系统的多任务调度[J].计算机工程,2002,3:34-45.
[2] 满在龙,曲邵云,许曰滨.基于广义遗传算法的周期性任务调度模型[C].全国理论计算机科学学术年会,青岛:2003.