一种进程间通讯的方法及装置制造方法及图纸

技术编号:15288036 阅读:86 留言:0更新日期:2017-05-10 12:30
本发明专利技术涉及嵌入式操作系统进程间通讯领域,针对现有技术存在的问题,提供一种进程间通讯的方法及装置,在使用基于流的UNIX域套接字将各进程组建为星形通讯拓扑的基础上,用远程过程调用的形式实现任意两个进程间的消息传递。本发明专利技术设置n个进程,其中一个为SERVER端,其余n‑1个为CLIENT端。始发请求消息的进程为源进程,源进程在发送需要应答的请求消息前做本地会话记录;当源进程为CLIENT端时,请求消息发给SERVER端,SERVER端根据请求消息中的目的进程ID判断SERVER端是本次请求的转发端还是接收端,并进行消息处理;当源进程为SERVER端时,请求消息发给相应的CLIENT端进行处理。

Method and device for interprocess communication

The invention relates to an embedded operating system for inter process communication field, aiming at the problems of the prior art and provides a method and a device for communication between processes, in the use of UNIX domain socket based on the basis of the process flow to form the star communication topology, using remote procedure use in the form of any two inter process message transfer. The present invention is n process, one of which is the SERVER side, the rest of the N 1 CLIENT end. The originating request message process for the source process, source process in sending request message response need to do before the local session recording; when the source process for CLIENT terminal, request message to a SERVER terminal, SERVER terminal according to the request message to the process ID SERVER end is the end of the judgment forwarding request or receiving end, and message processing; when the source process for SERVER terminal, request message to the corresponding terminal for processing CLIENT.

【技术实现步骤摘要】

