支持多核处理器的星载分区操作系统设计
2020-03-21詹盼盼齐征张翠涛何熊文郭坚
詹盼盼 齐征 张翠涛 何熊文 郭坚
(北京空间飞行器总体设计部,北京 100094)
实时操作系统(Real Time Operating System, RTOS)是在确定的时间内对外部事件响应并执行相应功能的一类操作系统[1],星载操作系统是一种实时操作系统。国外已经开展多年RTOS研究与应用,出现了一些商用RTOS产品,如VxWorks,RTEMS和QNX等[2]。除针对单核处理器的RTOS外,国外操作系统厂商针对航空航天特殊的运行环境,又对操作系统的功能进行了升级,形成了多核分区操作系统。美国风河公司的VxWorks653[3]软件支持分时分区管理,提供强大的两级时空域调度器。2009年, NASA采用VxWorks653作为战神1号(Ares-1)和战神5号(Ares-5)新一代运载火箭飞行控制计算机的RTOS[4]。Integrity-178B[5]软件是由美国Green Hills公司开发的高可靠、强实时嵌入式RTOS,提供两级优化调度器,支持时间分区、空间分区以及分区内、跨分区通信,被广泛应用在航空领域,如F-16、F-22、F-35战斗机,也用于民航客机,如空客A380、波音787等。
国内航天领域大量使用的星载实时操作系统有北京空间飞行器总体设计部自主研制的高可靠实时操作系统(EVTOS)和航天操作系统(ASOS),广泛应用于遥感、导航、载人飞船、深空探测和通信领域的中心计算机中,相比于国外商用操作系统软件,具有更优的性能和可靠性指标[2]。北京控制工程研究所研制的空间操作系统(SpaceOS)[6]广泛应用于星载控制计算机中。上述系统均运行于单核处理器中,国内尚未有公开资料表明多核分区操作系统在轨应用。
随着航天软件系统的任务规模和复杂程度不断上升,现有星载操作系统实现的对单核处理器进行资源管理及调度的方式,已不能满足现有实时运算和星内总线管理任务,更无法与星载自主信息处理、星间组网、目标识别任务对处理器性能的要求相匹配。当前星载操作系统在应用时主要面临以下问题。
(1)处理器占用率即将饱和,运算性能需要提升。以遥感卫星为例,积分时间运算和成像条带规划任务已占据处理器较大资源;载人空间站信息系统须对6套总线进行管理,总线数量、每套总线的通信数据量相比现有卫星分别增加了5倍和2倍;卫星星座须对卫星组网和动态路由功能进行处理,保证星间实时通信。上述任务运行使得处理器资源余量不足20%,难以承担更多任务。
(2)大规模软件的可靠性安全性问题更加突出。星载应用软件规模较大,软件中的漏洞(BUG)难以完全避免,更需要一种安全保护机制,防止应用软件中的一个漏洞误导致整个系统崩溃。
(3)上层应用软件难以复用,不能适应多种应用需求。传统星载软件设计方法,软件逻辑处理与用户需求紧密耦合,不同的任务需要单独开发一套软件处理模块,难以复用,造成了很多重复性开发。
(4)在轨灵活扩展需求更加迫切。当前采用全部软件重新编译后,进行部分或全部软件在轨维护的方式,使得应用软件更改困难,功能扩展难。因此需要一种灵活更新和扩展的方式,卫星功能升级更加方便。
针对上述问题,本文研究了一种星载多核分区操作系统,解决现有星载操作系统对多核处理器、软件安全隔离保护、难以复用和在轨灵活扩展支撑缺失或不足问题,以适应未来航天新型任务和多核处理器的需求。
1 需求分析
星载计算机正在向多核处理器方向发展,而星载操作系统目前仍然面向单核处理器,已滞后于需求和计算机发展,航天软件任务无法充分利用多核处理带来的性能提升。因此,在总结并分析当前星载操作系统在应用时面临的主要问题基础上,需要对现有星载操作系统进行升级,满足以下需求。
(1)多核处理器实时调度与管理。为解决航天型号任务计算量和总线数据量较大、实时性要求高的问题,需要对高性能多核处理器进行统一管理,保证软件系统的快速处理、实时性和稳定性,提高航天软件多任务的综合管理效率。
(2)错误隔离保护与安全可靠运行要求。在没有妥善隔离手段的支持下,不同软件集中在一起实现,单一的软件故障,扩散到整体软件将几乎不可避免。因此需要在空间上对应用软件实施隔离和保护的分区管理机制,提高星载操作系统的可靠性。
(3)实现应用软件高效开发与复用。传统的软件开发模式,多是根据任务的不同需求,进行定制开发,工作内容在很大程度上存在重复性,对人力和时间都存在不必要的消耗,进而导致软件开发的效率低下。为适应航天任务爆发式增长的需要,提高软件通用性和适应性,进而提高软件开发效率和可靠性,需采用一种高效的、通用的软件开发模式,通过设计通用软件构件集合,进行构件化组装,适应不同的任务需求。
(4)支持软件动态扩展与卫星功能升级。现有卫星功能仍是“一星一用”模式,业务相对单一。卫星在轨运行后难以扩展和改用,导致功能固定,灵活性差[7]。未来通过软件来定义卫星系统功能,由一个模块化、通用化、可重构的硬件平台和各种可加载的应用软件组成,要求软件具备软件动态扩展、多应用程序(本文也称星载应用)运行能力,从而实现卫星的“一星多用、多星共用”,而且还可以通过软件更新和升级来提升卫星的战术性能,使其不断紧跟技术进步,满足不断变化的应用需求。
2 系统体系结构设计
2.1 基于S698的星载多核计算机硬件设计
星载多核处理器采用S698PM处理器,该处理器是一款抗辐照型高性能、高可靠、高集成度、低功耗的多核并行处理器SoC芯片。S698PM采用LEON4内核,遵循SPARC V8标准。S698PM芯片内部集成4个相同的高性能处理器核心,每个处理器核心均由32位RISC整型处理单元(IU)、双精度浮点处理单元(FPU)、高速一级缓存(L1 Cache)和存储器管理单元(MMU)等组成。该星载多核计算机系统采用S698PM芯片作为主处理器,外围配以静态随机存取存储器(SRAM)、第二代双倍速率同步动态随机存储器(DDR2)实现程序运行所需的存储空间。设计了以太网口、串口(UART)、1553B总线实现与其他设备的通信功能。并采用现场可编程门阵列(FPGA)实现(TM)、遥控(TC)等各种外设与接口功能。星载多核计算机系统设计如图1所示。
注:JTAG为联合测试工作组,是一种调试接口,GPIO为通用输入输出口,PROM为可编程只读存储器,EDAC为错误检错与纠错。
图1 星载多核计算机系统设计
Fig.1 Design of onboard multi-core computer system
2.2 多核分区操作系统体系结构设计
支持多核处理器的星载操作系统体系结构如图2所示。该体系结构通过多核处理器调度管理来实现星载软件对多核的支持,通过采用分层结构来实现对业务分层的支持,并通过采用分区机制实现不同应用之间的时空隔离,防止应用间的有害干扰。星载多核分区操作系统从体系结构上划分为3层,应用与分区层、中间件与服务层和操作系统核心层。
(1)核心层,提供操作系统核心服务,负责底层多核处理器调度与管理,既可以实现对多核的支持,也可以实现对分区隔离的支持。主要功能包括任务管理、分区管理与通信、多核调度、配置管理、板级支持包(BSP)、中断管理与异常管理等,配置组件包括文件系统、网络协议栈和接口管理功能。该层通过板级支持包BSP和统一驱动管理屏蔽底层硬件的差异,并通过接口管理向上层提供统一服务和功能。
(2)中间件与服务层,通过设计可组装的软件构件,为上层星载应用提供基础功能,包含空间数据系统咨询委员会(CCSDS)[8]制定的星载接口业务(SOIS)[9]、空间子网构件、星载子网构件、欧洲航天标准化组织(ECSS)定义的遥控和遥测包应用标准(PUS)[10]业务等多种业务及协议形成的软件构件。
(3)应用与分区层,包括星载软件系统中的主要功能应用。在操作系统核心层以及中间件与服务层的支撑下,该层的大部分功能都可由底层的通用业务构件组合实现,形成可独立加载和运行的应用软件APP。每个软件拥有独立的分区,分区间实现隔离和保护。除实现已确定的卫星任务外,还具备APP软件动态加载的能力,支持星载应用软件上注与卫星功能扩展。
注:TCP为传输控制协议,IP为网际互联协议,DTN为时延容忍网络,CPU为中央处理器。
图2 星载多核分区操作系统体系结构
Fig.2 Software architecture of onboard multi-core partition operating system
3 多核分区操作系统的关键技术与实现
3.1 多核处理器底层多任务实时调度
采用多核并行处理技术可以以较低的功耗获得更好的性能,但是也引入了系统资源、行为和状态的不确定性[11]。在多核系统中,多个并发任务竞争共享资源,操作系统中全局数据的访问状态,以及读操作执行时间不确定性与返回结果不确定性等问题都造成了系统的不确定性[12]。另外,多个任务在等待操作系统调度与执行过程中,由于动态资源分配,导致任务载入、资源分配时处理器处理时间不均等,从而影响执行序列,导致星载计算机系统任务的不确定性发生。
本文在设计时,将动态调度与静态调度方法相结合,实现多个任务在多个核上分配与运行。多核动态调度方法是在预分配的时间窗口内,以时间片为周期,根据任务优先级将优先级最高的几个任务分配到当前空闲的核上执行。这种方式效率较高,保证了任务的实时性。静态调度方法根据用户的配置预先进行静态配置,从而获得确定的总体任务执行序列,操作系统在调度时将这些相关性任务分配到相同的核上并按顺序执行,以减少资源抢占和冲突。
星载多核分区操作系统实现了处理器绑定方法,以解决不同分区中的任务在执行过程中对处理器核心资源的竞争,缓解系统的处理器资源和状态的不确定性问题。该方法将相关的任务绑定到同一个处理器,而不相关任务的执行顺序不会受影响,相关的任务在单处理器上的调度是可以确定的,因而整个系统中所有分区的任务执行可以是确定的。
多核任务动态调度方法最大程度地保证了任务的实时性和多个处理器核的执行效率,静态调度方法和处理器绑定方法可以屏蔽由于动态多分区切换所导致的调度不确定性因素,两者结合兼顾了星载多核处理器的执行效率和一些星载任务执行的确定性。
3.2 分区管理技术
分区管理在操作系统以及星载计算机结构上采取整体措施,通过划分一定的分区,使不同的软件在不同的分区中运行,确保软件功能的安全性。分区管理技术主要是对于关键资源即处理器和内存采用内存管理单元(Memory Management Unit,MMU)的架构,为每个应用任务划分独立空间,通过建立不同空间和公用空间的授权访问机制,从而避免不同地址空间的程序对其他空间的无意或恶意访问。基于MMU设计分区机制,隔离不同安全等级、实时性的用户业务及系统扩展功能。
在星载多核分区操作系统中,用户可以通过配置文件配置空间和时间分区的调度信息,实现空间和时间分区的调度动态配置。分区操作系统通过内存管理单元保证空间分区的空间隔离,通过时间周期轮转调度方法完成时间分区调度,在分区内可实现优先级调度或者轮转调度策略。
分区调度主要完成按固定的、基于周期的时间序列进行CPU资源的分配,每个分区按照主时间框架分配给它的分区窗口(一个或多个)被调度程序所激活。本星载操作系统进行分区调度的原则:调度单元是分区,分区没有优先级,分区调度算法预先确定并按照固定周期重复执行。
通过分区管理设计,将不同软件运行于不同的分区,分区之间进行空间隔离与保护,即使一个软件模块出现问题,也不会影响整个系统和导致其他软件模块失效,可有效解决星载大规模软件的可靠性安全性问题。
3.3 APP动态加载技术
目前,星载应用软件难以扩展和更改,每个应用软件独占一台星载计算机,不利于资源综合。研究APP动态加载技术,使星载操作系统能够像手机系统一样,灵活加载各类APP程序,能够实现星载应用重构,有利于实现卫星应用的定制化和功能扩展[13]。
如图3所示,APP动态加载技术首先将应用程序编译链接成动态加载可执行文件,文件中包含所有需要重定位数据的地址。在收到用户程序加载应用程序请求时,首先检查可执行文件的完整性、正确性,当通过检查后,根据文件大小,在系统的存储空间中分配空间,将文件加载到系统存储空间。动态加载[13]时通过重定位的数据,找到该数据所在的位置,把该数据地址减去虚拟的内存地址再加上目标端申请到的空间的首地址,这样就完成了重定位,然后把系统指针指向代码的首地址,直接运行即可完成动态加载。
图3 APP动态加载过程Fig.3 Dynamic loading process of APP
该项技术通过APP动态加载技术实现软件功能动态扩展,进而实现卫星功能扩展,使卫星的灵活性和智能化程度大大提升,也为实现软件定义卫星功能提供了基础。
3.4 可配置软件构件技术
可配置软件构件技术将过去需要由应用软件实现的标准化、通用化功能,以中间件形式提供,作为星载操作系统的扩展,为卫星应用提供统一的星载软件基础服务与网络扩展服务,如星载接口管理、星载时间管理、星间网络服务、星内通信服务等,有利于实现星载应用快速开发,提高软件研制效率。
典型的星载软件构件模型由对外接口、实现体和规约3个要素组成,它满足一定的航天器软件需求,并通过接口提供服务。它应具备两个基本属性:组装性,构件用户能够根据既定规则将构件进行组装;功能性,必须具备具体的、明确的一个或多个功能,能够被用户调用,并在预定的运行环境下正确运行[14]。
星载软件构件对外提供的接口,包括:
(1)初始化接口,供其它构件调用,完成构件的初始化;
(2)功能接口,可供其它构件调用,完成本构件的功能;
(3)构件配置接口,供系统配置者调用,完成构件的运行时配置。
基于星载多核分区软件体系结构,将星载业务功能标准化,并采用软件构件实现,形成统一的中间件与服务层,该层通过功能接口向上层软件构件提供服务。中间件与服务层提供的统一星载基础服务见表1。
表1 中间件与服务层提供的星载基础服务
卫星软件通过组装标准化的构件以及任务特殊需求的构件,可实现层次化的基于软件构件的快速集成开发与组装过程,即从原子组件到复合组件到分区应用软件再到整星软件功能的组装过程。
3.5 多核分区操作系统的实现与验证
本文在某卫星中心计算机中实现了基于S698四核处理器的星载计算机,并在该计算机中运行多核分区操作系统,对该操作系统上述功能进行了测试,测试情况见表2。
表2 测试情况
4 结束语
为适应航天任务和星载计算机的发展需求,本文设计了星载多核分区操作系统,具有动静态结合的多核处理器实时调度、故障隔离与保护的分时分区管理机制、APP动态加载与卫星功能灵活扩展、支持上层应用软件快速组装的特点,解决了星载多核分区操作系统缺失问题,可为空间广泛应用多核处理器提供基础的安全可靠的软件运行平台。