一种多主机进程间通信的方法技术

技术编号:10534707 阅读:137 留言:0更新日期:2014-10-15 13:35
本发明专利技术公开一种多主机进程间通信的方法,包括如下内容:若是同一主机内的不同进程间需要通信,使用两级共享内存来收发报文,从而实现数据的零拷贝;若是不同主机内的进程需要通信,将报文组织成二层以太网帧格式,不经过协议栈直接发送给接收方;且前述两种通信方式采用统一的函数接口和统一的通信报文格式。此种通信方法可提高多主机环境下进程间的通信效率,降低应用程序编程接口的复杂度。

【技术实现步骤摘要】
【专利摘要】本专利技术公开,包括如下内容:若是同一主机内的不同进程间需要通信,使用两级共享内存来收发报文,从而实现数据的零拷贝;若是不同主机内的进程需要通信,将报文组织成二层以太网帧格式,不经过协议栈直接发送给接收方;且前述两种通信方式采用统一的函数接口和统一的通信报文格式。此种通信方法可提高多主机环境下进程间的通信效率,降低应用程序编程接口的复杂度。【专利说明】
本专利技术涉及。
技术介绍
传统的操作系统进程间通信的方法包括套接字、管道、消息队列及共享内存。当采 用套接字、管道、消息队列进行进程间通信时,数据的传递模式为:A进程将数据拷贝至内 核缓冲区,通知B进程;B进程得到通知后将数据从内核拷贝至进程缓冲区,然后处理数据。 这种模式下有效数据需要在进程态和内核态之间拷贝两次,降低了程序运行的效率。当采 用共享内存进行进程间通信时,数据的传递模式为:A进程将数据写入共享内存,通知B进 程;B进程得到通知后直接从共享内存区读取数据。这种模式下有效数据不需要在进程态 和内核态之间进行拷贝,相比前一种模式,提高了效率。但是,A进程通知B进程的这个动 作,需要通过一个短消息来实现,这个短消息还是需要从进程地址空间向内核地址空间拷 贝数据,降低了系统性能。 当网络上不同主机间的进程需要通信时,必须选择合适的网络协议,使用套接字 在不同主机间传递消息。使用套接字接口需要将通信报文压入操作系统协议栈,经过协议 栈的层层处理和封装才能把有效通信报文发送出去,降低了进程间通信的实时性。当进行 多主机进程间的通信时必须选择两种函数接口,一种用于同一个主机内的不同进程通信, 另一种用于不同主机进程间的通信,增加了应用程序编程接口的复杂度。
技术实现思路
本专利技术的目的,在于提供,其可提高多主机环境下 进程间的通信效率,降低应用程序编程接口的复杂度。 为了达成上述目的,本专利技术的解决方案是: -种多主机进程间通信的方法,包括如下内容:若是同一主机内的不同进程间需 要通信,使用两级共享内存来收发报文,从而实现数据的零拷贝;若是不同主机内的进程需 要通信,将报文组织成二层以太网帧格式,不经过协议栈直接发送给接收方;且前述两种通 信方式采用统一的函数接口和统一的通信报文格式。 上述方法中,对于同一主机内的不同进程间的通信:各进程将第一级共享内存映 射到进程自己的地址空间,通信的发起方通过指针直接在第一级共享内存区中组织报文, 通信的接收方通过指针直接在第一级共享内存区中访问报文,实现了进程间数据的零拷 贝;各进程将第二级共享内存映射到进程自己的地址空间,进程在调用内核模块提供的各 种函数时,将函数实参直接写入第二级共享内存,内核模块直接读取进程的第二级共享内 存,获取函数实参,实现了进程和内核间数据的零拷贝。 上述方法中,对于不同主机间进程的通信:将报文组织成二层以太网帧格式,不经 过协议栈,直接调用系统网络设备的以太网发送函数,将报文发送给接收方主机,缩短了报 文发送的时间,提高了通信的实时性。 采用上述方案后,本专利技术的有益效果是:通过提供一种多主机进程间的通信方法, 提高了多主机环境下进程间的通信效率,降低应用程序编程接口的复杂度。对于同一主机 内的不同进程,采用两级共享内存的方法,实现进程间数据零拷贝通信,解决了传统操作系 统进程间通信需要在进程和内核之间拷贝数据的问题。对于不同主机上的不同进程,通信 时采用二层以太网报文,不经过协议栈直接发送给对方的方法,提高了通信的实时性,解决 了传统套接字通信需要经过协议栈从而导致实时性下降的问题。以上两种通信方法在实现 上采用统一的报文格式和函数接口封装,解决了多主机环境下程序开发时需要为进程通信 选择不同的函数接口导致应用程序编程接口复杂的问题。 【专利附图】【附图说明】 图1是进程间通信报文帧格式定义示意图; 图2是两级共享内存组织方式示意图; 图3是二层以太网帧格式定义示意图。 【具体实施方式】 下面以一个具体的嵌入式系统来说明本专利技术的具体实现方法。该嵌入式系统的 CPU采用freescale公司的P1020芯片,操作系统采用linux2. 6. 32操作系统。具体的实施 方法包括:(1)在linux操作系统中插入一个内核模块,创建一个虚拟字符设备,通过该设 备的设备驱动程序的各种函数接口来实现两级共享内存的管理,进程间报文的收发,以太 网报文的收发等功能。(2)编写一个linux下的程序共享库,将对(1)中的虚拟字符设备的 操作封装成统一的函数接口,应用程序调用这些函数来完成多主机进程间的通信。 下面以一个两进程(进程A和进程B)通信的例子来说明整个过程。 1、本专利技术使用一种固定的报文帧格式来进行进程间的通信,这种报文帧格式定义 如图1 : 对报文帧格式中各个字段的说明如下: (1)目的进程ID :进程ID用于在一个主机中唯一标识一个进程,目的进程ID用来 标识通信双方中接收报文的那个进程。 (2)源进程ID :源进程ID用来标识通信双方中发送报文的那个进程。 (3)目的主机地址:主机地址用于在以太网中唯一标识一个主机,目的主机地址用 来标识通信双方中接收报文的那个进程所在的主机。 (4)源主机地址:源主机地址用来标识通信双方中发送报文的那个进程所在的主机。 (5)应用层报文长度:通信发起方进程发送的报文的长度。 (6)应用层报文内容:发送方进程需要发送的报文。 2、在linux操作系统中插入的内核模块提供下面几个函数供应用程序调用。 (1) -级共享内存初始化函数:进程调用本函数将内核中的一级共享内存区映射 到进程的地址空间中,映射后进程通过指针可以直接对一级共享内存进行读写。 (2)二级共享内存初始化函数:进程调用本函数获取进程独有的二级共享内存,并 且将该二级共享内存区映射到进程的地址空间中,映射后进程通过指针可以直接对该二级 共享内存进行读写。 (3)获取缓冲区函数:进程调用本函数从一级共享内存区内获取需要大小的一块 缓冲区。 (4)报文发送函数:进程调用本函数将图1所示的一帧报文发送给网络上由目的 主机地址和目的进程ID唯一标识的一个进程。 (5)接收函数:进程调用本函数直接获取指向保存在一级共享内存区的通信报文 的指针,进程通过该指针直接访问通信报文。 3、使用两级共享内存在同一主机内的不同进程间发送报文的详细步骤说明如下。 (1)本专利技术采用两级共享内存在同一主机的不同进程间传递通信报文,使得进程 间的通信实现了真正意义上的数据零拷贝。采用的两级共享内存模式如图2。图2中的一 级共享内存区用于存储进程间通信的报文,进程A和进程B分别调用内核模块提供的一级 共享内存初始化函数,将一级共享内存区分别映射至本进程的地址空间中。这样在以后进 程A需要向进程B发送通信报文时,进程A通过指针直接在一级共享内存区中组织报文,进 程B通过指针直接从一级共享内存区中读取报文,进程间不需要拷贝报文。图2中的二级共 享内存区用于进程调用内核模块提供的函数时向内核空间传递函数实参。Linux操作系统 下,一个进程如果调用内核模块提供的函本文档来自技高网
...

【技术保护点】
一种多主机进程间通信的方法,其特征在于包括如下内容:若是同一主机内的不同进程间需要通信,使用两级共享内存来收发报文,从而实现数据的零拷贝;若是不同主机内的进程需要通信,将报文组织成二层以太网帧格式,不经过协议栈直接发送给接收方;且前述两种通信方式采用统一的函数接口和统一的通信报文格式。

【技术特征摘要】

【专利技术属性】
技术研发人员:姜晓光胡绍谦王文龙林青尤小明张玉健代小翔丁浩川李大鹏杨梅强陈雄程夏
申请(专利权)人:南京南瑞继保电气有限公司南京南瑞继保工程技术有限公司
类型:发明
国别省市:江苏;32

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1