APP下载

多核分区管理方法的设计与实现

2018-03-16郝继锋虞保忠郭芳超

计算机工程与设计 2018年2期
关键词:动态控制管理器命令

郝继锋,虞保忠,郭芳超

(中航工业西安航空计算技术研究所第三研究室,陕西 西安 710065)

0 引 言

在综合化模块化航空电子系统(IMA系统[1,2])中,一个处理器上运行一个或者多个航电应用(例如雷达、导航和通信),为了实现系统高度的容错能力,需要保证这些航电应用之间运行的相对独立性,基于此种原因,ARINC653标准[2,3]中引入分区管理的概念,目的是为了将运行在处理器上的多个航电应用按功能划分为独立分区,每个分区对应一个功能独立的航电应用。单核分区操作系统中,一个分区由若干个并发执行的任务组成,分区内的所有任务共享分区资源(例如处理器时间、内存和其它资源),每一个分区都有独立的数据和代码,这样能够防止一个分区的错误蔓延到其它分区。

分区管理要求分区之间进行时空隔离,时空隔离技术已被国外广泛应用于各种飞机中,例如Lockheed Martin F-35军用联合攻击战斗机[5]、Boeing 787民用客机[6]和A380民用客机[7]等,时空隔离技术包括时间隔离与空间隔离两个技术[8]。

时间隔离指分区应用任务之间时间隔离,保证分区应用任务在用户静态配置的时间点上调度运行。时间隔离技术利用操作系统内核的时间管理模块来实现分区应用任务的时间隔离效果。操作系统内核维护一个主帧时间,每个分区至少分配一个小帧时间。操作系统内核根据小帧时间调度相应的分区,在一个小帧时间内,按照固定优先级的时间片轮转调度策略调度应用任务。

空间隔离指分区与分区之间的空间隔离保护、分区与操作系统内核之间的空间隔离保护。空间隔离技术使用处理器的存储管理单元(即硬件MMU)使每个任务处于不同的逻辑空间中,操作系统把每个任务的逻辑空间映射到不同的物理空间内,每个任务的物理空间不会重叠,当任务试图访问不属于自己的空间或具有特权级的空间时,将会产生异常。

2015年8月21日由美国AEEC机构发布的ARINC653 P1-4标准[9]增加了对多核处理器的支持,多核处理器已成为一种行业的发展趋势,同时也促进了航空电子系统的综合化。恩智浦半导体公司(即NXP公司)设计了双核、四核和八核等多个系列(例如T系列、P系列)的嵌入式多核处理器,嵌入式多核处理器的应用需要嵌入式多核操作系统的支持,从国外主流商用操作系统供应商提供的操作系统产品谱系可以看出,目前嵌入式多核分区操作系统的应用推广已是大势所趋。例如,美国Green Hills公司提供的INTEGRITY-178B tuMP[10]多核分区操作系统,该操作系统已在美国Rockwell Collins公司的RQ-7B影子无人飞行系统配套的GPC-3000任务计算机中搭载使用;再例如,美国Wind River公司提供的VxWorks 653 3.0[11]多核分区操作系统,该操作系统已在法国Airbus公司某民用直升机的统合化模块化航空电子系统中应用和验证。

目前,国内分区管理技术的研究和实现大多数是基于单核分区操作系统,而基于多核分区操作系统的研究和实现处于空白状态。本文基于某多核分区操作系统(采用多核虚拟机管理器技术构建)设计并实现了一种多核分区管理方法,该方法包括3部分功能:分区配置、分区初始化和分区动态控制。

1 分区配置

分区配置数据给分区提供运行时的输入数据,它对分区基本属性进行配置,保证了分区的时间隔离特性、空间隔离特性、功能确定性配置、分区行为的确定性控制等。

1.1 基本配置数据

分区的基本配置数据:分区类型(裸应用分区和客户OS分区)、分区名字、分区pager特权任务数量、分区ID、分区大小配置、分区调度配置、分区资源配置、分区权能配置、客户OS绑定处理器核的数量、分区亲和性配置、分区I/O管理配置等。

