首页 > 范文大全 > 正文

分区操作系统下的分区间通信的设计

开篇:润墨网以专业的文秘视角,为您筛选了一篇分区操作系统下的分区间通信的设计范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

摘 要: 分区操作系统是新一代综合化航电系统的基础,提供时间分区和空间分区机制,保证综合后的应用不会相互影响。由于分区之间是隔离的,为了实现分区之间信息的交换,需要采用分区间通信方式进行数据交换。在此分析了分区操作系统软件结构以及ARINC653标准对分区间通信的要求,着重讨论队列端口和采样端口的实现方法。此外,在此还提出了一种基于虚端口和虚分区的通信方法,解决了分区内应用使用端口与模块内的设备以及和其他模块的分区进行通信的问题,提高了应用程序的可移植性。

关键词: 分区间通信; 队列端口; 采样端口; 虚端口

中图分类号: TN911?34 文献标识码: A 文章编号: 1004?373X(2013)14?0058?03

Design of inter?partition communication under partition operating system

XU Xiao?guang, YUN Hai?shun, XING Liang

(Aeronautical Computing Technology Research Institute, Xi’an 710119, China)

Abstract:The partition operating system is a basis of new generation integrated avionics system. It supports time partitioning and space partitioning mechanisms and ensures the integrated applications, which will not affect each other. Becasue of isolation between partitions, the inter?partition communication is required to exchange information between the partitions. The software structure of the partition operating system and the requirements that ARINC653 standard defines for inter?partition communication are analyzed in this paper. The design methods of the queuing port and sampling port are discussed emphatically. In addition, a communication method based on pseudo ports and pesudo partitions is also proposed in this paper. This method solve the problem of partition applications which adopt ports to communicate with equipments in the same module or partitions of other modules. This method improved the portability of application programs.

Keywords: inter?partition communication; queuing port; sampling port; pseudo port

0 引 言

随着模块化、综合化航空电子IMA系统的发展,原先的联合式、分散的各种航空电子子系统被集成到一起,以减轻飞机系统的重量,提高硬件资源利用率,并提高未来飞机的作战能力。为了适应模块化、综合化航空电子IMA系统的需求,美国航电委员会针对数据综合化的要求提出了应用程序接口标准ARINC653[1]。ARINC653是目前满足综合化航电实时操作系统需求的主要操作系统规范,其中最重要的是提出了分区的概念。分区操作系统的空间和时间是相互隔离的,分区间通信是分区之间实现信息交换的主要途径。

ARINC653标准PART1的标准定义了采样端口和队列端口两类服务,本文在介绍了分区间通信的概念的基础上,着重阐述队列端口的原理、设计和实现需要解决的主要问题,及采用的关键技术。第1节描述了分区操作系统的软件结构;第2节对分区间通信相关概念及原理进行说明,包括端口、通道和消息等概念及之间的关系;第3节描述队列端口、采样端口和模块间通信的设计与现实;第4节进行总结。

1 分区操作系统软件结构

符合ARINC653标准的分区操作系统[2]通常采用的软件结构[3]如图1所示,分为3层,应用层、操作系统层、硬件模块支持层。应用层为综合后的航电应用,应用位于分区之内,时间和空间受限于分区[4],应用运行于用户态;操作系统包括分区操作系统作(PartitionOS)和核心操作系统(CoreOS),PartitionOS是分区内资源的管理者驻留于分区内,实现分区内的进程管理、调度以及资源的调配[5]。CoreOS主要实现分区的管理、调度,分区间的通信、系统的故障监控以及系统内的资源管理和设备管理。

2 分区间通信的原理

分区间通信[6]主要由端口、通道和消息组成。分区间通信是通过端口发送和接收消息完成的,消息由一个源端口发送给一个或多个目的端口。分区通过端口的直接互联实现了间接互联。通道提供了端口之间的互联机制,每一条通道指明了发送消息的端口名称和所属分区,及接收消息的端口和所属分区。分区间通信端口、通道和消息之间的关系如图1所示。

图1 分区操作系统软件结构

在系统构建阶段,通过系统配置文件对端口和通道等分区间通信所需的资源进行配置。核心操作系统根据配置信息完成端口、通道、消息缓冲区的创建及消息传输机制的初始化,如图2所示。

图2 端口、消息与通道

在分区内使用端口时需要首先调用创建端口服务,完成分区内端口对象创建,实现与核心中通信资源的挂接。

通道定义了一个源端口和一个或多个目的端口之间的逻辑连接关系,同时也定义了消息从源端口传输到目的端口的传输模式及特点。在分区应用的配置文件中定义端口的各个特征,在系统的配置文件还需要单独以(端口名称、分区名称)对的方式定义连接关系。将端口和通道的信息组合放入一个数据结构中,主要信息如表1所示。

表1 通道和端口信息表

端口模式包括两种队列和采样两种,主要区别如下:采样模式适用于传输一般是相似且不断进行更新的数据消息。系统不对消息提供排队机制,在系统中仅有一个有效的消息缓冲区,消息保留在缓冲区中直到被新发送的消息所覆盖。分区可以随时发送消息给采样源端口,或随时访问目的端口消息。

与采样端口相对比,队列模式下适用于传输包含不同的数据的消息,且不允许消息发生覆盖,消息一般情况下不允许丢失。消息保留在源端口中直到发送成功,或保留在目的端口中,直到被应用端口成功接收。

协议用于队列模式下,如果通道上的目的端口多于一个,且有目的端口发生阻塞的情况下指导消息传输。协议包括发送者阻塞(SENDER_BLOCK)、接收者丢弃(RECEIVER_DISCARD)和不适用(NOT_APPLICABLE)。SENDER_BLOCK协议:消息发送给通道上所有的目的端口。如果任意一个目的端口满,消息在发送端口的队列按照FIFO次序排队,不再传输消息给目的端口中的任何一个端口,直到目的端口都可以接收消息。SENDER_BLOCK协议的优点在于其不会丢失消息,缺点是一个发送阻塞的目的端口会影响到其他目的端口。