本专利技术涉及嵌入式操作系统进程间通讯领域,尤其是一种进程间通讯的方法及装置
技术介绍
目前的数通设备上运行的操作系统一般是以LINUX内核为核心结合各厂商自己的系统管理和应用程序组建而成的。整个系统在设计上往往会用到多进程的软件架构,如此也就不可避免的有进程间通讯的需求。在整个软件系统当中,如果进程间通讯的需求非常普遍,在系统平台角度就很有必要提供一套通用、便捷、可靠、高效的进程间通讯机制供上层软件开发使用。而不是让上层软件在每当有进程间通讯需求时直接使用LINUX提供的各种丰富的系统调用来实现。上层软件开发直接使用系统调用实现进程间通讯的缺点是显而易见的:一、涉及进程间通讯的软件开发需要熟悉操作系统的各种机制,开发上有一定难度,开发人员独立开发,系统整体的质量难以保证;二、开发人员独立为自己开发的模块开发进程间通讯的机制,从整体上看也是开发工作的重复投入;三、会增加后期软件维护的难度,因为重复投入之后系统中往往会存在大量功能类似却实现各不相同的的冗余代码。
技术实现思路
本专利技术所要解决的技术问题是:针对现有技术存在的问题,提供一种进程间通讯的方法及装置,在使用基于流的UNIX域套接字将各进程组建为星形通讯拓扑的基础上(如图1所示),用远程过程调用的形式(如图2所示)实现任意两个进程间的消息传递。供平台之上的软件开发使用。本专利技术采用的技术方案如下:一种进程间通讯的方法包括:通讯拓扑建立步骤,设置n个进程,每个进程静态设置唯一标识的进程ID;选择一个进程作为通讯拓扑中SERVER端;其余n-1个进程分别对应作为n-1个CLIENT端;n个进程创建基于流的UNIX域套接字并绑定自身的SOCKPATH标识,SERVER端进入侦听并接受CLIENT端发起的连接,CLIENT端周期性向SERVER端发起连接直到连接建立为止;SERVER端靠接受连接时获取对端的CLIENT端的SOCKPATH标识识别出对端的CLIENT端进程ID;SERVER和CLIENT端都为自己保存已连接进程记录;其中进程间通讯采用远程过程调用(RPC)的形式:基于通讯拓扑建立步骤建立的通信拓扑,任意一个进程可以作为源进程发送请求消息,期望应答的目的进程是除源进程以外的任意进程;目的进程接收到请求消息后执行请求回调函数完成本次请求的响应,然后可选的向源进程发送应答消息(根据请求消息中的应答标志位)从而完成一次会话;上层软件在源进程发送请求时要指定:目的进程ID、操作码、超时参数、发送的消息体、请求类型,若是同步请求还要指定承载应答消息的BUFFER,若是异步请求要可选的给出应答处理回调函数和回调参数;当异步请求不指定应答处理回调函数时,应答属性就是无需应答,否则就是需要应答,所有的同步请求应答属性都是需要应答;上层软件在设计时如果期望某个进程响应某种请求操作码,就要提前在该进程内注册该操作码对应的请求回调函数;请求类型指的是同步请求或者异步请求;进一步的,请求回调函数的返回值和参数如下:请求回调函数由上层软件定,用于在一个进程内响应某种操作码对应的请求,在一个进程中,一个操作码对应一个请求回调函数,函数返回值0表示执行成功,非0表示相应的错误;请求回调函数的入参包括:请求源进程ID、操作码、请求消息载荷指针、请求消息载荷长度;出参包括:应答载荷指针、应答载荷长度;根据权利要求1所述的一种进程间通讯的方法,其特征在于进程间传递的消息格式为:消息格式由消息头和消息载荷两部分组成,如图3所示:消息头包括16bit目的进程ID、16bit源进程ID、32bit序列号、16bit操作码、16bit应答错误码、16bit消息长度、1bit类型标志位、1bit应答标志位、14bit保留位;其中类型标志位为0时表示消息类型是请求,为1时表示消息类型是应答;应答标志位仅当类型标志位为0时有意义,为1表示请求消息需要应答,为0表示请求消息不需要应答;应答错误码仅当类型标志位为1时有意义,当类型标志位为0时,应答错误码取值为0;消息长度表示消息头加载荷的整体消息长度;消息载荷部分长度不定,范围是0到65519字节;所述应答处理回调函数的返回值和参数如下:应答处理回调函数由上层软件在异步发送需要应答的请求时指定,用于异步处理应答消息;函数无返回值,入参包括:请求目的进程ID、操作码、应答错误码、应答载荷指针、应答载荷长度、上层软件自定义回调参数;进一步的,源进程在发送需要应答的请求消息前要生成本地会话记录:本地会话记录用于记录和描述一次尚未完成的会话,以请求消息的源进程ID加会话序列号为主键存储在请求消息的源进程;本地会话记录的内容包括:目的进程ID、源进程ID、会话序列号、操作码、会话类型(同步或异步)、超时参数、同步会话参数、异步会话参数;会话序列号对源进程而言用于唯一标识一个会话,取值正整数,源进程每发送一次请求,序列号连续递增;同步会话参数仅对同步会话类型有意义,参数包括线程同步信号量(总是被初始化为“满的”)、应答错误码、应答消息BUFFER、应答消息长度;异步会话参数仅对异步会话类型有意义,参数包括应答处理回调函数和回调参数;进一步的,源进程发送请求消息时,处理的具体过程为:请求消息发送步骤,对需要应答的请求,发送请求消息前先做本地会话记录,再发送请求消息,否则直接发送请求消息;CLIENT端作为源进程发送请求时,不论请求目的进程ID是多少,借助已连接进程记录,统一将请求消息发送给SERVER端;SERVER端作为源进程发送请求时,根据本次请求的目的进程ID,借助已连接进程记录,将请求消息发送给对应CLIENT;如果本次请求被上层软件定义为同步,请求消息发送的线程在消息发出后通过获取本地会话记录中同步会话参数中的信号量进入睡眠,否则,本次消息发送结束,请求消息发送线程继续执行;进一步的,当CLIENT端接收到请求消息,进行请求消息处理具体过程是:CLIENT端接收到请求消息时,该CLIENT一定是本次请求的接收端;CLIENT根据消息中的操作码,在本地查找并执行与之匹配的请求回调函数,如果请求消息中的应答标志位为0,则表示该请求不需要应答,本次处理结束,否则组织应答消息发送给SERVER端,本次处理结束;应答消息格式如图3所示:应答消息的目的进程ID是请求消息的源进程ID,源进程ID是CLIENT自己的进程ID,序列号、操作码与请求消息相同,应答错误码等于请求回调函数的返回值(如果没有找到请求回调函数,应答错误码为“该请求不支持”),消息长度以及消息载荷由请求回调函数的出参决定(如果没有找到请求回调函数,消息就没有载荷);进一步的,当SERVER端接收到请求消息,进行请求消息处理具体过程是:SERVER端接收到请求消息时,根据请求消息中的目的进程ID是否等于SERVER进程ID判断自己是本次请求的接收端还是转发端;如果是接收端,SERVER根据消息中的操作码,在本地查找并执行与之匹配的请求回调函数,如果请求消息中的应答标志位为0,则表示该请求不需要应答,本次处理结束,否则以请求消息中的源进程ID为主键,在本地已连接进程记录中查找对应CLIENT进程,向该CLIENT发送应答消息;应答消息格式如图3所示:目的进程ID是请求消息的源进程ID,源本文档来自技高网...
一种进程间通讯的方法及装置

【技术保护点】
一种进程间通讯的方法,其特征在于包括:通讯拓扑建立步骤,设置n个进程,每个进程静态设置唯一标识的进程ID;选择一个进程作为通讯拓扑中SERVER端;其余n‑1个进程分别对应作为n‑1个CLIENT端;n个进程创建基于流的UNIX域套接字并绑定自身的SOCK PATH标识,SERVER端进入侦听并接受CLIENT端发起的连接,CLIENT端周期性向SERVER端发起连接直到连接建立为止;SERVER端靠接受连接时获取对端的CLIENT端的SOCK PATH标识识别出对端的CLIENT端进程ID;SERVER和CLIENT端都为自己保存已连接进程记录;其中进程间通讯采用远程过程调用(RPC)的形式:基于通讯拓扑建立步骤建立的通信拓扑,任意一个进程可以作为源进程发送请求消息,期望应答的目的进程是除源进程以外的任意进程;目的进程接收到请求消息后执行请求回调函数完成本次请求的响应,然后根据请求消息中的应答标志位,可选的向源进程发送应答消息从而完成一次会话;上层软件在源进程发送请求时要指定:目的进程ID、操作码、超时参数、发送的消息体、请求类型,若是同步请求还要指定承载应答消息的BUFFER,若是异步请求要可选的给出应答处理回调函数和回调参数;当异步请求不指定应答处理回调函数时,应答属性就是无需应答,否则就是需要应答,所有的同步请求应答属性都是需要应答;上层软件在设计时如果期望某个进程响应某种请求操作码,就要提前在该进程内注册该操作码对应的请求回调函数;请求类型指的是同步请求或者异步请求。...