1.2 多核配置数据

通常来说,给一个单核模式的客户OS配置一个虚拟核,该虚拟核在虚拟机管理器内有一个对应的执行线程;而给SMP模式的客户OS配置二个或者多个虚拟核,这些虚拟核在虚拟机管理器内有多个对应的执行线程,每个执行线程在二个或者多个物理核上运行。为了支持SMP模式客户OS(例如半虚拟化的嵌入式Linux)分区,需要定义如下配置数据:

(1)虚拟核数量:需要给SMP模式客户OS配置二个或者多个虚拟核,如果不指定核映射关系,则虚拟核会映射到连续的物理核。

(2)物理核与虚拟核的映射关系:需要依次配置启动虚拟核以及物理核与虚拟核的映射关系。

(3)虚拟核中断配置:需要把中断分配给指定的虚拟核,默认情况下,所有中断都会投递给0号虚拟核,但是,可以通过重新配置来修改默认配置,把中断投递给某个指定的目标虚拟核。

2 分区初始化

2.1 数据结构设计

为了实现多核分区动态控制功能,需要对分区控制块进行重新设计,见表1。

表1 分区控制块

2.2 分区初始化过程

当虚拟机管理器完成硬件平台资源(包括CPU、内存、时钟、中断控制器和其它外设)以及相关软件资源的初始化后,开始根据用户分区配置数据对分区进行初始化操作。

在初始化分区时,为实现分区多核动态控制功能,首先,需要给每个分区(绑定于某个物理核上)创建一个高优先级的coreMgr任务(用于分区动态控制功能)、一个二值信号量(初始化为“占用状态”)和一个自旋锁(初始化为“空闲状态”)。然后,读取分区配置数据,并把分区挂到系统的资源管理链表上。最后,需要根据已创建的分区数量,为每一个分区创建一个或者多个pager任务来接管分区的管理权限,把pager任务加入虚拟机管理器的就绪队列,等待以pager为载体来启动分区。

因为每个分区初始化时把二值信号量初始化为“占用状态”,所以每当coreMgr任务试图获取二值信号量时,会导致其进入“睡眠状态”,并加入相应的睡眠等待队列,这样就让高优先级的coreMgr任务切换到pager任务运行或者其它任务,让其它任务有机会运行。

此外,在初始化每一个分区的每一个pager任务时,需要初始化分区的虚拟核信息,使用pager任务来实现虚拟核。

整个分区的初始化过程如图1所示。

图1 分区初始化过程

3 分区动态控制

3.1 分区控制模型

为了设计上的简单性,本文采用基于C/S架构的多核分区控制模型,如图2所示。

图2 多核C/S架构分区控制模型

设计要点:

(1)S端设计:在S端给每个处理器核上设计若干个coreMgr任务对C端发送的分区控制命令进行阻塞式读取和处理;

(2)缓冲区访问核间互斥设计:分区控制命令管理缓冲区可能被绑定于多个处理器核上的任务访问,因此,设计自旋锁对该缓冲区访问进行核间互斥保护;

(3)通信过程设计:利用二值信号量的获取和释放来对C端和S端的任务之间进行同步/通信,并把分区挂起、分区恢复和分区重启命令分别保存在命令管理缓冲区的第0、1、2位。

3.2 分区挂起过程

当主控分区中的用户任务或者虚拟机管理器中的内核任务因为某种原因/故障(例如信息安全组件需求、错误处理、异常处理、调度表切换),需要对目标分区执行挂起操作时:

C端通过系统调用把分区挂起命令以核间互斥方式写到命令管理缓冲区的第0位中,然后,通过调用释放二值信号量来唤醒S端目标分区的coreMgr任务,并等待S端分区挂起操作的返回结果。

S端的coreMgr任务以核间互斥方式读取C端写入命令管理缓冲区的第0位的值,解析出具体的分区挂起命令,并对该命令进行服务,服务完成后需要清除对应的挂起命令,表示已经完成分区挂起服务。

多核分区操作系统在用户分区内创建的所有任务对虚拟机管理器都可见,因此,挂起分区操作需要挂起分区内的所有任务。因为客户OS分区和裸应用分区对pager任务的处理方式不同:客户OS分区的pager任务没有挂起;而裸应用分区的pager任务执行完后执行挂起操作,所以,如果目标任务是pager任务,裸应用分区和客户OS分区需要做不同处理,裸应用分区需要跳过pager任务,而客户OS分区需要执行挂起操作。在挂起了分区内的所有任务之后,需要把分区设置为挂起状态,此时便完成的S端的主要工作。

当考虑在虚拟机管理器之上运行SMP模式的客户OS时(例如半虚拟化的嵌入式Linux),需要根据用户的需求选择挂起分区内的所有虚拟核、挂起除当前调用核之外的所有其它虚拟核或者只挂起一个指定的目标虚拟核。

3.3 分区恢复过程

当主控分区中的用户任务需要把挂起后的分区恢复到原来的状态时,必须调用分区恢复系统调用来完成此服务,分区恢复操作时:

C端把分区恢复命令以核间互斥方式写到命令管理缓冲区的第1位中,然后,通过调用释放二值信号量来唤醒S端目标分区的coreMgr任务,并等待S端分区恢复服务的返回结果。

S端的coreMgr任务以核间互斥方式读取C端写入命令管理缓冲区第1位的值,解析出具体的分区恢复命令,并对该命令进行服务,恢复服务完成后即清除对应的服务命令,表示已经完成分区恢复服务。

恢复分区操作和分区挂起命令执行相反的操作,需要恢复分区内所有的任务。因为裸应用分区在执行挂起操作时跳过pager任务;而客户OS分区执行挂起操作,所以,如果目标任务是pager任务,裸应用分区和客户OS分区需要做不同处理,裸应用分区需要跳过pager任务,而客户OS分区需要执行恢复操作。在恢复了分区内的所有任务之后,需要把分区设置为恢复状态,最后,把分区设置为正常状态表示分区恢复到原始状态,此时便完成的S端的主要工作。

当考虑在虚拟机管理器之上运行SMP模式的客户OS时(例如半虚拟化的嵌入式Linux),需要根据用户的需求选择恢复分区内的所有虚拟核、恢复除当前调用核之外的所有其它虚拟核或者只恢复一个指定的目标虚拟核。

3.4 分区重启过程

当主控分区中的用户任务或者虚拟机管理器中的内核任务基于某种原因/故障(例如电源中断、硬件复位、错误处理激活、调度表切换或者由用户设置分区状态),需要对目标分区进行重启操作时:

C端把分区重启命令以核间互斥方式写到命令管理缓冲区的第2位中,然后,通过调用释放二值信号量来唤醒S端目标分区的coreMgr任务,并等待S端分区重启操作的返回结果。

S端的coreMgr任务以核间互斥方式读取C端写入命令管理缓冲区的第2位的值,解析出具体的分区重启命令,并对该命令进行服务,重启服务完成后即清除对应的服务命令,表示已经完成分区重启服务。

重启分区操作需要挂起并删除分区内除pager之外所有的普通任务,在禁止MMU的条件下,重新把目标分区映像从加载地址搬到运行地址(物理地址),在分区映像搬家成功的条件下,把分区设置为重启状态,然后,重新启动目标分区的pager任务(需要设置pager任务的PC和MSR,并重新把pager任务加入就绪队列),最后,使能MMU,此时便完成的S端的主要工作。

本系统的ELF映像部署如图3所示。

图3 ELF映像部署

分区映像是由一个或者多个应用程序映像组成,每个应用程序映像作为分区映像的一个映像段;多个分区映像组成一个分区集合映像,每个分区映像作为分区集合映像的一个分区段;分区集合映像作为虚拟机管理器映像的数据段,而配置记录映像作为虚拟机管理器映像的配置记录段。