RECEIVER_DISCARD协议:当通道上的一个目的端口满,源端口将为此目的端口丢弃此消息,并通知此的目的端口消息溢出。RECEIVER_DISCARD协议的意义在于避免了一个端口发生错误影响其他端口的情况,缺点是可能因为没有及时接收消息发生消息丢失。协议是整个通道上范畴内的属性,因为一条通道有且仅有一个源端口,故在实现时将协议信息保存源端口的数据结构中。目的端口配置的协议为NOT_APPLICABLE。

3 分区间通信的设计

3.1 队列端口设计

通过队列源端口发送消息时,应用请求发送的新消息被暂时存储在端口的消息队列中。若从队列端口接收消息,接收端口队列中最早到达的消息将被从消息队列中移除,返回给应用软件。

当进程向消息队列已满的队列端口发送消息,或进程从一个消息队列空的队列端口中接收消息时,进程需要进行等待,此时会发生进程的重新调度。通过设置超时时间,可以限制等待时间或不等待。对于队列模式下的端口,进程可以按照先进先出(FIFO)或者基于优先级(Priority)进行排队等待。排队规则在创建端口时指定。

通过队列端口发送和接收消息的过程如图3所示。用户通过队列端口发送消息时,如果发送端口没有空闲的缓冲区,进程将被阻塞到发送进程等待队列上。如果端口有空闲缓冲区,将通过系统调用交给通道控制程序,待发送的消息首先从系统的消息缓冲区获取一个缓冲,将消息拷贝到系统缓冲区中。然后,将缓冲区的指针插入到源端口的消息队列中。通道控制程序将根据端口的之间的互联关系,将缓冲区的指针插入到目的端口的消息队列中。通过操作缓冲区指针的方式可以减少数据拷贝的次数,提高数据操作的效率。如果目的端口为空,将通知目的分区有消息到达。

图3 队列端口消息传输过程

用户进程通过队列消息接收服务从接收端口接收消息时,如果目的端口没有消息,那么进程将被阻塞到从此端口接收消息的等待队列上。如果目的端口有消息,产生一个系统调用,从目的端口的消息队列中移除第一条消息对应的缓冲区指针,从核心OS内的缓冲区中拷贝消息后返回。如果所有的目的端口接收了消息,通知系统缓冲区释放系统的相应的消息缓冲及源端口消息队列的空间。

3.2 采样端口设计

采样端口与队列端口类似,不同之处在于发送接收操作不会挂起用户进程,而且端口最多只缓冲一个消息,允许消息的覆盖。对于发送端口,当用户向端口发送数据时,如果端口没有数据,那么拷贝数据到端口缓冲区中,如果端口有消息那么覆盖原先的消息;对于接收端口,当数据到达接收端口时,记录消息到达端口的接收时间,此时如果端口没有消息,拷贝消息到端口缓冲区中,如果有消息覆盖旧消息。当用户从接收端口接收消息时,如果没有消息,返回用户此时端口空的状态,如果有消息,那么根据当前时间和消息到达端口的时间计算消息年龄,如果消息年龄大于端口配置的刷新时间,那么标记该消息为有效消息,否则为无效消息,拷贝消息并将消息有效性返回用户。

3.3 模块间通信的设计

分区间通信可以用于模块内通信和模块间通信[6]。模块内通信是同一个模块内多个分区之间的通信,通道连接的发送分区和接收分区在同一个OS上。模块间是不同模块上的分区之间以及分区和设备之间的通信,通道连接的发送分区和接收分区不在一个OS上。

模块间通信使用虚分区和虚端口来实现,对于通信的一方来说,如果另一方不在本模块内,可以使用虚分区和虚端口来代替另一方。虚分区和虚端口通常和具体的通信设备相关,通过设备驱动来收发数据。模块内通信和模块间通信的连接关系如图4所示。

图4 模块内/模块间分区间通信连接关系

模块间通信数据传输过程如图5所示,如果是发送方向,那么通道源是位于本模块内上的分区内的发送端口,通道的目的位于模块之外,此时需要给通道目的配置虚端口,虚端口对应外部设备。用户向发送端口发送消息后,核心OS将消息指针给虚端口,虚端口控制程序调用对应驱动发送消息;如果是接收方向,那么通道的目位于本模块上的分区内的接收端口,通道的源位于模块外,需要给通道源配置虚端口。虚端口控制程序调用

(下转第64页)

设备驱动接收消息,将收到的消息传递给应用端口。

图5 模块间通信数据传输过程

4 结 语

本文对分区间通信的相关概念及原理进行了介绍,重点对队列端口和采样端口消息传输原理进行阐述,并提出虚分区和虚端口方法用于模块间的分区间通信。

参考文献

[1] Aeronautical Radio,Inc. Avionics application software standard interface [S]. [S.l.]: Aeronautical Radio,Inc., 2005.

[2] WindRiver Systems, Inc. VxWorks_653_programmers_guide_2.2 [M]. [S.l.]: WindRiver Systems, Inc., 2007.

[3] NASA. Partitioning in avionics architectures requirements mechanisms and assurance [R]. US: NASA, 2000.

[4] 乔乃强.嵌入式实时操作系统分区机制的设计与实现[D].南京:南京航空航天大学,2011.

[5] 李运喜.时间分区的设计与实现[J].航空计算技术,2010(3):65?67.

[6] 代杰.分区间通信在机载计算机系统中的应用研究[J].工业控制计算机,2011(10):20?23.