【技术特征摘要】
1.一种进程间通讯的方法,其特征在于包括:通讯拓扑建立步骤,设置n个进程,每个进程静态设置唯一标识的进程ID;选择一个进程作为通讯拓扑中SERVER端;其余n-1个进程分别对应作为n-1个CLIENT端;n个进程创建基于流的UNIX域套接字并绑定自身的SOCKPATH标识,SERVER端进入侦听并接受CLIENT端发起的连接,CLIENT端周期性向SERVER端发起连接直到连接建立为止;SERVER端靠接受连接时获取对端的CLIENT端的SOCKPATH标识识别出对端的CLIENT端进程ID;SERVER和CLIENT端都为自己保存已连接进程记录;其中进程间通讯采用远程过程调用(RPC)的形式:基于通讯拓扑建立步骤建立的通信拓扑,任意一个进程可以作为源进程发送请求消息,期望应答的目的进程是除源进程以外的任意进程;目的进程接收到请求消息后执行请求回调函数完成本次请求的响应,然后根据请求消息中的应答标志位,可选的向源进程发送应答消息从而完成一次会话;上层软件在源进程发送请求时要指定:目的进程ID、操作码、超时参数、发送的消息体、请求类型,若是同步请求还要指定承载应答消息的BUFFER,若是异步请求要可选的给出应答处理回调函数和回调参数;当异步请求不指定应答处理回调函数时,应答属性就是无需应答,否则就是需要应答,所有的同步请求应答属性都是需要应答;上层软件在设计时如果期望某个进程响应某种请求操作码,就要提前在该进程内注册该操作码对应的请求回调函数;请求类型指的是同步请求或者异步请求。2.根据权利要求1所述的一种进程间通讯的方法,其特征在于请求回调函数和应答处理回调函数返回值和参数如下:请求回调函数由上层软件定,用于在一个进程内响应某种操作码对应的请求,在一个进程中,一个操作码对应一个请求回调函数,函数返回值0表示执行成功,非0表示相应的错误;请求回调函数的入参包括:请求源进程ID、操作码、请求消息载荷指针、请求消息载荷长度;出参包括:应答载荷指针、应答载荷长度。应答处理回调函数由上层软件在异步发送需要应答的请求时指定,用于异步处理应答消息;函数无返回值,入参包括:请求目的进程ID、操作码、应答错误码、应答载荷指针、应答载荷长度、上层软件自定义回调参数。3.根据权利要求1所述的一种进程间通讯的方法,其特征在于进程间传递的消息格式为:消息格式由消息头和消息载荷两部分组成:消息头包括16bit目的进程ID、16bit源进程ID、32bit序列号、16bit操作码、16bit应答错误码、16bit消息长度、1bit类型标志位、1bit应答标志位、14bit保留位;其中类型标志位为0时表示消息类型是请求,为1时表示消息类型是应答;应答标志位仅当类型标志位为0时有意义,为1表示请求消息需要应答,为0表示请求消息不需要应答;应答错误码仅当类型标志位为1时有意义,当类型标志位为0时,应答错误码取值为0;消息长度表示消息头加载荷的整体消息长度;消息载荷部分长度不定,范围是0到65519字节;源进程在发送需要应答的请求消息前要生成本地会话记录:本地会话记录用于记录和描述一次尚未完成的会话,以请求消息的源进程ID加会话序列号为主键存储在请求消息发送的源进程;本地会话记录的内容包括:目的进程ID、源进程ID、会话序列号、操作码、会话类型、超时参数、同步会话参数、异步会话参数;会话序列号对源进程而言用于唯一标识一个会话,取值正整数,源进程每发送一次请求,序列号连续递增;同步会话参数仅对同步会话类型有意义,参数包括线程同步信号量、应答错误码、应答消息BUFFER、应答消息长度;异步会话参数仅对异步会话类型有意义,参数包括应答处理回调函数和回调参数。4.根据权利要求1所述的一种进程间通讯的方法,其特征在于源进程发送请求消息时,处理的具体过程为:请求消息发送步骤,对需要应答的请求,发送请求消息前先做本地会话记录,再发送请求消息,否则直接发送请求消息;CLIENT端作为源进程发送请求时,不论请求目的进程ID是多少,借助已连接进程记录,统一将请求消息发送给SERVER端;SERVER端作为源进程发送请求时,根据本次请求的目的进程ID,借助已连接进程记录,将请求消息发送给对应CLIENT;如果本次请求被上层软件定义为同步,请求消息发送的线程在消息发出后通过获取本地会话记录中同步会话参数中的信号量进入睡眠,否则,本次消息发送结束,请求消息发送线程继续执行。5.根据权利要求1所述的一种进程间通讯的方法,其特征在于当CLIENT端接收到请求消息,进行请求消息处理具体过程是:CLIENT端接收到请求消息时,该CLIENT一定是本次请求的接收端;CLIENT根据消息中的操作码,在本地查找并执行与之匹配的请求回调函数,如果请求消息中的应答标志位为0,则表示该请求不需要应答,本次处理结束,否则组织应答消息发送给SERVER端,本次处理结束;应答消息格式如图3所示:应答消息的目的进程ID是请求消息的源进程ID,源进程ID是CLIENT自己的进程ID,序列号、操作码与请求消息相同,应答错误码等于请求回调函数的返回值,消息长度以及消息载荷由请求回调函数的出参决定;如果没有找到请求回调函数,应答错误码为“该请求不支持”;如果没有找到请求回调函数,消息就没有载荷。6.根据权利要求1所述的一种进程间通讯的方法,其特征在于当SERVER端接收到请求消息,进行请求消息处理具体过程是:SERVER端接收到请求消息时,根据请求消息中的目的进程ID是否等于SERVER进程ID判断自己是本次请求的接收端还是转发端;如果是接收端,SERVER根据消息中的操作码,在本地查找并执行与之匹配的请求回调函数,如果请求消息中的应答标志位为0,则表示该请求不需要应答,本次处理结束,否则以请求消息中的源进程ID为主键,在本地已连接进程记录中查找对应CLIENT进程,向该CLIENT发送应答消息;应答消息格式如图3所示:目的进程ID是请求消息的源进程ID,源进程ID是SERVER进程ID,序列号、操作码与请求消息中相同,应答错误...

【专利技术属性】
技术研发人员:朱晨
申请(专利权)人:成都广达新网科技股份有限公司
类型:发明
国别省市:四川;51

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

1