当需要把目标分区映像(代码段、数据段和BSS段)从加载地址搬家到运行地址时,首先需要逐一查找目标分区段,找到目标分区段之后,在分区段内又逐一查找映像段,即找到目标应用程序ELF映像。为了减少映像文件的大小,加速分区重启的速度,把ELF格式转换为BIN格式,计算出BIN文件的入口地址后,根据用户静态配置的目标分区名找到对应的目标分区映像名,然后,把代码段和数据段加载到BIN文件入口指定的物理地址空间内,即可完成S端分区重启动的主要工作。

当考虑在虚拟机管理器之上运行SMP模式的客户OS时(例如半虚拟化的嵌入式Linux),需要根据用户的需求选择重启分区内的所有虚拟核、重启除当前调用核之外的所有其它虚拟核或者只重启一个指定的目标虚拟核。

3.5 分区状态转换

本文设计的分区状态转换过程如图4所示。

图4 分区状态转换

对分区定义如下4种状态:

初始状态(INIT):分区创建时的初始化状态。引起分区进入初始状态的原因包括:电源中断、硬件复位、错误处理激活、调度表切换。

运行状态(RUN):启动虚拟机管理器所必须的任务已经创建完成,任务调度处于激活状态,处于就绪态的任务可以运行,此时分区处于一个可操作的状态。

停机状态(HALT):由于某种原因/故障,需要对分区的任务资源进行挂起操作,停止分区内的所有任务的运行状态。

空闲状态(IDLE):分区时间窗口里不执行任何任务,没有资源消耗,分配给分区的时间窗口不会改变。

分区状态可以在一定条件下相互转换:

转换1:用户级任务或者虚拟机管理器调用设置分区状态服务并且操作模式设为空闲状态。

转换2:通过执行错误处理设置分区冷启动恢复动作或进行调度表切换将分区从空闲状态切换到初始状态。

转换3:当分区已经完成初始化,并且调用设置分区状态服务,设定的操作模式是运行状态时,分区就进入运行状态工作。

转换4:通过服务设置分区状态为初始状态、执行错误处理设置分区初始状态恢复动作或调度表切换时执行切换动作(初始状态)使分区从运行状态转换到初始状态。

转换5:用户级任务挂起分区时或者错误处理执行一个恢复动作时或者调度表切换时配置分区的动作为停机状态时,将当前正在运行的分区由运行状态转换为停机状态。

转换6:用户级任务需要由停机状态恢复分区/准备重启分区时或者错误处理执行一个恢复动作时或者调度表切换时配置分区的动作为空闲时,将当前正在运行的分区由停机状态转换为空闲状态。

转换7:用户级任务完成重启分区或者错误处理执行一个恢复动作时或者调度表切换时配置分区的动作为重启时,将当前正在运行的分区由空闲状态转换为运行状态。

4 功能测试和验证

4.1 测试环境

硬件测试环境包括:1台PC机和1台目标机通过1台以太网交换机连接,用于加载待测试程序及调试控制;1台目标机的串口通过1台N-port(用于网口和串口之间的转换),经以太网交换机连接到PC机,用于查看目标机程序的执行输出。

用于测试和验证的4种目标机硬件平台包括NXP公司PowerPC MPC8641D(含两个E600核)或者PowerPC P4080(含8个E500MC核)或者PowerPC P2020(含两个E500V2核)或者PowerPC P2040(含4个E500MC核)。如图5所示。

图5 硬件测试环境

4.2 测试方案

一种多核分区管理方法在上述4种目标机硬件平台的多核配置模式下进行了充分功能测试和验证,下面以Po-werPC MPC8641D双核处理器为例说明测试方案。

给虚拟机管理器配置4个分区,设置0分区为主控分区,以固定时间间隔发出分区挂起、分区恢复和分区重启动命令;分区1和分区2为裸应用分区,分区3为客户OS分区,其中,0分区和2分区绑定在0核上,1分区和3分区绑定在1核上。每个分区包含基本的pager任务、异常处理任务、中断处理任务,以及其他用户定制任务。

4.3 结果分析

利用串口监控工具捕获的程序输出结果如图6所示。

图6 测试结果

从实验结果可看出,多核分区操作系统在启动过程中为每个分区创建一个coreMgr任务,coreMgr0任务绑定在0核上,coreMgr1任务绑定在1核上,coreMgr2任务绑定在0核上,coreMgr3任务绑定在1核上。

分区0循环定时给目标分区发出分区挂起、分区恢复和分区重启动命令,当挂起分区1时,分区1中的所有任务不再运行,而分区2、分区3中的任务继续运行。当恢复分区1时,分区1中的所有任务恢复运行;当重启支分区1时,分区1的映像重新搬家,从分区1入口重新执行,分区1内的所有任务重新创建并调度执行。

在执行完成分区1的挂起、恢复和重启操作之后,继续对分区2和分区3进行动态控制,其过程和分区1动态控制过程类似。

5 结束语

本文提出一种多核分区管理方法,包括分区配置、分区初始化和分区动态控制,并对该设计方法的正确性进行了功能测试和验证。该方法具有一定的创新性,是对航空领域满足ARINC653标准的分区管理方法的扩展。

一种多核分区管理方法提出了3个创新点:

(1)实现了分区在核间的动态控制,即一个物理核上的主控分区可对其它物理核上的目标分区进行挂起、恢复和重启动等动态控制功能。

(2)设计了一种基于C/S架构的多核分区动态控制模型,使用pager任务来实现虚拟核,可用于对SMP模式的客户OS进行挂起、恢复和重启动控制。

(3)定义了虚拟机管理器的分区动态控制的接口标准,设计了相应的分区状态转换过程,该接口标准是对ARINC653标准的扩展。

一种多核分区管理方法已在某多核分区操作系统中实现,且已进行了充分的功能测试。将来需要进一步完成的测试工作包括:对SMP模式的客户OS(例如半虚拟化的嵌入式Linux)进行分区动态控制功能测试。

[1]Gitsuzo B S Tagawa,Marcelo Lopes de Oliveira,Souza.An overview of the integrated modular avionics (IMA) concept[R].Brazil:INPE,2011:277-280.

[2]Shadrintsev N.Integrated Modular Avionics.Current state and vision of the future development[C]//IMA International Conference.Moscow:GosNIIAS,2012:8-9.

[3]AEEC.Avionics application software standard interface part 4-subset services[S].USA:AEEC,2012:4-5.

[4]AEEC.Avionics application software standard interface,part 5,core software recommended capabilities[S].USA:AEEC,2014:5-7.

[5]Hjortnaes K,Windsor J.System requirements and architecture for time & space partitioning in spacecraft[R].Netherlands:ESA-ESTEC,2010:3-4.

[6]Wikipedia.Integrated modular avionics[EB/OL].[2017-04-11].https://en.wikipedia.org/wiki/Integrated_modular_avionics.

[7]Jean-Bernard.A380 Integrated Modular Avionics[R].France:Airbus,2016:23-41.

[8]Hiller M,Hernek M.Integrated modular avionics:SAVOIR-IMA status and progress[R].European:ESTEC,2012:3-4.

[9]AEEC.Arinc specification 653p1-4 avionics application software standard interface set[S].USA:AEEC,2015:119-120.

[10]John McHale.Rockwell collins selects INTEGRITY-178B tuMP RTOS for shadow UAS mission computer[EB/OL].[2016-08-16].http://mil-embedded.com.

[11]VxWorks 653 3.0 product overview[R].USA:Wind River,2015.

猜你喜欢

动态控制管理器命令
基于全过程动态控制下的建筑工程进度管理研究
只听主人的命令
探究施工阶段工程造价动态控制的方法与策略
BIM技术在工程造价动态控制中的应用——以南京白金汉爵大酒店工程为例
建筑工程造价特点及动态控制实施方法探讨
启动Windows11任务管理器的几种方法
应急状态启动磁盘管理器
Windows文件缓冲处理技术概述
移防命令下达后
这是人民的命令