CN108304269A - 一种数据的发送、接收方法、装置及通信框架 - Google Patents
一种数据的发送、接收方法、装置及通信框架 Download PDFInfo
- Publication number
- CN108304269A CN108304269A CN201710026343.9A CN201710026343A CN108304269A CN 108304269 A CN108304269 A CN 108304269A CN 201710026343 A CN201710026343 A CN 201710026343A CN 108304269 A CN108304269 A CN 108304269A
- Authority
- CN
- China
- Prior art keywords
- pipeline
- data
- data information
- information
- memory
- 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.)
- Pending
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/544—Buffers; Shared memory; Pipes
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本申请公开了一种基于管道的通信框架、一种数据的发送方法、装置、一种电子设备、一种数据的接收方法、装置以及另一种电子设备。其中,所述数据的发送方法,包括:通过应用程序接口获取需要发送的数据信息;将所述数据信息写入管道的内存空间中;根据所述数据信息的数据长度更新所述管道的状态信息。采用上述方法通过将数据信息存储到管道的内存空间内,使进行通信的两端基于内存管道进行通信。该通信机制不局限于用户态普通进程之间,也可以是内核组件之间或者内核与用户进程之间的通讯;不局限在一个操作***内,可以支持虚拟机与虚拟机间的通信,也可以支持虚拟机与宿主机的通信,并支持更高性能的数据通信,适合容器(轻量级虚拟机)之间高速通信的场景。
Description
技术领域
本申请涉及通信技术领域,具体涉及一种基于管道的通信框架、一种数据的发送方法以及一种数据的接收方法;本申请同时涉及一种数据的发送装置、一种电子设备、一种数据的接收装置以及另一种电子设备。
背景技术
随着通信技术的发展,在进行虚拟化或云计算处理时,往往需要在操作***内的进程间、虚拟机/容器与虚拟机之间以及虚拟机/容器与宿主机之间进行进程间通信。进程是装入内存并独立执行的程序,每个进程都有自己的私有进程空间,对其他进程是不可见的。而进程间通信就是让独立的进程间传输控制信息,或与其他进程交换数据的机制。
在现有技术下,常用的进程间通信机制有以下几种:
1、进程间通讯IPC(Inter-Process Communication)是一种通讯机制,它可以解决操作***内的用户态进程之间通过它交换数据和消息、内核组件(子***)之间通过它交换数据和消息、或者内核与用户进程之间通过它交换数据和消息。IPC包括本地机制(根据Windows共享内存)或网络机制(根据Windows套接字)。进程间通讯的方式包括:Socket,剪切板方法,内存映射文件,邮槽方法,命名管道以及匿名管道方法。
2、虚拟机通信接口VMCI(Virtual Machine Communication Interface)它能促进虚拟机与管理程序以及位于同一主机上的虚拟机之间的高速通信。VMCI不依赖于客户机网络。VMCI套接字库提供了一个方便的接口供使用此设备。VMCI套接字是用于VMCI的一个便利的应用程序编程接口(API),它提供虚拟机与管理程序以及与虚拟机之间的快速通信。
3、高级虚拟化管理接口AVMI(Advanced virtualization managementinterface)与VMCI类似的也可以跨越虚拟化边界,并能实现在内核用来处理不同类型的消息并触发用户自定义的处理逻辑。
由此可见,在现有的进程间通信机制下,基于Socket的IPC是无法跨越虚拟化边界的(在同一操作***内部);VMCI可以跨越虚拟化边界,但是基于网络通信语义的,也是基于socket接口,同时也不支持内核组件之间的消息传递和过滤,对于深层次的扩展有局限性;AVMI虽然可以跨越虚拟化边界,但是主要还是面向控制面的消息通信接口
申请内容
本申请提供一种进程间数据的传输方法,以解决现有技术中的上述问题。本申请同时涉及一种进程间数据的传输装置。
本申请实施例提供了一种基于管道的通信框架,所述基于管道的通信框架,包括:
设备模型以及驱动层;
所述设备模型,用于提供内存资源,为管道分配内存空间;
所述驱动层,包括:应用编程接口;所述应用编程接口用于访问上层应用,与用户态程序进行交互;并访问基于所述设备模型分配内存空间的管道,进行数据读写。
可选的,所述设备模型为总线设备。
可选的,所述设备模型还包括:寄存器,所述寄存器用于记录管道的状态信息。
可选的,所述状态信息,包括:管道名称、管道特征标识、管道状态、管道内数据写入位置、管道内数据读取位置、管道内写入数据的长度以及管道内读取数据的长度。
可选的,所述应用编程接口在访问所述管道时修改所述管道的管道状态,并根据执行的数据读写操作修改相应的所述状态信息。
此外,本申请实施例还提供了一种数据的发送方法,所述数据的发送方法,包括:
通过应用程序接口获取需要发送的数据信息;
将所述数据信息写入管道的内存空间中;
根据所述数据信息的数据长度更新所述管道的状态信息。
可选的,在所述通过应用程序接口获取需要发送的数据信息的步骤之前,包括:
建立用于存取数据信息的内存管道。
可选的,所述状态信息,至少包括:管道名称、管道特征标识、管道状态、管道内数据的写入位置以及管道内写入数据的长度。
可选的,所述将所述数据信息写入管道的内存空间中包括:
将所述管道的管道状态中写端的状态修改为使用状态;
触发异步事件将所述数据信息写入管道的内存空间中。
可选的,所述根据所述数据信息的数据长度更新所述管道的状态信息,包括:
根据所述数据信息的数据长度,更新管道内写入数据的长度以及管道内数据写入位置。
可选的,所述将所述数据信息写入管道的内存空间中,包括:
通过轮询将所述数据信息写入管道的内存空间中。
可选的,在所述通过应用程序接口获取需要发送的数据信息的步骤之前,包括:
根据所述管道的管道状态判断所述管道的读取端是否处于使用状态;
若否,则返回所述数据信息写入的错误信息。
可选的,若所述管道的读取端处于使用状态,则根据所述管道的管道状态判断所述管道的内存空间是否已满;
若是,则返回所述数据信息写入的错误信息。
相应的,本申请实施例还提供了一种数据的发送装置,所述数据的发送装置,包括:
数据信息发送单元,用于通过应用程序接口获取需要发送的数据信息;
内存写入单元,用于将所述数据信息写入管道的内存空间中;
更新单元,用于根据所述数据信息的数据长度更新所述管道的状态信息。
可选的,所述的数据的发送装置,还包括:
管道建立单元,用于在所述通过应用程序接口获取需要发送的数据信息之前,建立用于存取数据信息的内存管道。
可选的,所述状态信息,至少包括:管道名称、管道特征标识、管道状态、管道内数据的写入位置以及管道内写入数据的长度。
可选的,所述内存写入单元,包括:
状态修改子单元,用于将所述管道的管道状态中写端的状态修改为使用状态;
数据写入子单元,用于触发异步事件将所述数据信息写入管道的内存空间中。
可选的,所述更新单元,具体用于根据所述数据信息的数据长度,更新管道内写入数据的长度以及管道内数据写入位置。
可选的,所述内存写入单元,具体用于通过轮询将所述数据信息写入管道的内存空间中。
可选的,所述的数据的发送装置,还包括:
使用状态判断单元,用于在所述通过应用程序接口获取需要发送的数据信息之前,根据所述管道的管道状态判断所述管道的读取端是否处于使用状态;
错误反馈单元,用于接收所述使用状态判断单元的判断结果,若否,则返回所述数据信息写入的错误信息。
可选的,所述的数据的发送装置,还包括:
内存判断单元,用于接收所述使用状态判断单元的判断结果,若所述管道的读取端处于使用状态,则根据所述管道的管道状态判断所述管道的内存空间是否已满;
错误信息反馈单元,用于接收所述内存判断单元的判断结果,若是,则返回所述数据信息写入的错误信息。
此外,本申请实施例还提供了一种电子设备,所述电子设备,包括:
处理器;
存储器,用于存储数据发送程序,所述程序在被所述处理器读取执行时,执行如下操作:通过应用程序接口获取需要发送的数据信息;将所述数据信息写入管道的内存空间中;根据所述数据信息的数据长度更新所述管道的状态信息。
此外,本申请实施例还提供了一种数据的接收方法,所述数据的接收方法,包括:
根据管道的管道状态获取数据信息在所述管道的内存空间中的存储位置;
根据所述存储位置从所述管道的内存空间中获取所述数据信息。
可选的,所述状态信息,包括:管道名称、管道特征标识、管道状态、管道内数据的写入位置、管道内数据的读取位置、管道内写入数据的长度以及管道内读取数据的长度。
可选的,所述根据管道的管道状态获取数据信息在所述管道的内存空间中的存储位置,包括:
根据所述管道内写入数据的长度以及所述管道内数据写入位置,获取所述管道内数据的读取位置以及所述管道内读取数据的长度。
可选的,所述根据所述存储位置从所述管道的内存空间中获取所述数据信息,包括:
根据所述存储位置采用轮询方式从所述管道的内存空间中获取所述数据信息。
可选的,在所述根据管道的管道状态获取数据信息在所述管道的内存空间中的存储位置的步骤之前,包括:
根据所述管道的管道状态判断所述管道的写端是否处于使用状态;
若否,则返回所述数据信息写入的错误信息。
可选的,若所述管道的写端处于使用状态,则根据所述管道的状态信息判断所述管道的内存空间中是否写入有所述数据信息;
若否,则返回所述数据信息写入的错误信息。
相应的,本申请实施例还提供了一种数据的接收装置,所述数据的接收装置,包括:
存储位置获取单元,用于根据管道的管道状态获取数据信息在所述管道的内存空间中的存储位置;
数据信息获取单元,用于根据所述存储位置从所述管道的内存空间中获取所述数据信息。
可选的,所述状态信息,包括:管道名称、管道特征标识、管道状态、管道内数据的写入位置、管道内数据的读取位置、管道内写入数据的长度以及管道内读取数据的长度。
可选的,所述存储位置获取单元,具体用于根据所述管道内写入数据的长度以及所述管道内数据写入位置,获取所述管道内数据的读取位置以及所述管道内读取数据的长度。
可选的,所述数据信息获取单元,具体用于根据所述存储位置采用轮询方式从所述管道的内存空间中获取所述数据信息。
可选的,所述的数据的接收装置,还包括:
使用状态判断单元,用于在所述根据管道的管道状态获取数据信息在所述管道的内存空间中的存储位置之前,根据所述管道的管道状态判断所述管道的写端是否处于使用状态;
错误反馈单元,用于接收所述使用状态判断单元的判断结果,若否,则返回所述数据信息写入的错误信息。
可选的,所述的数据的接收装置,还包括:
内存数据判断单元,用于接收所述使用状态判断单元的判断结果,若所述管道的写端处于使用状态,则根据所述管道的状态信息判断所述管道的内存空间中是否写入有所述数据信息;
错误信息反馈单元,用于接收所述内存判断单元的判断结果,若是,则返回所述数据信息写入的错误信息。
此外,本申请实施例还提供了另一种电子设备,所述电子设备,包括:
处理器;
存储器,用于用于存储数据接收程序,所述程序在被所述处理器读取执行时,执行如下操作:根据管道的管道状态获取数据信息在所述管道的内存空间中的存储位置;根据所述存储位置从所述管道的内存空间中获取所述数据信息。
与现有技术相比,本申请具有以下优点:
本申请提供的一种基于管道的通信框架,所述基于管道的通信框架,包括:设备模型以及驱动层;所述设备模型,用于提供内存资源,为管道分配内存空间;所述驱动层,包括:应用编程接口;所述应用编程接口用于访问上层应用,与用户态程序进行交互;并访问基于所述设备模型分配内存空间的管道,进行数据读写。所述技术方案通过设备模型和驱动两个部分,对面向数据平面的设计进行简化,避免一些异步事件的行为产生数据传输的波动;不通过内核层面的队列,也能使用户进程和驱动交互。
本申请提供的一种数据的发送方法、装置以及电子设备,通过通过应用程序接口获取需要发送的数据信息;将所述数据信息写入管道的内存空间中;根据所述数据信息的数据长度更新所述管道的状态信息。
本申请提供的一种数据的接收方法、装置以及电子设备,通过根据管道的管道状态获取数据信息在所述管道的内存空间中的存储位置;根据所述存储位置从所述管道的内存空间中获取所述数据信息。
所述数据的发送方法以及数据的接收方法相互配合使用,通过将数据信息存储到管道的内存空间内,使进行通信的两端基于内存管道进行通信。该通信机制不局限于用户态普通进程之间,也可以是内核组件(子***)之间,或者内核与用户进程之间的通讯;同时不局限在一个操作***内,它可以支持,虚拟机与虚拟机之间的通信,也可以支持虚拟机与宿主机的通信,相比于传统的进程间通讯拥有更好的扩展性,并支持更高性能的数据通信,更加适合容器(轻量级虚拟机)之间高速通信的场景。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请中记载的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的附图。
图1示出了根据本申请的实施例提供的基于管道的通信框架的示意图;
图2示出了根据本申请的实施例提供的数据的发送方法的流程图;
图3示出了根据本申请的实施例提供的数据的发送装置的示意图;
图4示出了根据本申请的实施例提供的电子设备的示意图;
图5示出了根据本申请的实施例提供的数据的接收方法的流程图;
图6示出了根据本申请的实施例提供的数据的接收装置的示意图;
图7示出了根据本申请的实施例提供的电子设备的示意图。
具体实施方式
为了能够更清楚地理解本申请的上述目的、特征和优点,下面结合附图和具体实施方式对本申请进行进一步的详细描述。需要说明的是,在不冲突的情况下,本申请的实施例及实施例中的特征可以相互组合。
在下面的描述中阐述了很多具体细节以便于充分理解本申请。但是,本申请能够以很多不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本申请内涵的情况下做类似推广,因此,本申请不受下面公开的具体实施的限制。
本申请的实施例提供了一种进程间数据的传输方法,本申请的实施例同时提供了一种进程间数据的传输装置。在下面的实施例中逐一进行详细说明。
目前,进程间通讯IPC(Inter-Process Communication)只能用于操作***内的用户态进程之间通过它交换数据和消息、内核组件(子***)之间通过它交换数据和消息、或者内核与用户进程之间通过它交换数据和消息;使用虚拟机通信接口VMCI,能促进虚拟机与管理程序以及位于同一主机上的虚拟机之间的高速通信;使用高级虚拟化管理接口AVMI,与VMCI类似的也能跨越虚拟化边界,并能实现在内核用来处理不同类型的消息并触发用户自定义的处理逻辑。由此可见,在现有的通信机制下,基于Socket的IPC是无法跨越虚拟化边界的(在同一操作***内部);VMCI可以跨越虚拟化边界,但是基于网络通信语义的,也是基于socket接口,同时也不支持内核组件之间的消息传递和过滤,对于深层次的扩展有局限性;AVMI虽然可以跨越虚拟化边界,但是主要还是面向控制面的消息通信接口。针对这一问题,本申请的技术方案通过将数据信息存储到管道的内存空间内,使进行通信的两端基于内存管道进行通信。该通信机制不局限于用户态普通进程之间,也可以是内核组件(子***)之间,或者内核与用户进程之间的通讯;同时不局限在一个操作***内,它可以支持,虚拟机与虚拟机之间的通信,也可以支持虚拟机与宿主机的通信,相比于传统的进程间通讯拥有更好的扩展性,并支持更高性能的数据通信,更加适合容器(轻量级虚拟机)之间高速通信的场景。
本申请的实施例提供了一种基于管道的通信框架。所述基于管道的通信框架实施例如下:
请参考图1,其示出了根据本申请的实施例提供的基于管道的通信框架的示意图。
所述基于管道的通信框架包括:设备模型101以及驱动层103;
所述设备模型101,用于提供内存资源,为管道分配内存空间;
所述驱动层103,包括:应用编程接口;所述应用编程接口用于访问上层应用,与用户态程序进行交互;并访问基于所述设备模型分配内存空间的管道,进行数据读写。
在本实施例中,所述基于管道的通信框架是一种面向高性能数据传输的IPC的通信框架,所述通信框架,不局限于用户态普通进程之间,也可以是内核组件(子***)之间,或者内核与用户进程之间的通讯;同时,可以跨越虚拟化边界,也不局限在一个操作***内,所述通信框架可以支持虚拟机与虚拟机之间的通信,也可以支持支持虚拟机与宿主机(host)的通信。所述通信框架中用于进程间通信的管道被称为DPVPipe(DataplaneVirtualization Pipe,或称为VPipe)在下面的描述中简称为管道。
需要说明的是,框架是整个或部分***的可重用设计,表现为一组抽象构件及构件实例间交互的方法;可以说,一个框架是一个可复用的设计构件,它规定了应用的体系结构,阐明了整个设计、协作构件之间的依赖关系、责任分配和控制流程,表现为一组抽象类以及其实例之间协作的方法,它为构件复用提供了上下文关系。因此构件库的大规模重用也需要框架。构件领域框架方法在很大程度上借鉴了硬件技术发展的成就,它是构件技术、软件体系结构研究和应用软件开发三者发展结合的产物。在很多情况下,框架通常以构件库的形式出现,但构件库只是框架的一个重要部分。框架的关键还在于框架内对象间的交互模式和控制流模式。
下面对所述基于管道的通信框架的设备模型101以及驱动层103进行详细说明。
在本实施例中,所述设备模型101为总线设备(PCI-based)。总线是处理器与设备之间的通道,在设备模型中,所有的设备都是通过总线相连的。
所述设备模型101为虚拟设备(半虚拟化设备)为基于管道的所述通信框架提供内存资源,通过内存空间的映射,完成虚拟机(容器)内核态与设备模型用户态的内存共享。
可以理解的,所述设备模型101通过为每一管道分配各自的内存资源,将每个管道进行隔离,保证数据通信的独立性,使管道间彼此不会互相干扰。为管道分配内存资源是指:为管道分配内存空间,在具体实施时,可以通过PCI总线地址空间的不同位置的映射来实现。
需要说明的是,为每一管道分配的内存空间是在管道建立时进行预分配的,分配的内存空间的大小,可以通过分配时设置的参数进行调节,在内存空间分配完毕后,就不会再有任何的数据分配释放(alloc/free()函数)操作。
可以理解的,通过预分配内存空间可以减少异步,例如:只允许异步事件做最开始的数据到达通知,数据信息在进行传递时通过收发通知机制(例如:中断或事件)来触发数据信息的传输,即:在虚拟机/容器一侧通过中断通知;在主机一侧通过事件进行通知。由于每一管道在内存上是独立的,所以中断也是独立的,从而减少互相的影响(数据传输的抖动,乃至中断),并且在管道的通信方向上,传输的数据流是单方向的(管道的方向都是在建立时指定Read/write)。通过减少异步避免了过于复杂的通信模式切换(异步事件)带来的副作用。
需要说明的是,管道是一种把两个进程之间的标准输入和标准输出连接起来的机制,从而提供一种让多个进程间通信的方法,当进程创建管道时,每次都需要提供两个文件描述符来操作管道。其中一个对管道进行写操作,另一个对管道进行读操作。对管道的读写与一般的IO***函数一致,使用write()函数写入数据,使用read()读出数据。每个方向都必须建立两个管道,一个用于执行读操作,一个用于执行写操作。
在所述设备模型101中还包括:寄存器,所述寄存器用于记录管道的状态信息。所述设备模型101提供的所述寄存器辅助所述管道进行读写操作,在所述寄存器中记录的所述管道的状态信息,包括如下字段:管道名称、管道特征标识、管道状态、管道内数据写入位置、管道内数据读取位置、管道内写入数据的长度以及管道内读取数据的长度。
下面分别对所述管道的状态信息的每个字段做详细说明。
所述管道名称(name)是根据该管道执行的操作或传输的数据信息概括出的易于理解的字符串,标识该管道的唯一性。
所述管道特征标识(ID)是标识管道唯一性的特征编号,例如:管道id。
所述管道状态分别包括所述管道两端的状态(state_w以及state_r),所述管道状态包括使用状态以及空闲状态(used/free)。
所述管道内数据写入位置(offset_w)是指数据信息在所述管道的内存空间内确认所述数据信息的写入位置的偏移量;偏移量是把存储单元的实际地址与其所在段的段地址之间的距离称为段内偏移,也称为“有效地址”。
所述管道内数据读取位置(offset_r)是指数据信息在所述管道的内存空间内确认所述数据信息的读取位置的偏移量。
所述管道内写入数据的长度(bytes_w)是指管道的写入端写入所述管道的数据信息的长度,所述管道内写入数据的长度是所述管道双方向可见的,可以用于确认数据信息完整性。
所述管道内读取数据的长度(bytes_r)是指管道的读取端读取所述管道内的数据信息的长度,所述管道内读取数据的长度是所述管道双方向可见的,可以用于确认数据信息完整性。
需要说明的是,所述寄存器在更新记录的管道的状态信息时,会产生异步事件(在虚拟机/容器一侧是中断,在宿主机一侧是事件)。
在本实施例中,所述驱动层103用于通过VFS接口与用户态程序进行交互。VFS接口还用于通过访问基于所述设备模型分配内存空间的管道,进行数据读写。
需要说明的是,VFS(virtual File System虚拟文件***)的作用就是采用标准的Unix***调用读写位于不同物理介质上的不同文件***,即为各类文件***提供了一个统一的操作界面和应用编程接口。VFS是一个可以让open()、read()、write()、poll()、close()等***调用不用关心底层的存储介质和文件***类型就可以工作的粘合层。
通过VFS接口在访问所述管道时,先会将所述管道的管道状态进行修改。当通过VFS接口向所述管道执行写入操作时,是修改所述管道的写端的管道状态;同样的道理,当通过VFS接口向所述管道执行读取操作时,是修改所述管道的读取端的管道状态;在修改所述管道的管道状态之,还会根据执行的具体数据读写操作修改相应的所述状态信息。
例如:当在所述管道的写端执行数据写操作时,对所述管道的状态信息中的管道内数据的写入位置以及管道内写入数据的长度进行修改;当在所述管道的读取端执行数据读操作时,对所述管道的状态信息中的管道内数据的读取位置以及管道内读取数据的长度进行修改。
在本实施例中,所述基于管道的通信框架中的数据流向为:数据信息发送方(虚拟机/容器或宿主机)通过驱动层103提供的VFS接口将所述数据信息通过管道的写入端写入到管道的内存空间中,数据信息接收方通过驱动层103提供的VFS接口从所述管道的读取端读取所述管道的内存空间中的数据信息。根据所述基于管道的通信框架中的数据流向可见,对于面向数据平面的设计进行简化,避免了异步事件的行为产生数据传输的波动;对于数据信息的交互不再采用内核层面的队列的设计,而是直接针对用户进程和驱动的交互。
在上述的实施例中,提供了一种基于管道的通信框架,此外,本申请还提供了一种数据的发送方法;所述数据的发送方法实施例如下:
请参考图2,其示出了根据本申请的实施例提供的数据的发送方法的流程图。
所述数据的发送方法包括:
步骤S201,通过应用程序接口获取需要发送的数据信息。
在本实施例中,本步骤在所述基于管道的通信框架中的驱动层103中完成,所述通过应用程序接口获取需要发送的数据信息,可以采用如下方式实现:虚拟机/容器或宿主机的用户态应用程序通过VFS接口获取需要发送的数据信息。例如:运行在当前***上的用户态应用程序通过read()获取数据信息.
需要说明的是,由于本申请提供的所述数据的发送方法可以支持虚拟机与虚拟机之间、虚拟机与宿主机之间的通信,所以发送所述数据信息的发送方可以是虚拟机/容器或宿主机;所述需要发送的数据信息可以是运行在其他虚拟机上的应用程序向运行在当前***上的应用程序或在相同***中的不同进程申请获取的数据信息。
由于本申请提供的所述数据的发送方法是基于管道实现进程间通讯的,所以在所述通过应用程序接口获取需要发送的数据信息进行发送之前,还需要建立用于存取数据信息的内存管道。
所述建立用于存取数据信息的内存管道,可以采用如下方式实现:通过设备模型101根据分配参数分配内存空间建立所述管道。
需要说明的是,所述分配参数可以根据所述管道的使用需求进行设置。所述管道在建立时,可以采用命名的方式作为标识从而建立对应管道,一旦建立,因为是内存共享双方信息,随时可见。
可以理解的,所述管道建立完成后,并返回对应管道的数据结构,可以在使用所述管道发送或接收数据信息时随时引用和查询,例如:由于是内存共享双方信息,管道一端建立(write)并修改自己的使用状态从free到used时,所述管道的另一端端可能还没有打开管道,则通过该管道发送所述数据信息时会被阻塞;相对应的,所述管道在数据信息的传输完成后可以被释放,所述管道的释放过程仅仅是将当前端的使用状态修改free,并产生异步事件通知对端。
需要说明的是,所述管道在使用状态在更新时都会产生异步事件,产生异步事件是为了保证所述管道在建立和释放时的一致性。
由于通过所述管道进行数据信息的传输时,是数据信息的发送方(虚拟机/容器或宿主机)通过所述管道的一端向数据信息的接收方(虚拟机/容器或宿主机)所述管道的另一端发送数据信息的过程,所以在数据信息的发送方与数据信息的接收方进行数据信息的传输前都必须能够感知到对方的存在,则在步骤S201通过应用程序接口获取需要发送的数据信息之前,包括如下步骤:
根据所述管道的管道状态判断所述管道的读取端是否处于使用状态;
若否,则返回所述数据信息写入的错误信息。
在本实施例中,所述根据所述管道的管道状态判断所述管道的读取端是否处于使用状态,可以采用如下方式实现:所述管道的当前端(管道的写端)读取设备模型101提供的辅助寄存器中记录的该管道的状态信息,判断该管道的对端(管道的读取端)的状态信息。
需要说明的是,所述状态信息,至少包括:管道名称、管道特征标识、管道状态、管道内数据的写入位置以及管道内写入数据的长度;则在本步骤中,所述管道的当前端就是读取所述管道状态中的对端的状态信息。
可以理解的,若所述寄存器中记录的所述管道的对端(管道的读取端)的状态信息为使用状态used,则说明对端打开了管道可以进行所述数据信息的传输;相应的,若所述寄存器中记录的所述管道的对端的状态信息为空闲状态free,则说明对端关闭了管道则直接返回错误给上层对应的进程。
需要说明的是,由于所述管道的特殊性跨越了虚拟化边界,使得虚拟机里和宿主机的地址空间是完全隔离掉,所以不能使用原子操作来同步任何共享内存空间的操作,所以为管道的两端分别维护自己的状态,并保持双方都可见的状态。所述管道的状态迁移简单,不需要维护复杂的状态机(例如:TCP),链路非常的单一,并由于是基于内存操作不会跨越传输介质。
在本实施例中,在所述管道的当前端(管道的写端)感知到对端的状态信息为使用状态时,就可以进行数据的传输了,为了保证该管道能够完整的将所述数据信息共享到对端,在判断所述管道的对端的状态信息之后,若所述管道的读取端处于使用状态,则根据所述管道的管道状态判断所述管道的内存空间是否已满;
若是,则返回所述数据信息写入的错误信息。
可以理解的,若所述寄存器中记录的所述管道的对端(读取端)的状态信息为使用状态used,则说明对端打开了管道可以进行所述数据信息的传输,则进入根据所述管道的状态信息判断所述管道的内存空间是否已满的步骤。
在本实施例中,所述根据所述管道的状态信息判断所述管道的内存空间是否已满,可以采用如下方式实现:根据所述管道的对端是否开始读取所述数据信息判断所述管道的内存空间是否已满。
可以理解的,由于所述管道的读取端是根据所述管道内写入数据的长度以及所述管道内数据写入位置,获取所述管道内数据的读取位置以及所述管道内读取数据的长度,并根据获取的状态信息,所以当所述管道的对端开始读取所述数据信息则说明所述数据信息写入到了所述管道的内存空间内,所以若所述管道的对端开始读取所述数据信息,则说明所述管道的内存空间未满;相应的,若所述管道的对端没有读取所述数据信息,说明所述管道的内存空间已满,则直接返回错误给上层对应的进程。
需要说明的是,若所述管道的内存空间已满返回错误给上层对应的进程后,可以再进行重试,并开始计时,当超过预设的时间后再次返回错误给上层对应的进程,避免抖动带来的传输中断。
步骤S203,将所述数据信息写入管道的内存空间中。
在本实施例中,所述将所述数据信息写入管道的内存空间中,实质是直接操作所述管道对应的PCI地址空间,将所述数据信息写入管道的内存空间中。在写入所述数据信息时,可借助于虚拟文件***VFS实现。
可以理解的,通过地址空间的映射,实现了虚拟机(容器)内核态与设备模型101用户态的内存共享,不引入额外的队列,避免异步和数据拷贝本身的影响。
在执行所述将所述数据信息写入管道的内存空间中时,需要将所述管道的管道状态中写端的状态修改为使用状态。
需要说明的是,在第一次往所述管道写入数据信息时,会产生异步事件(在虚拟机/容器一侧是中断,在宿主机一侧是事件),然后会屏蔽掉该中断直到本轮数据信息的传输完成,然后持续的进入polling(轮询)直接收发将所述数据信息写入管道的内存空间中。对于polling的策略,例如:时长,次数,本领域的技术人员可以根据具体的应用场景进行调整。
需要说明的是,所述轮询(polling)是一种CPU决策如何提供周边设备服务的方式,又称“程控输出入”(Programmed I/O)。轮询法的概念是,由CPU定时发出询问,依序询问每一个设备是否需要其服务,有即给予服务,服务结束后再问下一个设备,接着不断周而复始。
异步是一种通讯方式,对设备的需求较为简单。计算机提供的标准通信接口都是异步通信。在异步通信时,双方不需要共同的时钟,也就是接收方不知道发送方什么时候发送,所以在发送的信息中就要有提示接收方开始接收的信息(例如开始位,同时在结束时有停止位)。
中断是指当出现需要时,CPU暂时停止当前程序的执行转而执行处理新情况的程序和执行过程。即在程序运行过程中,***出现了一个必须由CPU立即处理的情况,此时,CPU暂时中止程序的执行转而处理这个新的情况的过程就叫做中断。
步骤S205,根据所述数据信息的数据长度更新所述管道的状态信息。
在本实施例中,所述根据所述数据信息的数据长度更新所述管道的状态信息,可以采用如下方式实现:在所述管道的当前端(管道的写端)将所述数据信息写入管道的内存空间后,根据写入所述管道内存空间的所述数据信息的数据长度更新设备模型101提供的辅助寄存器中记录的该管道的状态信息。
需要说明的是,所述状态信息,包括:管道名称、管道特征标识、管道状态、管道内数据的写入位置、管道内数据的读取位置、管道内写入数据的长度以及管道内读取数据的长度。
具体的,在本步骤中,对所述所述管道的状态信息更新就是通过写入所述管道内存空间的所述数据信息的数据长度,更新所述管道状态中的管道内写入数据的长度以及管道内数据写入位置。
可以理解的,由于所述管道的内存空间内可能已存储有其他数据信息,所以需要根据所述数据信息的长度更新所述数据信息的写偏移。
在上述的实施例中,提供了一种数据的发送方法,与上述数据的发送方法相对应的,本申请还提供了一种数据的发送装置。由于装置的实施例基本相似于方法的实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。下述描述的装置实施例仅仅是示意性的。所述数据的发送装置实施例如下:
请参考图3,其示出了根据本申请的实施例提供的数据的发送装置的示意图。
所述数据的发送装置,包括:数据信息发送单元301、内存写入单元303以及更新单元305;
所述数据信息发送单元301,用于通过应用程序接口获取需要发送的数据信息;
所述内存写入单元303,用于将所述数据信息写入管道的内存空间中;
所述更新单元305,用于根据所述数据信息的数据长度更新所述管道的状态信息。
可选的,所述的数据的发送装置,还包括:管道建立单元;
所述管道建立单元,用于在所述通过应用程序接口获取需要发送的数据信息之前,建立用于存取数据信息的内存管道。
可选的,所述状态信息,至少包括:管道名称、管道特征标识、管道状态、管道内数据的写入位置以及管道内写入数据的长度。
可选的,所述内存写入单元303,包括:
状态修改子单元,用于将所述管道的管道状态中发送端的状态修改为使用状态;
数据写入子单元,用于触发异步事件将所述数据信息写入管道的内存空间中。
可选的,所述更新单元305,具体用于根据所述数据信息的数据长度,更新管道内写入数据的长度以及管道内数据写入位置。
可选的,所述内存写入单元303,具体用于通过轮询将所述数据信息写入管道的内存空间中。
可选的,所述的数据的发送装置,还包括:使用状态判断单元以及错误反馈单元;
所述使用状态判断单元,用于在所述通过应用程序接口获取需要发送的数据信息之前,根据所述管道的管道状态判断所述管道的接收端是否处于使用状态;
所述错误反馈单元,用于接收所述使用状态判断单元的判断结果,若否,则返回所述数据信息写入的错误信息。
可选的,所述的数据的发送装置,还包括:内存判断单元以及错误信息反馈单元;
所述内存判断单元,用于接收所述使用状态判断单元的判断结果,若所述管道的接收端处于使用状态,则根据所述管道的管道状态判断所述管道的内存空间是否已满;
所述错误信息反馈单元,用于接收所述内存判断单元的判断结果,若是,则返回所述数据信息写入的错误信息。
在上述的实施例中,提供了一种通信接口框架、一种数据的发送方法以及一种数据的发送装置,此外,本申请还提供了一种电子设备;所述电子设备实施例如下:
请参考图4,其示出了根据本申请的实施例提供的电子设备的示意图。
所述电子设备,包括:处理器413;存储器403;
所述存储器403,用于存储数据发送程序,所述程序在被所述处理器读取执行时,执行如下操作:通过应用程序接口获取需要发送的数据信息;将所述数据信息写入管道的内存空间中;根据所述数据信息的数据长度更新所述管道的状态信息。
在上述的实施例中,提供了一种通信接口框架、一种数据的发送方法、一种数据的发送装置以及一种电子设备,此外,本申请还提供了一种数据的接收方法;所述数据的接收方法实施例如下:
请参考图5,其示出了根据本申请的实施例提供的数据的接收方法的流程图。
所述数据的接收方法,包括:
步骤S501,根据管道的管道状态获取数据信息在所述管道的内存空间中的存储位置。
在本实施例中,所述根据管道的管道状态获取数据信息在所述管道的内存空间中的存储位置,可以采用如下方式实现:根据所述管道的管道状态中的管道内数据的写入位置就可以得到存储所述数据信息的起始地址,所述管道的读取端通过指向该地址的就可以定位到所述数据信息,获取数据信息在所述管道的内存空间中的存储位置。
需要说明的是,所述管道的状态信息,包括:管道名称、管道特征标识、管道状态、管道内数据的写入位置、管道内数据的读取位置、管道内写入数据的长度以及管道内读取数据的长度。在所述管道的读取端根据所述管道内写入数据的长度以及所述管道内数据写入位置,获取到所述数据信息在所述管道的内存空间中的存储位置后,更新所述管道的状态信息中的管道内数据的读取位置以及所述管道内读取数据的长度。
由于通过所述管道进行数据信息的传输时,是数据信息的发送方(虚拟机/容器或宿主机)通过所述管道的一端向数据信息的接收方(虚拟机/容器或宿主机)所述管道的另一端发送数据信息的过程,所以在数据信息的发送方与数据信息的接收方进行数据信息的传输前都必须能够感知到对方的存在,则在步骤S501根据管道的管道状态获取数据信息在所述管道的内存空间中的存储位置之前,包括如下步骤:
根据所述管道的管道状态判断所述管道的发送端是否处于使用状态;
若否,则返回所述数据信息写入的错误信息。
在本实施例中,所述根据所述管道的管道状态判断所述管道的发送端是否处于使用状态,可以采用如下方式实现:所述管道的当前端(管道的读取端)读取设备模型101提供的辅助寄存器中记录的该管道的状态信息,判断该管道的对端(管道的写端)的状态信息。
可以理解的,若所述寄存器中记录的所述管道的对端的管道状态为使用状态used,则说明对端打开了管道可以进行所述数据信息的传输;相应的,若所述寄存器中记录的所述管道的对端的管道状态为空闲状态free,则说明对端关闭了管道则直接返回错误给上层对应的进程。
在本实施例中,在所述管道的当前端(管道的读取端)感知到对端的管道状态为使用状态时,就可以进行数据的传输了,为了保证该管道能够接收到所述数据信息在判断所述管道的对端的管道状态之后,若所述管道状态为处于使用状态,则根据所述管道的管道状态判断所述管道的内存空间中是否写入有所述数据信息;
若否,则返回所述数据信息写入的错误信息。
可以理解的,若所述寄存器中记录的所述管道的对端的管道状态为使用状态used,则说明对端打开了管道可以进行所述数据信息的传输,则进入根据所述管道的状态信息判断所述管道的内存空间中是否写入有所述数据信息的步骤。
在本实施例中,根据所述管道的状态信息判断所述管道的内存空间中是否写入有所述数据信息,可以采用如下方式实现:根据所述管道的状态信息中的管道内数据的写入位置以及管道内写入数据的长度判断所述管道的内存空间中是否写入有所述数据信息。
可以理解的,若所述管道的状态信息中包含管道内数据的写入位置以及管道内写入数据的长度,则说明所述管道内写入有数据信息;相应的,若所述管道的状态信息中没有管道内数据的写入位置以及管道内写入数据的长度,说明所述管道的没有数据信息可以读取,所述管道的内存空间内没有数据信息,则直接返回错误给上层对应的进程。
需要说明的是,若所述管道的内存空间内没有数据信息返回错误给上层对应的进程后,可以再进行重试,并开始计时,当超过预设的时间后再次返回错误给上层对应的进程,避免抖动带来的传输中断。
步骤S503,根据所述存储位置从所述管道的内存空间中获取所述数据信息。
在本实施例中,所述根据所述存储位置从所述管道的内存空间中获取所述数据信息实质是直接操作所述管道对应的PCI地址空间,从所述管道的内存空间中获取所述数据信息。在读取所述数据信息时,可借助于虚拟文件***VFS实现。
需要说明的是,在所述管道的当前端(读取端)接收到所述管道的对端(写入端)通知的所述数据信息写入完毕后,进入polling(轮询)模式,根据所述存储位置不断的从所述管道的内存空间内读取所述数据信息,直到本轮数据信息的传输完成。对于polling的策略,例如:时长,次数,本领域的技术人员可以根据具体的应用场景进行调整。
在上述的实施例中,提供了一种数据的接收方法,与上述数据的接收方法相对应的,本申请还提供了一种数据的接收装置。由于装置的实施例基本相似于方法的实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。下述描述的装置实施例仅仅是示意性的。所述数据的接收装置实施例如下:
请参考图6,其示出了根据本申请的实施例提供的数据的接收装置的示意图。
所述数据的接收装置,包括:存储位置获取单元601以及数据信息获取单元603;
所述存储位置获取单元601,用于根据管道的管道状态获取数据信息在所述管道的内存空间中的存储位置;
所述数据信息获取单元603,用于根据所述存储位置从所述管道的内存空间中获取所述数据信息。
可选的,所述状态信息,包括:管道名称、管道特征标识、管道状态、管道内数据的写入位置、管道内数据的读取位置、管道内写入数据的长度以及管道内读取数据的长度。
可选的,所述存储位置获取单元601,具体用于根据所述管道内写入数据的长度以及所述管道内数据写入位置,获取所述管道内数据的读取位置以及所述管道内读取数据的长度。
可选的,所述数据信息获取单元603,具体用于根据所述存储位置采用轮询方式从所述管道的内存空间中获取所述数据信息。
可选的,所述的数据的接收装置,还包括:使用状态判断单元以及错误反馈单元;
所述使用状态判断单元,用于在所述根据管道的管道状态获取数据信息在所述管道的内存空间中的存储位置之前,根据所述管道的管道状态判断所述管道的发送端是否处于使用状态;
所述错误反馈单元,用于接收所述使用状态判断单元的判断结果,若否,则返回所述数据信息写入的错误信息。
可选的,所述的数据的接收装置,还包括:内存数据判断单元以及错误信息反馈单元;
所述内存数据判断单元,用于接收所述使用状态判断单元的判断结果,若所述管道的发送端处于使用状态,则根据所述管道的状态信息判断所述管道的内存空间中是否写入有所述数据信息;
所述错误信息反馈单元,用于接收所述内存判断单元的判断结果,若是,则返回所述数据信息写入的错误信息。
在上述的实施例中,提供了一种通信接口框架、一种数据的发送方法、一种数据的发送装置、一种电子设备、一种数据的接收方法以及一种数据的接收装置,此外,本申请还提供了另一种电子设备;所述电子设备实施例如下:
请参考图7,其示出了根据本申请的实施例提供的电子设备的示意图。
所述电子设备,包括:
处理器701;
存储器703;
所述存储器703,用于存储数据接收程序,所述程序在被所述处理器读取执行时,执行如下操作:根据管道的管道状态获取数据信息在所述管道的内存空间中的存储位置;根据所述存储位置从所述管道的内存空间中获取所述数据信息。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,根据只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
1、计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括非暂存电脑可读媒体(transitory media),根据调制的数据信号和载波。
2、本领域技术人员应明白,本申请的实施例可提供为方法、***或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请虽然以较佳实施例公开根据上,但其并不是用来限定本申请,任何本领域技术人员在不脱离本申请的精神和范围内,都可以做出可能的变动和更新,因此本申请的保护范围应当以本申请权利要求所界定的范围为准。
Claims (35)
1.一种基于管道的通信框架,其特征在于,包括:设备模型以及驱动层;
所述设备模型,用于提供内存资源,为管道分配内存空间;
所述驱动层,包括:应用编程接口;所述应用编程接口用于访问上层应用,与用户态程序进行交互;并访问基于所述设备模型分配内存空间的管道,进行数据读写。
2.根据权利要求1所述的基于管道的通信框架,其特征在于,所述设备模型为总线设备。
3.根据权利要求1所述的基于管道的通信框架,其特征在于,所述设备模型还包括:寄存器,所述寄存器用于记录管道的状态信息。
4.根据权利要求3所述的基于管道的通信框架,其特征在于,所述状态信息,包括:管道名称、管道特征标识、管道状态、管道内数据写入位置、管道内数据读取位置、管道内写入数据的长度以及管道内读取数据的长度。
5.根据权利要求4所述的基于管道的通信框架,其特征在于,所述应用编程接口在访问所述管道时修改所述管道的管道状态,并根据执行的数据读写操作修改相应的所述状态信息。
6.一种数据的发送方法,其特征在于,包括:
通过应用程序接口获取需要发送的数据信息;
将所述数据信息写入管道的内存空间中;
根据所述数据信息的数据长度更新所述管道的状态信息。
7.根据权利要求6所述的数据的发送方法,其特征在于,在所述通过应用程序接口获取需要发送的数据信息的步骤之前,包括:
建立用于存取数据信息的内存管道。
8.根据权利要求7所述的数据的发送方法,其特征在于,所述状态信息,至少包括:管道名称、管道特征标识、管道状态、管道内数据的写入位置以及管道内写入数据的长度。
9.根据权利要求8所述的数据的发送方法,其特征在于,所述将所述数据信息写入管道的内存空间中包括:
将所述管道的管道状态中写端的状态修改为使用状态;
触发异步事件将所述数据信息写入管道的内存空间中。
10.根据权利要求9所述的数据的发送方法,其特征在于,所述根据所述数据信息的数据长度更新所述管道的状态信息,包括:
根据所述数据信息的数据长度,更新管道内写入数据的长度以及管道内数据写入位置。
11.根据权利要求10所述的数据的发送方法,其特征在于,所述将所述数据信息写入管道的内存空间中,包括:
通过轮询将所述数据信息写入管道的内存空间中。
12.根据权利要求6-11任意一项所述的数据的发送方法,其特征在于,在所述通过应用程序接口获取需要发送的数据信息的步骤之前,包括:
根据所述管道的管道状态判断所述管道的读取端是否处于使用状态;
若否,则返回所述数据信息写入的错误信息。
13.根据权利要求12所述的数据的发送方法,其特征在于,若所述管道的读取端处于使用状态,则根据所述管道的管道状态判断所述管道的内存空间是否已满;
若是,则返回所述数据信息写入的错误信息。
14.一种数据的发送装置,其特征在于,包括:
数据信息发送单元,用于通过应用程序接口获取需要发送的数据信息;
内存写入单元,用于将所述数据信息写入管道的内存空间中;
更新单元,用于根据所述数据信息的数据长度更新所述管道的状态信息。
15.根据权利要求14所述的数据的发送装置,其特征在于,还包括:
管道建立单元,用于在所述通过应用程序接口获取需要发送的数据信息之前,建立用于存取数据信息的内存管道。
16.根据权利要求15所述的数据的发送装置,其特征在于,所述状态信息,至少包括:管道名称、管道特征标识、管道状态、管道内数据的写入位置以及管道内写入数据的长度。
17.根据权利要求16所述的数据的发送装置,其特征在于,所述内存写入单元,包括:
状态修改子单元,用于将所述管道的管道状态中写端的状态修改为使用状态;
数据写入子单元,用于触发异步事件将所述数据信息写入管道的内存空间中。
18.根据权利要求17所述的数据的发送装置,其特征在于,所述更新单元,具体用于根据所述数据信息的数据长度,更新管道内写入数据的长度以及管道内数据写入位置。
19.根据权利要求18所述的数据的发送装置,其特征在于,所述内存写入单元,具体用于通过轮询将所述数据信息写入管道的内存空间中。
20.根据权利要求14-19任意一项所述的数据的发送装置,其特征在于,还包括:
使用状态判断单元,用于在所述通过应用程序接口获取需要发送的数据信息之前,根据所述管道的管道状态判断所述管道的读取端是否处于使用状态;
错误反馈单元,用于接收所述使用状态判断单元的判断结果,若否,则返回所述数据信息写入的错误信息。
21.根据权利要求20所述的数据的发送装置,其特征在于,还包括:
内存判断单元,用于接收所述使用状态判断单元的判断结果,若所述管道的读取端处于使用状态,则根据所述管道的管道状态判断所述管道的内存空间是否已满;
错误信息反馈单元,用于接收所述内存判断单元的判断结果,若是,则返回所述数据信息写入的错误信息。
22.一种电子设备,其特征在于,所述电子设备包括:
处理器;
存储器,用于存储数据发送程序,所述程序在被所述处理器读取执行时,执行如下操作:通过应用程序接口获取需要发送的数据信息;将所述数据信息写入管道的内存空间中;根据所述数据信息的数据长度更新所述管道的状态信息。
23.一种数据的接收方法,其特征在于,包括:
根据管道的管道状态获取数据信息在所述管道的内存空间中的存储位置;
根据所述存储位置从所述管道的内存空间中获取所述数据信息。
24.根据权利要求23所述的数据的接收方法,其特征在于,所述状态信息,包括:管道名称、管道特征标识、管道状态、管道内数据的写入位置、管道内数据的读取位置、管道内写入数据的长度以及管道内读取数据的长度。
25.根据权利要求24所述的数据的接收方法,其特征在于,所述根据管道的管道状态获取数据信息在所述管道的内存空间中的存储位置,包括:
根据所述管道内写入数据的长度以及所述管道内数据写入位置,获取所述管道内数据的读取位置以及所述管道内读取数据的长度。
26.根据权利要求23所述的数据的接收方法,其特征在于,所述根据所述存储位置从所述管道的内存空间中获取所述数据信息,包括:
根据所述存储位置采用轮询方式从所述管道的内存空间中获取所述数据信息。
27.根据权利要求23-26任意一项所述的数据的接收方法,其特征在于,在所述根据管道的管道状态获取数据信息在所述管道的内存空间中的存储位置的步骤之前,包括:
根据所述管道的管道状态判断所述管道的写端是否处于使用状态;
若否,则返回所述数据信息写入的错误信息。
28.根据权利要求27所述的数据的接收方法,其特征在于,若所述管道的写端处于使用状态,则根据所述管道的状态信息判断所述管道的内存空间中是否写入有所述数据信息;
若否,则返回所述数据信息写入的错误信息。
29.一种数据的接收装置,其特征在于,包括:
存储位置获取单元,用于根据管道的管道状态获取数据信息在所述管道的内存空间中的存储位置;
数据信息获取单元,用于根据所述存储位置从所述管道的内存空间中获取所述数据信息。
30.根据权利要求29所述的数据的接收装置,其特征在于,所述状态信息,包括:管道名称、管道特征标识、管道状态、管道内数据的写入位置、管道内数据的读取位置、管道内写入数据的长度以及管道内读取数据的长度。
31.根据权利要求30所述的数据的接收装置,其特征在于,所述存储位置获取单元,具体用于根据所述管道内写入数据的长度以及所述管道内数据写入位置,获取所述管道内数据的读取位置以及所述管道内读取数据的长度。
32.根据权利要求29所述的数据的接收装置,其特征在于,所述数据信息获取单元,具体用于根据所述存储位置采用轮询方式从所述管道的内存空间中获取所述数据信息。
33.根据权利要求29-32任意一项所述的数据的接收装置,其特征在于,还包括:
使用状态判断单元,用于在所述根据管道的管道状态获取数据信息在所述管道的内存空间中的存储位置之前,根据所述管道的管道状态判断所述管道的写端是否处于使用状态;
错误反馈单元,用于接收所述使用状态判断单元的判断结果,若否,则返回所述数据信息写入的错误信息。
34.根据权利要求33所述的数据的接收装置,其特征在于,还包括:
内存数据判断单元,用于接收所述使用状态判断单元的判断结果,若所述管道的写端处于使用状态,则根据所述管道的状态信息判断所述管道的内存空间中是否写入有所述数据信息;
错误信息反馈单元,用于接收所述内存判断单元的判断结果,若是,则返回所述数据信息写入的错误信息。
35.一种电子设备,其特征在于,所述电子设备包括:
处理器;
存储器,用于存储数据接收程序,所述程序在被所述处理器读取执行时,执行如下操作:根据管道的管道状态获取数据信息在所述管道的内存空间中的存储位置;根据所述存储位置从所述管道的内存空间中获取所述数据信息。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710026343.9A CN108304269A (zh) | 2017-01-13 | 2017-01-13 | 一种数据的发送、接收方法、装置及通信框架 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710026343.9A CN108304269A (zh) | 2017-01-13 | 2017-01-13 | 一种数据的发送、接收方法、装置及通信框架 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN108304269A true CN108304269A (zh) | 2018-07-20 |
Family
ID=62872373
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710026343.9A Pending CN108304269A (zh) | 2017-01-13 | 2017-01-13 | 一种数据的发送、接收方法、装置及通信框架 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108304269A (zh) |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109246085A (zh) * | 2018-08-15 | 2019-01-18 | 腾讯科技(深圳)有限公司 | 一种匿名网络访问方法、客户端、***、服务器及介质 |
CN111090535A (zh) * | 2019-12-31 | 2020-05-01 | 奇安信科技集团股份有限公司 | 通信方法、装置、电子设备和存储介质 |
CN113691624A (zh) * | 2021-08-24 | 2021-11-23 | 湖北亿咖通科技有限公司 | 基于容器的数据传输方法及设备 |
CN114942791A (zh) * | 2022-05-26 | 2022-08-26 | 统信软件技术有限公司 | 一种进程唤醒方法、装置、计算设备及可读存储介质 |
WO2023065809A1 (zh) * | 2021-10-21 | 2023-04-27 | 中兴通讯股份有限公司 | Cdn网元容器配置方法、读写方法、装置、设备及存储介质 |
CN116089130A (zh) * | 2023-04-06 | 2023-05-09 | 西安热工研究院有限公司 | 一种数据管道的存储结构、工作方法、设备及储存介质 |
CN116107843A (zh) * | 2023-04-06 | 2023-05-12 | 阿里云计算有限公司 | 确定操作***性能的方法、任务调度方法、设备 |
WO2023185478A1 (zh) * | 2022-03-29 | 2023-10-05 | 华为技术有限公司 | 应用程序间通信方法、装置、存储介质及程序产品 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1501277A (zh) * | 2002-11-19 | 2004-06-02 | 宝山钢铁股份有限公司 | 总线式进程间通信方法 |
CN102023961A (zh) * | 2009-09-10 | 2011-04-20 | 中兴通讯股份有限公司 | 一种基于共享内存的通信方法及装置 |
CN103514053A (zh) * | 2013-09-22 | 2014-01-15 | 中国科学院信息工程研究所 | 一种基于共享内存的进程间通讯方法 |
CN103701807A (zh) * | 2013-12-26 | 2014-04-02 | 华为技术有限公司 | 一种vdi环境下的数据发送方法和装置 |
CN103810139A (zh) * | 2014-01-24 | 2014-05-21 | 浙江众合机电股份有限公司 | 一种多处理器的数据交换方法和装置 |
US20140281751A1 (en) * | 2013-03-15 | 2014-09-18 | International Business Machines Corporation | Early data delivery prior to error detection completion |
CN104809028A (zh) * | 2015-05-07 | 2015-07-29 | 厦门雅迅网络股份有限公司 | 一种本地多进程间数据订阅推送的方法 |
CN104838361A (zh) * | 2013-12-03 | 2015-08-12 | 华为技术有限公司 | 一种核间进程通信的方法、装置及*** |
-
2017
- 2017-01-13 CN CN201710026343.9A patent/CN108304269A/zh active Pending
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1501277A (zh) * | 2002-11-19 | 2004-06-02 | 宝山钢铁股份有限公司 | 总线式进程间通信方法 |
CN102023961A (zh) * | 2009-09-10 | 2011-04-20 | 中兴通讯股份有限公司 | 一种基于共享内存的通信方法及装置 |
US20140281751A1 (en) * | 2013-03-15 | 2014-09-18 | International Business Machines Corporation | Early data delivery prior to error detection completion |
CN103514053A (zh) * | 2013-09-22 | 2014-01-15 | 中国科学院信息工程研究所 | 一种基于共享内存的进程间通讯方法 |
CN104838361A (zh) * | 2013-12-03 | 2015-08-12 | 华为技术有限公司 | 一种核间进程通信的方法、装置及*** |
CN103701807A (zh) * | 2013-12-26 | 2014-04-02 | 华为技术有限公司 | 一种vdi环境下的数据发送方法和装置 |
CN103810139A (zh) * | 2014-01-24 | 2014-05-21 | 浙江众合机电股份有限公司 | 一种多处理器的数据交换方法和装置 |
CN104809028A (zh) * | 2015-05-07 | 2015-07-29 | 厦门雅迅网络股份有限公司 | 一种本地多进程间数据订阅推送的方法 |
Cited By (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109246085A (zh) * | 2018-08-15 | 2019-01-18 | 腾讯科技(深圳)有限公司 | 一种匿名网络访问方法、客户端、***、服务器及介质 |
CN109246085B (zh) * | 2018-08-15 | 2021-06-15 | 腾讯科技(深圳)有限公司 | 一种匿名网络访问方法、客户端、***、服务器及介质 |
CN111090535A (zh) * | 2019-12-31 | 2020-05-01 | 奇安信科技集团股份有限公司 | 通信方法、装置、电子设备和存储介质 |
CN111090535B (zh) * | 2019-12-31 | 2024-02-09 | 奇安信科技集团股份有限公司 | 通信方法、装置、电子设备和存储介质 |
CN113691624A (zh) * | 2021-08-24 | 2021-11-23 | 湖北亿咖通科技有限公司 | 基于容器的数据传输方法及设备 |
WO2023065809A1 (zh) * | 2021-10-21 | 2023-04-27 | 中兴通讯股份有限公司 | Cdn网元容器配置方法、读写方法、装置、设备及存储介质 |
WO2023185478A1 (zh) * | 2022-03-29 | 2023-10-05 | 华为技术有限公司 | 应用程序间通信方法、装置、存储介质及程序产品 |
CN114942791A (zh) * | 2022-05-26 | 2022-08-26 | 统信软件技术有限公司 | 一种进程唤醒方法、装置、计算设备及可读存储介质 |
CN116089130A (zh) * | 2023-04-06 | 2023-05-09 | 西安热工研究院有限公司 | 一种数据管道的存储结构、工作方法、设备及储存介质 |
CN116107843A (zh) * | 2023-04-06 | 2023-05-12 | 阿里云计算有限公司 | 确定操作***性能的方法、任务调度方法、设备 |
CN116107843B (zh) * | 2023-04-06 | 2023-09-26 | 阿里云计算有限公司 | 确定操作***性能的方法、任务调度方法、设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108304269A (zh) | 一种数据的发送、接收方法、装置及通信框架 | |
WO2019095936A1 (zh) | 容器镜像的构建方法、***、服务器、装置及存储介质 | |
US8719845B2 (en) | Sharing and synchronization of objects | |
CN107924293A (zh) | 写时拷贝重定向 | |
CN110232037A (zh) | 主机***及其方法和加速模块 | |
US8209704B1 (en) | Techniques for user space and kernel space communication | |
CN104731943B (zh) | 一种服务器和数据处理方法 | |
WO2020125219A1 (zh) | 数据结构的读取及更新方法、装置、电子设备 | |
US11620254B2 (en) | Remote direct memory access for container-enabled networks | |
CN109690510A (zh) | 用于将数据分发到高性能计算网络和基于云的网络中的多个接收器的多播装置和方法 | |
US10462261B2 (en) | System and method for configuring a data access system | |
US9442822B2 (en) | Providing a visual representation of a sub-set of a visual program | |
CN107315972B (zh) | 一种大数据非结构化文件动态脱敏方法及*** | |
CN105843693B (zh) | 一种面向高速磁浮交通仿真的共享内存方法 | |
CN109906597A (zh) | 向和从云网络中存储和取回受限制的数据集和非受限制的数据集 | |
CN110838961B (zh) | 一种通用航空总线消息调度*** | |
WO2023231665A1 (zh) | 分布式事务处理方法、***、设备及可读存储介质 | |
CN109327557A (zh) | 一种虚拟机ip地址的管理方法及装置 | |
WO2010012230A1 (zh) | 数据同步方法及装置 | |
CN110704438B (zh) | 一种区块链中布隆过滤器的生成方法及装置 | |
WO2020125224A1 (zh) | 数据结构的读取及更新方法、装置、电子设备 | |
US8359603B1 (en) | Techniques for inter-user-space communication | |
CN109729121B (zh) | 一种云存储***及用于云存储***中实现自定义数据处理的方法 | |
CN113296979B (zh) | 一种虚幻引擎与外部程序的数据通信方法 | |
US12019647B2 (en) | Accessing application services from forms |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |