一种应用于分区操作系统的虚拟化SOCKET通信方法
2017-10-21周霆郭芳超
周霆 郭芳超
摘 要:综合化航空电子系统进一步提升综合化水平以后,大量应用通过分区操作系统提供的分区执行环境共存于同一硬件处理平台,可能出现有限的TCP/IP网络硬件难以满足多个分区并行网络通信的问题,因此本文提出一种基于C/S服务的SOCKET通信虚拟化机制。该方法通过建立SERVER端分区来提供网络服务,并在充当CLIENT端的普通应用分区向用户提供透明的SOCKET桩接口,同时利用操作系统的IPC通信机制实现SERVER端和CLIENT端的服务通信,从而实现在SOCKET层的网络虚拟化,解决多个分区在物理网络设备有限的情况下并行使用SOCKET进行网络通信的问题,实现了一定程度的虚拟化网络共享服务。
关键词:分区操作系统;SOCKET通信;C/S服务;网络虚拟化
中图分类号:TP311 文献标识码:A
随着航空电子技术的发展,在一个物理处理平台上将集成越来越多,甚至来自于多个机载子系统的软件任务[ 1 ],综合化模块化航空电子系统(Integrated Modular Avionics,简称IMA)进一步提升综合的水平成为必然发展趋势。未来综合范围将从航电向机电、飞控进一步扩展,实现跨系统大综合,越来越多的应用系统将集成在同一个操作系统平台之上。
为了解决综合化带来的故障隔离和确定性问题,现有的高安全机载操作系统都采用了分区机制,提供分区间隔离与分区间通信能力,但对于高度综合化以后引发的I/O资源不足和冲突的问题却没有充分考虑[ 2 ]。
本文提出一种虚拟化SOCKET通信方法,解决分区操作系统多个分区共享网络设备的情况下使用SOCKET机制和接口进行网络通信的问题。随着航空电子技术的发展,在一个物理处理平台上将集成越来越多,甚至来自于多个机载子系统的软件任务,综合化模块化航空电子系统(Integrated Modular Avionics,简称IMA)进一步提升综合的水平成为必然发展趋势。
目前,越来越多的IMA应用都驻留于分区操作系统提供的分区应用运行环境中,由于应用系统的复杂性,多个分区的任务很可能需要进行通信或者数据交互。常见的如IPC、共享内存等数据通信方式存在一些不足,IPC通信效率不高,需要多次数据拷贝且通信数据量受限,普通的共享内存则会出现数据安全问题。基于上述原因,需要进一步研究分区操作系统的分区间通信机制的实现,在保证通信效率的同时,提升通信数据的safety和security安全防护能力。
1 概述
典型的分区操作系统架构包括多个应用分区和服务分区。应用分区向用户提供时间、空间隔离的独立应用运行环境。应用分区作为客户端(CLIENT)可以向作为服务端(SERVER)的公共服务分区以C/S服务的形式申请组件/中间件/设备服务[ 3 ]。
在这种架构下,一方面,由于在同一平台上的应用任务数量的增多,导致更多的分区产了通信需求。以TCP/IP网络为例,目前主流的机载综合处理硬件平台如PowerPC 75x和86xx系列,都仅提供最多2路物理网卡,面对大量同平台应用可能出现的网络通信需求,显然是不够用的,如果不支持设备共享,将无法解决网络和I/O设备不够用的问题。
另一方面,如果多应用混合场景下多个应用分区直接操纵同一网络或I/O设备,对任务的执行时间确定性和数据正确性都会产生不确定的影响。在硬件設备资源有限的情况下,虚拟化多分区的系统架构势必引起资源访问和状态控制的冲突。分区操作系统需要在软件层面来解决多任务间的硬件资源冲突,实现任务级的资源隔离。
使用SOCKET(套接字)的机制和接口进行任务间网络通信已经成为目前主流的网络编程开发方式。由于分区空间的隔离性,目前分区操作系统的SOCKET应用都建立在本地驻留TCP/IP协议栈和物理网卡的基础之上。基于上述可能出现的网络资源不足和访问冲突问题,本文给出一种基于C/S服务的SOCKET虚拟化机制,以解决在分区操作系统中多个分区共享网络设备时使用SOCKET并行进行网络通信的引发的网络网卡不足和访问冲突问题。
2 统一设备管理框架
首先,本文提出一种统一设备管理框架来用作软件层面的设备虚拟化解决方案,以解决在多分区系统中包括网络设备在内的多种I/O设备所存在的共享冲突问题和设备的统一化管理问题。
本文拟搭建的设备管理框架如图1所示。所有分区通过I/O管理模块统一管理包括独占设备和共享设备在内的两类分区设备。对于独占设备,其地址空间映射在所有者的分区地址空间内,分区应用程序直接使用本分区的原始设备驱动对设备进行访问;对于共享设备,其地址空间位于设备服务分区内,共享设备采用客户(CLIENT)/服务器(SERVER)模式完成共享设备访问。其中,设备服务分区作为SERVER端,包含真实设备驱动程序和协议栈接口。
客户端分区的桩驱动通过IPC通信向服务端分区发送设备访问请求,服务端分区包含专门的设备服务器,调用真实的设备驱动或协议栈完成设备访问动作。SERVER端服务器将使用带截止期的事务链等机制来将混合任务可能发起的并行化I/O操作转化为时间确定的串行化事务。
在这种管理框架下,所有的设备驱动程序都位于内核之外的用户态空间,具有以下优点:
1)大量的操作系统BUG都处于设备驱动程序中,将这些设备驱动程序从内核中去除,将显著提升内核可靠性;
2)把设备驱动程序置于内核之外可以大幅降低内核的代码规模,获取更小的内核尺寸,從而能够满足目前的形式化验证方法对内核代码规模的约束。
3 C/S模式的虚拟化SOCKET服务框架
根据C/S服务的一般原理,完整的虚拟化SOCKET的C/S模式框架包括客户端配置、服务器端配置,以及客户端和服务器端的通信配置。一个配置物理网卡和完整TCP/IP协议栈的网络服务分区充当Sever端,提供SOCKET通信服务;其他需要以共享方式使用SOCKET的分区(CLIENT端)在本地使用虚拟化的SOCKET接口,向SERVER端发送服务请求;SERVER端和CLIENT端使用IPC通信进行命令转发,使用共享内存进行数据转发[ 4 ]。
3.1 SERVER端分区功能
a)一个负责处理外部网络与CLIENT端SOCKET命令双向动作的设备监听与响应任务A,此任务循环等待并依次处理物理网卡的数据收发和任务B转发而来的CLIENT端请求,并向CLIENT端进行必要的回复;
b)一个专门接收CLIENT端SOCKET命令(以IPC消息的形式存在)的处理任务B,此任务在接收到CLIENT端命令后,激活任务A进行相应处理。
3.2 CLIENT端分区功能
一组用IPC通信重新实现的虚拟化SOCKET接口库,在下文描述中使用v_XX来指代虚拟化的SOCKET接口,v_XX接口调用都通过IPC操作将相应的服务命令发送给SERVER端的任务B。
3.3 IPC通信功能配置
a)CLIENT端分区的应用程序任务Y需要使用IPC_SEND向SERVER端的任务B发送SOCKET服务请求,使用IPC_RECV向SERVER端的任务A请求服务回复。
b)SERVER端分区的任务A使用IPC_SEND向CLIENT端应用程序任务Y发送服务回复。
4 虚拟化SOCKET的工作原理
如图2所示,是一套完整的虚拟化SOCKET工作流程,CLIENT端分區_1通过虚拟化SOCKET接口,借助IPC通信机制与SERVER端分区交互,SERVER端分区利用协议栈和网卡驱动,通过物理网卡与系统外部进行网络交互。
a)分区操作系统启动以后,SERVER分区的任务A进入处理循环,等待依次处理网卡事件和任务B转发而来的CLIENT端命令,任务B等待接收CLIENT端发来的IPC消息(包含套接字命令和相关信息);
b)CLIENT端任务Y开始建立套接字准备进行网络通信,首先调用v_socket、v_bind等接口建立SOCKET设备和连接(如果是TCP通信,则调用v_listen或v_connect来监听或建立连接,如果应用程序是服务端,则在监听到請求之后调用v_accept接收请求。UDP通信可以不用建立连接),通过IPC_SEND向SERVER端的任务发送套接字命令请求(此时可使用v_read/v_write、v_recv/v_send等套接字读写接口进行网络通信),并调用IPC_RECV等待从任务A返回执行结果。
c)SERVER分区的任务B接受到CLIENT端的v_socket、v_bind等服务请求后激活任务A进行SOCKET设备的创建和连接建立操作,并进行额外的共享内存建立工作,以便于后续与CLIENT分区进行网络数据的读/写转发,随后将套接字句柄和网络地址等信息通过IPC_SEND回复给任务Y,此时SOCKET通信准备就绪。
d)CLIENT端任务Y通过套接字进行网络收据收/发,所有收发命令都与步骤b)和c)一样转发给任务A执行,并在接收到任务A的回复后完成一次SOCKET通信动作。
5 数据包和服务命令的通信配置
虚拟化SOCKET通信机制包含大量的服务端和客户端之间的通信,大量的通信交互行为成为制约虚拟化SOCKET性能的瓶颈所在。梳理上述的SOCKET通信流程,可以看出大部分的交互消息属于服务命令,而不是大数据量的网络数据包,因此需要着重提升服务命令的通信性能。因此,为了提升服务性能,本方法对分区之间的数据交互采取了特异化处理。对服务命令采用短IPC通信的方式,对大数据量的数据包采用共享内存的方式。
短IPC利用系统调用上下文保存和恢复的过程完成消息在用户态和操作系统内核之间的传递,在内核只需要1次拷贝就可以完成数据传递。同时,IPC机制是一种任务间的同步通信方式,适用于C/S模式要求的任务间的同步阻塞工作机制。
6 结语
本文深入研究了机载嵌入式分区操作系统在综合化程度提升以后出现的设备共享和互斥保护问题,给出了解决多分区网络共享,基于C/S服务的虚拟化SOCKET通信方法,解决了SOCKET层的网络共享问题。通过在某分区实时操作系统中的实现,证实文中涉及的设计和实现方法是高效可行的。在今后的工作中,我们将进一步进行策略和机制的抽象,研究能够覆盖多种设备的,统一的分区操作系统设备共享方案。
参考文献:
[1] Gernot Heiser,Chief Technology.Virtualization for Embedded Systems,OK 40036:2007.
[2] Asif Iqbal,Nayeema Sadeque,Rafika Ida Mutia.An Overview of Microkernel,Hypervisor and Microvisor Virtualization Approaches for Embedded Systems,Sweden.
[3] 郝继锋,任晓瑞,胡宁.一种基于微核架构的虚拟化设备高效访问模型.电子技术,2013 42(7):4-6.
[4] VxWorks中任务恢复机制的设计与实现[J].空军工程大学学报(自然科学版),2013,14(5):3-4.
作者简介:
周霆(1984-),男,陕西洋县人,主要从事嵌入式实时操作系统方向的研究。