基于VxWorks的全IP开发平台进程通信处理机制
扫描二维码
随时随地手机看文章
摘要:给出了基于AMCC的NP7250、NPX5700和NPX5800交换套片的全IP交换平台的构建方案,重点介绍了在基于Vxworks的全IP交换平台上的进程通信模块的设计和实现方案。模块主要实现相同处理器内和不同处理器之间进程间通信功能,进程间的通信主要依靠调度任务从邮箱中接收消息,并把消息派发到各个进程的消息队列来实现,底层协议类型包括可靠通信协议(TCP)和不可靠通信协议(UDP)。
关键词:嵌入式操作系统;网络处理器单元;消息队列;Vxworks
引言
随着IP技术的迅速发展,“Everything over IP”的观念已深入人心。众多移动通信设备制造商都致力于基于全IP交换平台之上的3G、4G产品开发,基于全IP构建开放通信体系架构,真正作到核心网和无线网络各个产品的模块化、积木化。将核心网、无线接入网统一考虑,做到技术上的重用、接口上的统一,避免独立开发各模块特别是底层开发可能存在的重复劳动,实现全业务融合,打造一体化的可增值、可扩展的多业务集成通信平台,已成为业界共识。在整个系统设计的过程中,主要的目标在于软件支撑的统一性,这要求相关的硬件系统也需要统一考虑成一个硬件平台的概念。这样将来就可以在统一的软件支撑上开发各种不同的应用业务。
1 全IP开发平台架构
全IP交换平台基于Crossbar的三层交换,可根据系统容量需求和实际应用要求配置。当容量较大时,采用CrossBar+线卡方式实现三层交换方式,具体线卡配置的数目根据实际数据流量以及资源在各个应用实体的利用情况确定。当容量较小时,采用线卡互连提供三层交换。位于全IP交换平台之上的移动通信设备单板需要实现的移动通信功能靠Host(主)CPU完成。本文中的全IP开发平台选用AMCC的NP7250、PX5700和NPX5800交换套片作为硬件基础,主CPU是MPC8260,主CPU上的操作系统是VxWorks。其中,NP7250主要实现级连线卡的作用,完成基本信元/包的转发功能;NPX5700是流量控制芯片,实现对数据流的输入接纳和输出调度功能,是IP开发平台QoS保证的核心,两套NPX5700构成双向10Gbps的处理能力;NPX5800是一种交换网芯片,用于连接NPX5700,实现交换功能。
全IP交换平台系统架构如图1所示,在嵌入式操作系统VxWorks之上还有一个操作系统子系统,该层是VxWorks封装层。嵌入式操作系统封装层的目的之一是对上层应用屏蔽底层硬件、OS、网络的差别,给上层应用软件提供统一规范的调用接口,大大降低了应用软件开发人员的开发难度,也使开发出的应用软件有较好的跨平台性、可移植性、可维护性和代码继承性。封装层一般会对进程管理、内存管理、进程通信等核心功能进行重新定义和优化,以适应特定应用领域的开发需求。
下面以通信类嵌入式设备应用领域为背景来讨论操作系统子系统中的进程通信管理模块设计和实现方案。
2 进程通信模块设计
通信模块为进程之间的通信提供统一的接口。各个处理器都处于一个以太网上,前台单板之间互相可以直达,没有中间路由,前后台之间通过OMP转发。根据通信区域的不同可分为:①相同处理器内同一任务下的进程间通信;②相同处理器内不同任务下的进程间通信;③相同处理器内的任务之间的通信;④相同处理器内的进程到任务的通信;⑤相同处理器内的任务到进程的通信;⑥不同处理器间的进程间通信。
底层协议类型包括可靠通信协议(TCP)和不可靠通信协议(UDP)。对话方式主要采用以下5种:①处理器内广播(内部消息机制);②分布式系统内组播(UDP);③分布式系统内广播(UDP);④多对多通信(UDP),也就是无连接的点对点通信;⑤点对点通信(TCP和内部消息机制)。
2.1 通信处理流程
同一处理器内任务之间通信流程:每个调度任务建立一个邮箱,其他任务也建立自己的邮箱,进程发送到另一个任务的进程的消息首先发送到目的进程所在任务的邮箱中进行缓存,然后由调度任务派发到目的进程的消息队列中;进程到其他类型任务的消息发送到相应任务的邮箱,其他类型的任务之间消息发送到对方邮箱。根据为应用提供的消息类型将任务间消息发送分类。发送异步紧迫消息,将消息发送到任务消息队列的头部;发送异步普通消息,将消息发送到任务消息队列的尾部。
同一任务内的进程通信流程如图2所示,每一个进程拥有一个消息队列,进程向同一任务内进程发送,通过内部接口直接将消息挂到另一个进程的消息队列中。进程向同一任务内进程发送同步应答消息,不通过任务邮箱,目的进程的状态直接改变即可。任务内的进程间通信不能通过任务的邮箱进行转发,这是为了避免在邮箱满的时候任务向自己的邮箱发送消息,导致任务死锁。
不同处理器间的进程通信流程如图3所示,下面根据不同的对话方式分别描述通信处理流程。
①点对点通信。每个需要通信的处理器之间维护一条TCP连接,所有连接组成连接表。进程通过接口发送的消息首先挂在相应的连接的发送队列中。通信任务在连接表中的所有连接上监测链路状态,在连接写就绪时依序发送连接发送队列中的消息,在连接读就绪时接收连接上的消息并向上层转发,在连接异常时告警并恢复链路状态,在检查报到达的时候将链路丢失的检查报清零。
②多对多通信。使用一个公用的UDP套接口,发送时指定协议类型为不可靠传输协议的时候,根据逻辑地址查找到对应的IP地址,直接从UDP套接口上发送出去。组播任务同样守护在UDP套接口上,当套接口读就绪的时候接收消息并向上层转发。
③组播。采用静态分组的方法,每一个组播组对应一个到组播地址,所有这种对应关系组成分组表。每一处理器可以加入特定组播组,也可以随时脱离组播组。组播任务守护在组播组表的组播套接口上,在套接口读就绪时接收消息并向上层转发。进程直接在组播套接字上发送消息。
④广播。分组表中有一个特殊项用作广播,该组成员为系统内所有处理器,组播任务在该项上守护,进行和上面相同的处理。
⑤处理器内广播。向同一个进程类型的实例分别发送一条消息的拷贝。
消息的派发过程如图4所示。调度任务从自己的邮箱接收消息,并负责向各个进程的消息队列中派发,在派发的过程中区别消息的类型。根据消息类型描述处理流程,派发同步应答消息时,将目标进程转入就绪状态,设置解除阻塞原因为应答到;派发同步超时消息时,将目标进程转入就绪状态,设置解除阻塞原因为同步超时;派发延时结束消息时,将目标进程转入就绪状态,设置解除阻塞原因为延时结束;派发其他类型的消息时,将消息挂到目标进程消息队列尾部,如果目标进程因为没有消息而阻塞,将目标进程转入就绪状态。
2.2 TCP连接状态机设计
TCP连接的状态记录在TCP连接控制块的状态域里面,本端上层应用发起TCP连接建立请求时,TCP连接的状态迁移如图5所示。①没有激活状态:接收到来自上层应用的连接发起请求后,向对端发起连接,进入等待写就绪状态。②等待写就绪状态:如果接收到本端套接字的写就绪事件,向对端发送检查报,进入等待对端检查报状态;如果接收到对端连接请求(连接请求1)并且对端IP地址比自己的IP地址小,拒绝请求,继续等待;如果接收到对端连接请求(连接请求2)并且对端IP地址比自己的IP地址大,接收请求,终止本端发起的连接过程,启动连接接收的状态机。③等待检查报状态:收到检查报后,连接成功,进入工作状态;如果接收到对端连接请求(连接请求1)并且对端IP地址比自己的IP地址小,拒绝请求,继续等待;如果接收到对端连接请求(连接请求2)并且对端IP地址比自己的IP地址大,接收请求,终止本端发起的连接过程,启动连接接收的状态机。④工作状态:如果收到数据收发请求,则进行数据收发,并保持状态;如果收到连接的关闭请求,则关闭本连接,转到连接没有激活状态;如果收到对端的连接建立请求,则启动连接的接收状态机,并保持现在的连接在工作状态。
在上述各种状态下收到连接异常的信息都异常关闭连接,转到连接没有激活状态。
本端收到对端发起TCP连接建立请求时,TCP连接的状态迁移如图6所示。①没有激活状态:接收到对端的连接请求后,进入等待检查报状态;②等待检查报状态:如果接收到对端的检查报,进入等待写就绪状态;如果接收到对端连接请求,接收请求,终止上次的连接过程,进入等待检查报状态;③等待写就绪状态:如果收到写就绪事件,向对端发送检查报,连接成功,如果以前存在工作的链路,关闭该链路,本链路投入工作状态;如果接收到对端连接请求,接收请求,终止本次连接过程,切换到等待检查报状态;④工作状态:如果收到数据收发请求,则进行数据收发,并保持状态;如果收到连接的关闭请求,则关闭本连接,转到连接没有激活状态;如果收到对端的连接建立请求,则启动备份连接的建立状态机,并保持状态。
在上述各种状态下收到连接异常的信息都异常关闭连接。
3 主要数据结构
结语
通过全IP的开放融合通信体系架构,可以在单一融合的IP网络上运行语音、消息、会议、数据等多种通信应用,基本的多业务接入、多设备集成,逐步发展到支持各种标准化接口,打造一个全新的一体化集成通信平台,满足应用交互通信的需求。