CN105426260A - 一种支持分布式***的透明进程间通信***及方法 - Google Patents
一种支持分布式***的透明进程间通信***及方法 Download PDFInfo
- Publication number
- CN105426260A CN105426260A CN201510725014.4A CN201510725014A CN105426260A CN 105426260 A CN105426260 A CN 105426260A CN 201510725014 A CN201510725014 A CN 201510725014A CN 105426260 A CN105426260 A CN 105426260A
- Authority
- CN
- China
- Prior art keywords
- message
- link
- node
- module
- scheduler module
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/546—Message passing systems or structures, e.g. queues
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Multi Processors (AREA)
- Communication Control (AREA)
- Computer And Data Communications (AREA)
Abstract
本发明公开了一种支持分布式***的透明进程间通信***及方法,所述***包含多个通信节点,每个节点包括进程模块11和进程模块12、通信处理模块、链路发送服务模块、链路接收服务模块;所述方法包含唯一进程ID号设计、基于进程ID号的消息传递机制、消息传递路径快速路由、消息的快速传递,和基于“节点内部进程间通信+链路发送接收服务”的跨节点进程间通信机制。所述***及方法高效地实现了进程间的消息传递,统一了节点内部进程间通信和跨节点进程间通信,实现了对分布式处理的支持。
Description
技术领域
本发明涉及一种支持分布式***的透明进程间通信***及方法,属于计算机中的进程间通信的技术领域,用于航天领域。
背景技术
近年来,在航天等嵌入式领域,随着***的功能越来越复杂,单处理器嵌入式***已不能满足需求,出现了多处理器嵌入式***,对于支持多处理器嵌入式***的分布式实时操作***的研究也越来越多。进程间通信(IPC)是操作***的基础功能,也是分布式***的核心。多处理器嵌入式***与传统分布式***相比,具有如下特点:(1)存储空间有限且对实时性要求严格,针对该***的进程间通信必须考虑到执行效率、实时性和内存占用问题,即通信效率问题;(2)多处理器之间的物理通信方式种类繁多,即通信透明问题。支持多处理器嵌入式***的进程间通信必须要考虑上面两个特点。
现有的操作***内进程间通信机制主要有:管道、信号量、消息队列、共享内存等。支持分布式***的进程间通信机制主要有:套接字(Socket)、RPC、COM、Web服务及面向消息的中间件等。套接字是传统的分布式***中节点之间进程间通信机制,需要经过协议栈处理,效率低。远程过程调用RPC是最常见、最有效的节点通信方式之一,它隐藏了底层通信过程,应用广泛,是许多分布式***的基础。
上述进程间通信机制中,操作***内进程间通信机制不支持跨操作***进程间通信,导致通信透明度不够的问题;支持分布式***的进程间通信机制要经过底层的网络通信、协议栈处理,不满足分布嵌入式***的高实时性特点,也无法将操作***内和跨操作***进程间通信统一起来。
发明内容
本发明的技术解决问题为:克服现有技术不足,提出一种支持分布式***的透明进程间通信***及方法,解决了现有的进程间通信技术无法同时满足高透明度、高效率的问题,统一了操作***内部进程间通信和跨操作***进程间通信,满足分布式实时IPC的两个重要特性:透明性和实时性。
本发明的技术解决方案是:一种支持分布式***的透明进程间通信***,包括:多个通信节点,每个节点包括进程模块11和进程模块12、通信处理模块、链路发送进程模块、链路接收进程模块;当节点接收通信***内的其它节点发送的消息时,该节点只需要一个进程模块11,将接收通信***内的其它节点发送的消息的节点中的进程模块11作为进程模块21,即命名为进程模块21模块;
为每个进程设定一个唯一进程ID号,节点内进程间通信或节点间进程间通信时,以进程ID号为通信地址进行消息收发;
进程ID号需要满足一下条件:①进程ID号由用户创建该进程时指定,保证该ID号在一个通信***内是唯一的;②针对每个节点为进程ID进行分段,每个节点上的进程ID号属于同一号码段;
通信处理模块为进程模块11、进程模块12、链路发送进程模块和链路接收进程模块创建一个先入先出型(FIFO)接收队列,用来存放接收到的消息,消息包括消息头和消息体,消息头包括:发送进程ID、接收进程ID和消息体长度;
链路发送进程模块负责该节点通过通信链路向通信***内的其它节点发送消息,该通信链路用链路发送进程模块执行进程的进程ID号命名,即链路号;链路接收进程模块负责接收通信***内的其它节点通过通信链路向该节点发送的消息;每个链路发送进程模块执行一个发送进程,对应一条指向发送进程要发送的消息中设定的接收进程ID号对应的进程模块21所在节点的物理链路;
在每个节点的通信处理模块中创建一个路由表,该路由表包括了接收进程ID号所属号码段和从发送进程所在节点到该接收进程所在节点的通信链路的链路号;如果接收进程与发送进程在同一个节点内,那么该链路号对应的通信链路为通信处理模块自身,即进程模块12发送消息给通信处理模块转发至进程模块11的先入先出型(FIFO)接收队列中;如果接收进程与发送进程不在同一节点,那么通信链路是链路发送进程模块执行的进程ID号,即链路号,对应的通信链路;
在一个节点内,当进程模块12需要发送消息时,首先向通信处理模块申请一块内存区域,通信处理模块根据进程模块12的申请分配一块内存区域,作为消息存放载体,并把分配的内存区域地址,即消息载体地址,反馈给进程模块12,进程模块12根据反馈回的消息载体地址,把发送进程的ID号、接收进程的ID号和消息体长度写入发送消息的消息头,把需要发送的信息内容写入消息体,然后进程模块12把消息载体地址传递给通信处理模块;
通信处理模块根据消息载体地址,获取该消息的消息头中的接收进程的ID号,根据该接收进程的ID号,在步骤(4)创建的路由表中查找从发送进程所在节点到该接收进程所在节点的通信链路的链路号,如果该链路号对应的通信链路为通信处理模块自身,通信处理模块将消息载体地址发送给进程模块11,并存放在进程模块11中的先入先出型(FIFO)接收队列中,如果进程模块11处于等待接收消息状态,使进程模块11恢复工作状态;如果该链路号对应的通信链路为链路发送进程模块执行进程的进程ID号,即链路号所对应的通信链路,通信处理模块将消息载体地址发送给链路发送进程模块,并存放在链路发送进程模块中的先入先出型(FIFO)接收队列中,然后该链路发送进程模块从该链路发送进程模块中的先入先出型(FIFO)接收队列中读取消息载体地址,并将消息载体地址对应的消息,通过物理链路发送给进程模块21所在的节点的链路接收进程模块,如果该链路接收进程模块处于等待接收消息状态,使该链路接收进程模块恢复为工作状态;进程模块21所在的节点的链路接收进程模块向进程模块21所在的节点的通信处理模块申请一块内存区域,该通信处理模块根据进程模块21所在的节点的链路接收进程模块的申请,分配一块内存区域作为消息存放载体,并把分配的内存区域地址,即消息载体地址,反馈给进程模块21所在的节点的链路接收进程模块,进程模块21所在的节点的链路接收进程模块根据反馈回的消息载体地址,把从物理链路接收的消息写入分配的消息存放载体,然后进程模块21所在的节点的链路接收进程模块把消息载体地址传递给进程模块21所在的节点的通信处理模块后转发给进程21;
当进程模块11接收本节点内部进程12传来的消息时,判断进程模块11的先入先出型(FIFO)接收队列中是否存有消息载体地址,如果存有消息载体地址,进程模块11从进程模块11的先入先出型(FIFO)接收队列中读取消息载体地址,根据该消息载体地址从进程模块11所在节点的通信处理模块读取消息;否则,进程模块11不工作,等待消息存入进程模块11的先入先出型(FIFO)接收队列中,完成节点内透明进程间通信的消息接收;
当进程模块21接收通信***内的其它节点中的进程模块12发送来的消息时,判断进程模块21的先入先出型(FIFO)接收队列中是否存有消息载体地址,如果存有消息载体地址,进程模块21从进程模块11的先入先出型(FIFO)接收队列中读取消息载体地址,根据该消息载体地址从进程模块21所在节点的通信处理模块读取消息;否则,进程模块21不工作,等待消息存入进程模块21的先入先出型(FIFO)接收队列中,完成节点间透明进程间通信的消息接收。
一种支持分布式***的透明进程间通信方法,步骤如下:
(1)为每个进程设定一个唯一进程ID号,节点内进程间通信或节点间进程间通信时,以进程ID号为通信地址进行消息收发;
(2)进程ID号需要满足一下条件:①进程ID号由用户创建该进程时指定,保证该ID号在一个通信***内是唯一的;②针对每个节点为进程ID进行分段,每个节点上的进程ID号属于同一号码段;
(3)通信处理模块为进程模块11、进程模块12、链路发送进程模块和链路接收进程模块创建一个先入先出型(FIFO)接收队列,用来存放接收到的消息,消息包括消息头和消息体,消息头包括:发送进程ID、接收进程ID和消息体长度;
(4)链路发送进程模块负责该节点通过通信链路向通信***内的其它节点发送消息,该通信链路用链路发送进程模块执行进程的进程ID号命名,即链路号;链路接收进程模块负责接收通信***内的其它节点通过通信链路向该节点发送的消息,并把接收到的消息转发出去;每个链路发送进程模块执行一个发送进程,对应一条指向发送进程要发送的消息中设定的接收进程ID号对应的进程模块21所在节点的物理链路;每个链路接收进程模块执行一个接收进程;
(5)在每个节点的通信处理模块中创建一个路由表,该路由表包括了接收进程ID号所属号码段和从发送进程所在节点到该接收进程所在节点的通信链路的链路号;如果接收进程与发送进程在同一个节点内,那么该链路号对应的通信链路为通信处理模块自身,即进程模块12发送消息给通信处理模块转发至进程模块11的先入先出型(FIFO)接收队列中;如果接收进程与发送进程不在同一节点,那么通信链路是链路发送进程模块执行的进程ID号,即链路号,对应的通信链路;
(6)在一个节点内,当进程模块12需要发送消息时,首先向通信处理模块申请一块内存区域,通信处理模块根据进程模块12的申请分配一块内存区域,作为消息存放载体,并把分配的内存区域地址,即消息载体地址,反馈给进程模块12,进程模块12根据反馈回的消息载体地址,把发送进程的ID号、接收进程的ID号和消息体长度写入发送消息的消息头,把需要发送的信息内容写入消息体,然后进程模块12把消息载体地址传递给通信处理模块;
(7)通信处理模块根据消息载体地址,获取该消息的消息头中的接收进程的ID号,根据该接收进程的ID号,在步骤(4)创建的路由表中查找从发送进程所在节点到该接收进程所在节点的通信链路的链路号,如果该链路号对应的通信链路为通信处理模块自身,通信处理模块将消息载体地址发送给进程模块11,并存放在进程模块11中的先入先出型(FIFO)接收队列中,如果进程模块11处于等待接收消息状态,使进程模块11恢复工作状态;如果该链路号对应的通信链路为链路发送进程模块执行进程的进程ID号,即链路号所对应的通信链路,通信处理模块将消息载体地址发送给链路发送进程模块,并存放在链路发送进程模块中的先入先出型(FIFO)接收队列中,然后该链路发送进程模块从该链路发送进程模块中的先入先出型(FIFO)接收队列中读取消息载体地址,并将消息载体地址对应的消息,通过物理链路发送给进程模块21所在的节点的链路接收进程模块,如果该链路接收进程模块处于等待接收消息状态,使该链路接收进程模块恢复为工作状态;进程模块21所在的节点的链路接收进程模块向进程模块21所在的节点的通信处理模块申请一块内存区域,该通信处理模块根据进程模块21所在的节点的链路接收进程模块的申请,分配一块内存区域作为消息存放载体,并把分配的内存区域地址,即消息载体地址,反馈给进程模块21所在的节点的链路接收进程模块,进程模块21所在的节点的链路接收进程模块根据反馈回的消息载体地址,把从物理链路接收的消息写入分配的消息存放载体,然后进程模块21所在的节点的链路接收进程模块把消息载体地址传递给进程模块21所在的节点的通信处理模块后转发给进程21;
(8)当进程模块11接收本节点内部进程12传来的消息时,判断进程模块11的先入先出型(FIFO)接收队列中是否存有消息载体地址,如果存有消息载体地址,进程模块11从进程模块11的先入先出型(FIFO)接收队列中读取消息载体地址,根据该消息载体地址从进程模块11所在节点的通信处理模块读取消息;否则,进程模块11不工作,等待消息存入进程模块11的先入先出型(FIFO)接收队列中,完成节点内透明进程间通信的消息接收;
(9)当进程模块21接收通信***内的其它节点中的进程模块12发送来的消息时,判断进程模块21的先入先出型(FIFO)接收队列中是否存有消息载体地址,如果存有消息载体地址,进程模块21从进程模块11的先入先出型(FIFO)接收队列中读取消息载体地址,根据该消息载体地址从进程模块21所在节点的通信处理模块读取消息;否则,进程模块21不工作,等待消息存入进程模块21的先入先出型(FIFO)接收队列中,完成节点间透明进程间通信的消息接收。
所述步骤(2)中,一个节点中,如果进程基于优先级进行调度,且一个优先级只能创建一个进程,那么进程的ID号可由节点号+进程优先级构成。
所述步骤(4)中,在实时性要求较高的分布式***中,节点中链路接收进程模块中执行的可以是中断服务程序(ISR),相应的,其进程ID号为节点号+中断号。
本发明与现有技术相比的优点在于:
(1)本发明通过方法中的步骤(6)、(8)和(9),相比现有技术,在接口层统一了节点内部进程间通信和跨节点进程间通信,支持分布式***,为用户使用提供了方便;
(2)本发明通过方法中的步骤(6)和(7),消息载***于通信处理模块内部,通过传递消息地址来实现消息的传递,相比现有技术,避免了进程间通信的两次内容拷贝,可以大大提高通信效率;
(3)本发明通过方法中的步骤(7),跨节点进程间通信由两次节点内进程间通信(进程模块12→链路发送进程模块、链路接收进程模块→进程模块21)和一次链路通信组成,充分利用已有的处理功能,能简化跨节点进程间通信的实现;
(4)本发明通过方法中的步骤(4),用链路发送进程模块和链路接收进程模块来管理物理链路数据的收发,实现了物理链路的软件化和抽象化,为跨节点进程间通信提供了方便。
(5)本发明通过方法中的步骤(2)和(5),对进程ID号分段,路由表以接收进程模块的进程ID号所属号码段为索引,避免了路由表对去往每个接收进程模块路径的描述,可以降低路由表对内存空间的消耗,降低路径查找时间,从而提高通信效率;
(6)本发明所述***中,节点内部进程间通信的信息流走向为进程模块12→通信处理模块→进程模块11,跨节点进程间通信的信息流走向为进程模块12→通信处理模块(位于节点1)→链路发送进程模块(位于节点1)→链路接收进程模块(位于节点2)→通信处理模块(位于节点2)→进程模块21,进程模块的消息收发只和通信处理模块进行交互,体现了进程间通信的透明性。
附图说明
图1为本发明透明进程间通信***示意图;
图2为本发明一种进程ID号结构示意图;
图3为本发明消息结构示意图;
图4为本发明路由表结构示意图。
具体实施方式
下面结合附图和具体实施例对本发明进行详细说明。
一种支持分布式***的透明进程间通信***,如图1所示,包括:多个通信节点,每个节点包括进程模块11和进程模块12(如图1所示中的节点1)、通信处理模块、链路发送进程模块、链路接收进程模块;当节点接收通信***内的其它节点发送的消息时,该节点只需要一个进程模块11,将接收通信***内的其它节点发送的消息的节点中的进程模块11作为接收***内其他节点消息的节点内的进程模块21,即命名为进程模块21模块;(接收***内其他节点消息的节点可以只需要一个进程模块工作,进程模块11或进程模块12中的一个进程模块,为了区分,作为接收***内其他节点消息的节点中的进程模块21,如图1所示中的节点2),节省了节点的资源。
进程模块11运行一个用户进程,承担消息接收的角色;进程模块12运行一个用户进程,承担消息发送的角色,通信处理模块的功能由操作***实现,进程控制块位于操作***中,用来描述进程运行状态及所占有的***资源,运行状态可以包括等待和运行状态;链路发送进程模块运行链路发送服务进程,负责把其他进程发送来的消息通过物理链路转发出去;链路接收进程模块运行链路接收服务进程,负责送物理链路接收消息,并把接收到的消息转发给接收进程。一个节点内部只允许有一个通信处理模块,即只能运行一个操作***。
根据上述支持分布式***的透明进程间通信***的通讯方法如下:
一种支持分布式***的透明进程间通信方法,实现步骤如下:
(1)为每个进程设定一个唯一进程ID号,节点内进程间通信或节点间进程间通信时,以进程ID号为通信地址进行消息收发。在一个通信***内,要统一节点内部进程间通信和不同节点间的进程间通信,消息传递的依据必须跨操作***而存在。句柄只存在于操作***内部,无法在不同操作***之间使用,因此以句柄为通信依据的进程间通信机制,如管道、信号量、消息队列、共享内存等,并不支持跨操作***的进程间通信。进程ID号可以跨操作***存在,以进程ID号为通信地址进行消息收发,是跨操作***进程间通信提供了前提条件。
(2)进程ID号需要满足一下条件:①进程ID号由用户创建该进程时指定,保证该ID号在一个通信***内是唯一的,防止消息投递出现二义性;②针对每个节点为进程ID进行分段,每个节点上的进程ID号属于同一号码段,便于通信地址管理;③特别地,一个节点中,如果操作***基于优先级进行进程调度,且一个优先级只能创建一个进程,那么进程的ID号可由节点号+进程优先级构成。图2给出了一种优选的进程ID号设计,由32位的整型数据组成,其中bit0-7为进程优先级,bit8-15为节点编号,bit16-23保留未用,为全0,bit24-31为物理链路,比如0代表核内通信,1代表用串口传输,2代表双口RAM传输……从该接收进程ID号中可直接解析出该进程所在的节点,与本节点的物理连接方式,有利于提高ID路由的效率。
(3)通信处理模块为进程模块11、进程模块12、链路发送进程模块和链路接收进程模块创建一个先入先出型(FIFO)接收队列,用来存放接收到的消息,消息包括消息头和消息体,消息头包括:发送进程ID、接收进程ID和消息体长度,如图3所示,在操作***中,用进程控制块(PCB)来描述一个进程,并记录该进程所占有的***资源,因此可在进程控制块中创建消息先入先出型(FIFO)接收队列。从另一角度看,一个被进程接收的消息,属于该进程占有的资源,因此在PCB中建立消息接收队列也是合理的。
(4)链路发送进程模块负责该节点通过通信链路向通信***内的其它节点发送消息,该通信链路用链路发送进程模块执行进程的进程ID号命名,即链路号;链路接收进程模块负责接收通信***内的其它节点通过通信链路向该节点发送的消息,并把接收到的消息转发出去;每个链路发送进程模块执行一个发送进程,对应一条指向发送进程要发送的消息中设定的接收进程ID号对应的进程模块21所在节点的物理链路;每个链路接收进程模块执行一个接收进程;在实时性要求较高的分布式***中,节点中链路接收进程模块中执行的可以是中断服务程序(ISR),相应的,其进程ID号为节点号+中断号。用链路发送进程模块和链路接收进程模块来管理物理链路数据的收发,实现了物理链路的软件化和抽象化,为跨节点进程间通信提供了方便。
(5)在每个节点的通信处理模块中创建一个路由表,该路由表包括了接收进程ID号所属号码段和从发送进程所在节点到该接收进程所在节点的通信链路的链路号,如图4所示;如果接收进程与发送进程在同一个节点内,那么该链路号对应的通信链路为通信处理模块自身,即进程模块12发送消息给通信处理模块转发至进程模块11的先入先出型(FIFO)接收队列中;如果接收进程与发送进程不在同一节点,那么通信链路是链路发送进程模块执行的进程ID号,即链路号,对应的通信链路;路由表以接收进程模块的进程ID号所属号码段为索引,避免了路由表对去往每个接收进程模块路径的描述,可以降低路由表对内存空间的消耗,降低路径查找时间,从而提高通信效率。
(6)在一个节点内,当进程模块12需要发送消息时,首先向通信处理模块申请一块内存区域,通信处理模块根据进程模块12的申请分配一块内存区域,作为消息存放载体,并把分配的内存区域地址,即消息载体地址,反馈给进程模块12,进程模块12根据反馈回的消息载体地址,把发送进程的ID号、接收进程的ID号和消息体长度写入发送消息的消息头,把需要发送的信息内容写入消息体,然后进程模块12把消息载体地址传递给通信处理模块;
(7)通信处理模块根据消息载体地址,获取该消息的消息头中的接收进程的ID号,根据该接收进程的ID号,在步骤(4)创建的路由表中查找从发送进程所在节点到该接收进程所在节点的通信链路的链路号,如果该链路号对应的通信链路为通信处理模块自身,通信处理模块将消息载体地址发送给进程模块11,并存放在进程模块11中的先入先出型(FIFO)接收队列中,如果进程模块11处于等待接收消息状态,使进程模块11恢复工作状态;如果该链路号对应的通信链路为链路发送进程模块执行进程的进程ID号,即链路号所对应的通信链路,通信处理模块将消息载体地址发送给链路发送进程模块,并存放在链路发送进程模块中的先入先出型(FIFO)接收队列中,然后该链路发送进程模块从该链路发送进程模块中的先入先出型(FIFO)接收队列中读取消息载体地址,并将消息载体地址对应的消息,通过物理链路发送给进程模块21所在的节点的链路接收进程模块,如果该链路接收进程模块处于等待接收消息状态,使该链路接收进程模块恢复为工作状态;进程模块21所在的节点的链路接收进程模块向进程模块21所在的节点的通信处理模块申请一块内存区域,该通信处理模块根据进程模块21所在的节点的链路接收进程模块的申请,分配一块内存区域作为消息存放载体,并把分配的内存区域地址,即消息载体地址,反馈给进程模块21所在的节点的链路接收进程模块,进程模块21所在的节点的链路接收进程模块根据反馈回的消息载体地址,把从物理链路接收的消息写入分配的消息存放载体,然后进程模块21所在的节点的链路接收进程模块把消息载体地址传递给进程模块21所在的节点的通信处理模块后转发给进程21;
跨节点进程间通信由两次节点内进程间通信(进程模块12→链路发送进程模块、链路接收进程模块→进程模块21)和一次链路通信组成,充分利用已有的处理功能,能简化跨节点进程间通信的实现;
(8)当进程模块11接收本节点内部进程12传来的消息时,判断进程模块11的先入先出型(FIFO)接收队列中是否存有消息载体地址,如果存有消息载体地址,进程模块11从进程模块11的先入先出型(FIFO)接收队列中读取消息载体地址,根据该消息载体地址从进程模块11所在节点的通信处理模块读取消息;否则,进程模块11不工作,等待消息存入进程模块11的先入先出型(FIFO)接收队列中,完成节点内透明进程间通信的消息接收;
(9)当进程模块21接收通信***内的其它节点中的进程模块12发送来的消息时,判断进程模块21的先入先出型(FIFO)接收队列中是否存有消息载体地址,如果存有消息载体地址,进程模块21从进程模块11的先入先出型(FIFO)接收队列中读取消息载体地址,根据该消息载体地址从进程模块21所在节点的通信处理模块读取消息;否则,进程模块21不工作,等待消息存入进程模块21的先入先出型(FIFO)接收队列中,完成节点间透明进程间通信的消息接收。
上述消息传递过程中,消息载***于通信处理模块内部,即操作***内核空间,进程直接对内核空间的消息载体进行读写,通过传递消息载体地址,实现进程间的消息传递,避免了整个消息从“用户空间→内核空间→用户空间”的两次拷贝,缩短了通信时间,提高了效率。
本发明已经用在航天的“战星”嵌入式实时操作***等中,进行一次消息传递所花时间,在国产异构4核DSPFT-Q6713中实测性能如下:
节点内进程间通信小于3微妙(与消息长度无关)
节点间进程间通信约40微妙/KB(物理链路为共享数据池),节点内进程间通信和节点间进程间通信速度均提高了数倍,实现了高效率。
本发明满足航天控制***对实时性的苛刻要求,例如:利用本发明的技术方案的***:“战星”嵌入式实时操作***+FT-Q6713已应用于若干航天型号中,解决了进程间通信同时满足高透明度、高效率的问题,取得了良好的效果。
本发明说明书中未作详细描述的内容属本领域技术人员的公知技术。
Claims (4)
1.一种支持分布式***的透明进程间通信***,其特征在于包括:多个通信节点,每个节点包括进程模块11和进程模块12、通信处理模块、链路发送进程模块、链路接收进程模块;当节点接收通信***内的其它节点发送的消息时,该节点只需要一个进程模块11,将接收通信***内的其它节点发送的消息的节点中的进程模块11作为进程模块21;
为每个进程设定一个唯一进程ID号,节点内进程间通信或节点间进程间通信时,以进程ID号为通信地址进行消息收发;
进程ID号需要满足一下条件:①进程ID号由用户创建该进程时指定,保证该ID号在一个通信***内是唯一的;②针对每个节点为进程ID进行分段,每个节点上的进程ID号属于同一号码段;
通信处理模块为进程模块11、进程模块12、链路发送进程模块和链路接收进程模块创建一个先入先出型FIFO接收队列,用来存放接收到的消息,消息包括消息头和消息体,消息头包括:发送进程ID、接收进程ID和消息体长度;
链路发送进程模块负责该节点通过通信链路向通信***内的其它节点发送消息,该通信链路用链路发送进程模块执行进程的进程ID号命名,即链路号;链路接收进程模块负责接收通信***内的其它节点通过通信链路向该节点发送的消息;每个链路发送进程模块执行一个发送进程,对应一条指向发送进程要发送的消息中设定的接收进程ID号对应的进程模块21所在节点的物理链路;
在每个节点的通信处理模块中创建一个路由表,该路由表包括了接收进程ID号所属号码段和从发送进程所在节点到该接收进程所在节点的通信链路的链路号;如果接收进程与发送进程在同一个节点内,那么该链路号对应的通信链路为通信处理模块自身,即进程模块12发送消息给通信处理模块转发至进程模块11的先入先出型FIFO接收队列中;如果接收进程与发送进程不在同一节点,那么通信链路是链路发送进程模块执行的进程ID号,即链路号,对应的通信链路;
在一个节点内,当进程模块12需要发送消息时,首先向通信处理模块申请一块内存区域,通信处理模块根据进程模块12的申请分配一块内存区域,作为消息存放载体,并把分配的内存区域地址,即消息载体地址,反馈给进程模块12,进程模块12根据反馈回的消息载体地址,把发送进程的ID号、接收进程的ID号和消息体长度写入发送消息的消息头,把需要发送的信息内容写入消息体,然后进程模块12把消息载体地址传递给通信处理模块;
通信处理模块根据消息载体地址,获取该消息的消息头中的接收进程的ID号,根据该接收进程的ID号,在步骤(4)创建的路由表中查找从发送进程所在节点到该接收进程所在节点的通信链路的链路号,如果该链路号对应的通信链路为通信处理模块自身,通信处理模块将消息载体地址发送给进程模块11,并存放在进程模块11中的先入先出型FIFO接收队列中,如果进程模块11处于等待接收消息状态,使进程模块11恢复工作状态;如果该链路号对应的通信链路为链路发送进程模块执行进程的进程ID号,即链路号所对应的通信链路,通信处理模块将消息载体地址发送给链路发送进程模块,并存放在链路发送进程模块中的先入先出型FIFO接收队列中,然后该链路发送进程模块从该链路发送进程模块中的先入先出型FIFO接收队列中读取消息载体地址,并将消息载体地址对应的消息,通过物理链路发送给进程模块21所在的节点的链路接收进程模块,如果该链路接收进程模块处于等待接收消息状态,使该链路接收进程模块恢复为工作状态;进程模块21所在的节点的链路接收进程模块向进程模块21所在的节点的通信处理模块申请一块内存区域,该通信处理模块根据进程模块21所在的节点的链路接收进程模块的申请,分配一块内存区域作为消息存放载体,并把分配的内存区域地址,即消息载体地址,反馈给进程模块21所在的节点的链路接收进程模块,进程模块21所在的节点的链路接收进程模块根据反馈回的消息载体地址,把从物理链路接收的消息写入分配的消息存放载体,然后进程模块21所在的节点的链路接收进程模块把消息载体地址传递给进程模块21所在的节点的通信处理模块后转发给进程21;
当进程模块11接收本节点内部进程12传来的消息时,判断进程模块11的先入先出型FIFO接收队列中是否存有消息载体地址,如果存有消息载体地址,进程模块11从进程模块11的先入先出型FIFO接收队列中读取消息载体地址,根据该消息载体地址从进程模块11所在节点的通信处理模块读取消息;否则,进程模块11不工作,等待消息存入进程模块11的先入先出型FIFO接收队列中,完成节点内透明进程间通信的消息接收;
当进程模块21接收通信***内的其它节点中的进程模块12发送来的消息时,判断进程模块21的先入先出型FIFO接收队列中是否存有消息载体地址,如果存有消息载体地址,进程模块21从进程模块11的先入先出型FIFO接收队列中读取消息载体地址,根据该消息载体地址从进程模块21所在节点的通信处理模块读取消息;否则,进程模块21不工作,等待消息存入进程模块21的先入先出型FIFO接收队列中,完成节点间透明进程间通信的消息接收。
2.一种支持分布式***的透明进程间通信方法,其特征在于步骤如下:
(1)为每个进程设定一个唯一进程ID号,节点内进程间通信或节点间进程间通信时,以进程ID号为通信地址进行消息收发;
(2)进程ID号需要满足一下条件:①进程ID号由用户创建该进程时指定,保证该ID号在一个通信***内是唯一的;②针对每个节点为进程ID进行分段,每个节点上的进程ID号属于同一号码段;
(3)通信处理模块为进程模块11、进程模块12、链路发送进程模块和链路接收进程模块创建一个先入先出型FIFO接收队列,用来存放接收到的消息,消息包括消息头和消息体,消息头包括:发送进程ID、接收进程ID和消息体长度;
(4)链路发送进程模块负责该节点通过通信链路向通信***内的其它节点发送消息,该通信链路用链路发送进程模块执行进程的进程ID号命名,即链路号;链路接收进程模块负责接收通信***内的其它节点通过通信链路向该节点发送的消息,并把接收到的消息转发出去;每个链路发送进程模块执行一个发送进程,对应一条指向发送进程要发送的消息中设定的接收进程ID号对应的进程模块21所在节点的物理链路;每个链路接收进程模块执行一个接收进程;
(5)在每个节点的通信处理模块中创建一个路由表,该路由表包括了接收进程ID号所属号码段和从发送进程所在节点到该接收进程所在节点的通信链路的链路号;如果接收进程与发送进程在同一个节点内,那么该链路号对应的通信链路为通信处理模块自身,即进程模块12发送消息给通信处理模块转发至进程模块11的先入先出型FIFO接收队列中;如果接收进程与发送进程不在同一节点,那么通信链路是链路发送进程模块执行的进程ID号,即链路号,对应的通信链路;
(6)在一个节点内,当进程模块12需要发送消息时,首先向通信处理模块申请一块内存区域,通信处理模块根据进程模块12的申请分配一块内存区域,作为消息存放载体,并把分配的内存区域地址,即消息载体地址,反馈给进程模块12,进程模块12根据反馈回的消息载体地址,把发送进程的ID号、接收进程的ID号和消息体长度写入发送消息的消息头,把需要发送的信息内容写入消息体,然后进程模块12把消息载体地址传递给通信处理模块;
(7)通信处理模块根据消息载体地址,获取该消息的消息头中的接收进程的ID号,根据该接收进程的ID号,在步骤(4)创建的路由表中查找从发送进程所在节点到该接收进程所在节点的通信链路的链路号,如果该链路号对应的通信链路为通信处理模块自身,通信处理模块将消息载体地址发送给进程模块11,并存放在进程模块11中的先入先出型FIFO接收队列中,如果进程模块11处于等待接收消息状态,使进程模块11恢复工作状态;如果该链路号对应的通信链路为链路发送进程模块执行进程的进程ID号,即链路号所对应的通信链路,通信处理模块将消息载体地址发送给链路发送进程模块,并存放在链路发送进程模块中的先入先出型FIFO接收队列中,然后该链路发送进程模块从该链路发送进程模块中的先入先出型FIFO接收队列中读取消息载体地址,并将消息载体地址对应的消息,通过物理链路发送给进程模块21所在的节点的链路接收进程模块,如果该链路接收进程模块处于等待接收消息状态,使该链路接收进程模块恢复为工作状态;进程模块21所在的节点的链路接收进程模块向进程模块21所在的节点的通信处理模块申请一块内存区域,该通信处理模块根据进程模块21所在的节点的链路接收进程模块的申请,分配一块内存区域作为消息存放载体,并把分配的内存区域地址,即消息载体地址,反馈给进程模块21所在的节点的链路接收进程模块,进程模块21所在的节点的链路接收进程模块根据反馈回的消息载体地址,把从物理链路接收的消息写入分配的消息存放载体,然后进程模块21所在的节点的链路接收进程模块把消息载体地址传递给进程模块21所在的节点的通信处理模块后转发给进程21;
(8)当进程模块11接收本节点内部进程12传来的消息时,判断进程模块11的先入先出型FIFO接收队列中是否存有消息载体地址,如果存有消息载体地址,进程模块11从进程模块11的先入先出型FIFO接收队列中读取消息载体地址,根据该消息载体地址从进程模块11所在节点的通信处理模块读取消息;否则,进程模块11不工作,等待消息存入进程模块11的先入先出型FIFO接收队列中,完成节点内透明进程间通信的消息接收;
(9)当进程模块21接收通信***内的其它节点中的进程模块12发送来的消息时,判断进程模块21的先入先出型FIFO接收队列中是否存有消息载体地址,如果存有消息载体地址,进程模块21从进程模块11的先入先出型FIFO接收队列中读取消息载体地址,根据该消息载体地址从进程模块21所在节点的通信处理模块读取消息;否则,进程模块21不工作,等待消息存入进程模块21的先入先出型FIFO接收队列中,完成节点间透明进程间通信的消息接收。
3.根据权利要求2所述的一种支持分布式***的透明进程间通信方法,其特征在于:所述步骤(2)中,一个节点中,如果进程基于优先级进行调度,且一个优先级只能创建一个进程,那么进程的ID号由节点号+进程优先级构成。
4.根据权利要求2所述的一种支持分布式***的透明进程间通信方法,其特征在于:所述步骤(4)中,在实时性要求的分布式***中,节点中链路接收进程模块中执行的是中断服务程序ISR,进程的ID号为节点号+中断号。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510725014.4A CN105426260B (zh) | 2015-10-30 | 2015-10-30 | 一种支持分布式***的透明进程间通信***及方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510725014.4A CN105426260B (zh) | 2015-10-30 | 2015-10-30 | 一种支持分布式***的透明进程间通信***及方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105426260A true CN105426260A (zh) | 2016-03-23 |
CN105426260B CN105426260B (zh) | 2018-08-21 |
Family
ID=55504482
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510725014.4A Active CN105426260B (zh) | 2015-10-30 | 2015-10-30 | 一种支持分布式***的透明进程间通信***及方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105426260B (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106354573A (zh) * | 2016-08-29 | 2017-01-25 | 汉柏科技有限公司 | 一种基于优先级队列的进程间通信方法及装置 |
CN107038224A (zh) * | 2017-03-29 | 2017-08-11 | 腾讯科技(深圳)有限公司 | 数据处理方法及数据处理装置 |
CN109002350A (zh) * | 2018-05-23 | 2018-12-14 | 中国石油天然气集团有限公司 | 一种集群***中的进程通信方法及装置 |
CN111881174A (zh) * | 2020-06-24 | 2020-11-03 | 科讯嘉联信息技术有限公司 | 一种提供分布式nlp能力服务的装置及方法 |
WO2021195990A1 (en) * | 2020-03-31 | 2021-10-07 | Alibaba Group Holding Limited | Network congestion avoidance over ring-based collective communication |
CN114928660A (zh) * | 2022-05-16 | 2022-08-19 | 北京计算机技术及应用研究所 | 一种嵌入式操作***透明进程间通信的方法 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1325217A (zh) * | 2000-08-29 | 2001-12-05 | 深圳市中兴通讯股份有限公司 | 一种分布式通信***及其方法 |
CN101354695A (zh) * | 2008-09-19 | 2009-01-28 | 杭州华三通信技术有限公司 | 一种进程间通信的方法、***和分布式设备 |
US20090037290A1 (en) * | 2007-05-02 | 2009-02-05 | Bill Me Later, Inc. | Distributed System for Commerce |
CN101510901A (zh) * | 2009-02-19 | 2009-08-19 | 杭州华三通信技术有限公司 | 一种分布式设备间的通信方法、通信设备和通信*** |
CN101675424A (zh) * | 2007-05-04 | 2010-03-17 | 高通股份有限公司 | 用于可扩展和冗余电信***的进程间通信方法和装置 |
-
2015
- 2015-10-30 CN CN201510725014.4A patent/CN105426260B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1325217A (zh) * | 2000-08-29 | 2001-12-05 | 深圳市中兴通讯股份有限公司 | 一种分布式通信***及其方法 |
US20090037290A1 (en) * | 2007-05-02 | 2009-02-05 | Bill Me Later, Inc. | Distributed System for Commerce |
CN101675424A (zh) * | 2007-05-04 | 2010-03-17 | 高通股份有限公司 | 用于可扩展和冗余电信***的进程间通信方法和装置 |
CN101354695A (zh) * | 2008-09-19 | 2009-01-28 | 杭州华三通信技术有限公司 | 一种进程间通信的方法、***和分布式设备 |
CN101510901A (zh) * | 2009-02-19 | 2009-08-19 | 杭州华三通信技术有限公司 | 一种分布式设备间的通信方法、通信设备和通信*** |
Non-Patent Citations (1)
Title |
---|
王云鹏: ""分布式信号通信***的设计与实现"", 《中国优秀硕士学位论文全文数据库 信息科技辑》 * |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106354573A (zh) * | 2016-08-29 | 2017-01-25 | 汉柏科技有限公司 | 一种基于优先级队列的进程间通信方法及装置 |
CN107038224A (zh) * | 2017-03-29 | 2017-08-11 | 腾讯科技(深圳)有限公司 | 数据处理方法及数据处理装置 |
CN109002350A (zh) * | 2018-05-23 | 2018-12-14 | 中国石油天然气集团有限公司 | 一种集群***中的进程通信方法及装置 |
CN109002350B (zh) * | 2018-05-23 | 2021-08-03 | 中国石油天然气集团有限公司 | 一种集群***中的进程通信方法及装置 |
WO2021195990A1 (en) * | 2020-03-31 | 2021-10-07 | Alibaba Group Holding Limited | Network congestion avoidance over ring-based collective communication |
CN111881174A (zh) * | 2020-06-24 | 2020-11-03 | 科讯嘉联信息技术有限公司 | 一种提供分布式nlp能力服务的装置及方法 |
CN114928660A (zh) * | 2022-05-16 | 2022-08-19 | 北京计算机技术及应用研究所 | 一种嵌入式操作***透明进程间通信的方法 |
CN114928660B (zh) * | 2022-05-16 | 2023-10-31 | 北京计算机技术及应用研究所 | 一种嵌入式操作***透明进程间通信的方法 |
Also Published As
Publication number | Publication date |
---|---|
CN105426260B (zh) | 2018-08-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105426260A (zh) | 一种支持分布式***的透明进程间通信***及方法 | |
CN110347635B (zh) | 一种基于多层总线的异构多核微处理器 | |
CN107590182B (zh) | 一种分布式日志收集方法 | |
CN102521201A (zh) | 多核数字信号处理器片上***及数据传输方法 | |
CN103365726B (zh) | 一种面向gpu集群的资源管理方法和*** | |
US20110078249A1 (en) | Shared address collectives using counter mechanisms | |
US20130151747A1 (en) | Co-processing acceleration method, apparatus, and system | |
CN109697122A (zh) | 任务处理方法、设备及计算机存储介质 | |
CN105247817A (zh) | 用于源同步电路交换片上网络(NoC)的方法、装置和*** | |
CN101539798A (zh) | 多核和功率的中断平衡 | |
CN102446159B (zh) | 多核处理器的数据管理方法及装置 | |
CN115203142A (zh) | 一种多核核间实时通信***及方法 | |
CN110427270B (zh) | 一种面向rdma网络下分布式连接算子的动态负载均衡方法 | |
CN102184157B (zh) | 一种基于双处理器协作的信息显示装置 | |
WO2020156797A1 (en) | Handling an input/output store instruction | |
CN102567278A (zh) | 一种片上多核数据传输方法和装置 | |
CN104503948A (zh) | 支持多核网络处理架构的紧耦合自适应协处理*** | |
CN101470636A (zh) | 一种消息的读写方法和装置 | |
Ranganath et al. | Speeding up collective communications through inter-gpu re-routing | |
CN109144749A (zh) | 一种使用处理器实现多处理器间通信的方法 | |
EP2899644A1 (en) | Device and method for inter-core communication in multi-core processor | |
CN111653317B (zh) | 基因比对加速装置、方法及*** | |
CN109062857A (zh) | 一种能高速实现多处理器间通信的新型消息控制器及其通信方法 | |
CN103269317A (zh) | 基于对称多处理smp***的无锁化通信方法和*** | |
CN101634956B (zh) | 多核处理器消息调度方法及调度器 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |