CN115033405A - 进程间数据传输方法、进程、电子设备及存储介质 - Google Patents
进程间数据传输方法、进程、电子设备及存储介质 Download PDFInfo
- Publication number
- CN115033405A CN115033405A CN202210764521.9A CN202210764521A CN115033405A CN 115033405 A CN115033405 A CN 115033405A CN 202210764521 A CN202210764521 A CN 202210764521A CN 115033405 A CN115033405 A CN 115033405A
- Authority
- CN
- China
- Prior art keywords
- data
- transmitted
- mode
- transmission
- length
- 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
Images
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)
- Communication Control (AREA)
Abstract
本申请提供一种进程间数据传输方法、进程、电子设备及存储介质。方法包括:根据待传输数据的长度,确定本次数据传输的第一传输模式;根据第一传输模式,生成传输请求,传输请求包括所述第一传输模式的标识和表征待传输数据的数据信息;其中,传输请求的数据长度不超过预设的阈值;通过内核二次拷贝的方式,向其它进程传送传输请求;传输请求用于其它进程通过采用第一传输模式对应的处理策略,获得待传输数据。本方案的进程间数据传输过程中,用户进程将传输请求以单次内核二次拷贝的方式发送给其他进程,节省了系统开销。
Description
技术领域
本申请涉及通信技术,尤其涉及一种进程间数据传输方法、进程、电子设备及存储介质。
背景技术
近几十年来,微内核操作系统已经被广泛研究和使用。进程间通信(Inter-Process Communication,IPC)是微内核操作系统中的核心功能之一,主要负责大量进程间的通信任务,进程间通信的大部分场景都为进程间数据传输,进程间数据传输的性能则成了微内核操作系统性能的主要瓶颈。
对于进程间数据传输场景,目前用户进程需要提前发送头告知信息,告知待传输数据的大小,然后用户进程再将待传输数据发送给其他进程。对于传输数量大时,需要多次内核拷贝才能完成数据的传输。上述方案中,每次进程间数据传输,都至少需要发送两次信息,而用户进程间每次的信息发送都要通过内核进程,会有多次系统调用,带来系统开销问题。
发明内容
本申请提供一种进程间数据传输方法、进程、电子设备及存储介质,用以进程间数据传输的优化,减少因多次系统调用,带来的系统开销问题。
一方面,本申请提供一种进程间数据传输方法,包括:根据待传输数据的长度,确定本次数据传输的第一传输模式;根据所述第一传输模式,生成传输请求,所述传输请求包括所述第一传输模式的标识、待传输数据的长度和表征述待传输数据的数据信息;其中,所述传输请求的数据长度不超过预设的阈值;通过内核二次拷贝的方式,向其它进程传送所述传输请求;所述传输请求用于所述其它进程通过采用所述第一传输模式对应的处理策略,获得所述待传输数据。
在一些实施中,所述传输请求包括头结构体和数据包结构体,所述传输请求包括头结构体和数据包结构体,所述头结构体用于封装所述第一传输模式的标识和待传输数据的长度,所述数据包结构体用于封装所述数据信息;所述根据待传输数据的长度,确定本次数据传输的第一传输模式,包括:若所述待传输数据和所述头结构体的数据长度之和超过所述阈值,则确定所述第一传输模式为内存映射模式或共享内存模式;其中,所述头结构体具有预定的数据长度;若所述待传输数据和所述头结构体的数据长度之和未超过所述阈值,则确定所述第一传输模式为数据直接拷贝模式。
在一些实施例中,所述第一传输模式为内存映射模式,所述待传输数据的数据信息包括所述待传输数据所在用户空间的首地址;或者,所述第一传输模式为共享内存模式,所述待传输数据的数据信息包括所述待传输数据所在共享内存的信息;或者,所述第一传输模式为数据直接拷贝模式,所述待传输数据的数据信息包括所述待传输数据。
另一方面,本申请提供一种进程间数据传输方法,包括:接收其它进程通过内核二次拷贝的方式发送的传输请求,所述传输请求包括第一传输模式的标识、待传输数据的长度和表征待传输数据的数据信息;所述传输请求的数据长度不超过预设的阈值;根据所述数据信息,采用所述第一传输模式对应的处理策略,获得所述待传输数据。
在一些实施例中,所述传输请求包括头结构体和数据包结构体,所述头结构体用于封装所述第一传输模式的标识和待传输数据的长度,所述数据包结构体用于封装所述数据信息;所述待传输数据和所述头结构体的数据长度之和超过所述阈值,所述第一传输模式为内存映射模式或共享内存模式;或者,所述待传输数据和所述头结构体的数据长度之和未超过所述阈值,所述第一传输模式为数据直接拷贝模式。
在一些实施例中,所述第一传输模式为内存映射模式,所述待传输数据的数据信息包括所述待传输数据所在用户空间的首地址;或者,所述第一传输模式为共享内存模式,所述待传输数据的数据信息包括所述待传输数据所在共享内存的信息;或者,所述第一传输模式为数据直接拷贝模式,所述待传输数据的数据信息包括所述待传输数据。
在一些实施例中,所述根据所述数据信息,采用所述第一传输模式对应的处理策略,获得所述待传输数据,包括:若所述第一传输模式为内存映射模式,则将所述待传输数据所在用户空间的首地址进行映射,通过访问映射后的地址,获得所述待传输数据;若所述第一传输模式为共享内存模式,则根据所述数据信息中的共享内存的信息,通过访问所述共享内存获得所述待传输数据;若所述第一传输模式为数据直接拷贝模式,则通过提取所述传输请求中的所述数据信息,获得所述待传输数据。
在一些实施例中,所述根据所述数据信息,采用所述第一传输模式对应的处理策略,获得所述待传输数据,包括:根据所述待传输数据的长度,向内核申请用户态下的内存;根据所述数据信息,采用所述第一传输模式对应的处理策略,将所述待传输数据存储至申请的所述内存。
在一些实施例中,所述根据所述数据信息,采用所述第一传输模式对应的处理策略,获得所述待传输数据包括:根据所述数据信息,采用所述第一传输模式对应的处理策略,将所述待传输数据存储至预先分配的用户态下的内存。
又一方面,本申请提供一种用户态进程,包括:确定模块,用于根据待传输数据的长度,确定本次数据传输的第一传输模式;第一处理模块,用于根据所述第一传输模式,生成传输请求,所述传输请求包括所述第一传输模式的标识、待传输数据的长度和待传输数据的长度和表征所述待传输数据的数据信息;其中,所述传输请求的数据长度不超过预设的阈值;传送模块,用于通过内核二次拷贝的方式,向其它进程传送所述传输请求;所述传输请求用于所述其它进程通过采用所述第一传输模式对应的处理策略,获得所述待传输数据。
在一些实施例中,所述传输请求包括头结构体和数据包结构体,所述头结构体用于封装所述第一传输模式的标识和待传输数据的长度,所述数据包结构体用于封装所述数据信息;所述确定模块具体用于:若所述待传输数据和所述头结构体的数据长度之和超过所述阈值,则确定所述第一传输模式为内存映射模式或共享内存模式;其中,所述头结构体具有预定的数据长度;若所述待传输数据和所述头结构体的数据长度之和未超过所述阈值,则确定所述第一传输模式为数据直接拷贝模式。
在一些实施例中,所述第一传输模式为内存映射模式,所述待传输数据的数据信息包括所述待传输数据所在用户空间的首地址;或者,所述第一传输模式为共享内存模式,所述待传输数据的数据信息包括所述待传输数据所在共享内存的信息;或者,所述第一传输模式为数据直接拷贝模式,所述待传输数据的数据信息包括所述待传输数据。
又一方面,本申请提供一种用户态进程,包括:接收模块,用于接收其它进程通过内核二次拷贝的方式发送的传输请求,所述传输请求包括第一传输模式的标识、待传输数据的长度和表征待传输数据的数据信息;所述传输请求的数据长度不超过预设的阈值;第二处理模块,用于根据所述数据信息,采用所述第一传输模式对应的处理策略,获得所述待传输数据。
在一些实施例中,所述传输请求包括头结构体和数据包结构体,所述头结构体用于封装所述第一传输模式的标识和待传输数据的长度,所述数据包结构体用于封装所述数据信息;所述待传输数据和所述头结构体的数据长度之和超过所述阈值,所述第一传输模式为内存映射模式或共享内存模式;或者,所述待传输数据和所述头结构体的数据长度之和未超过所述阈值,所述第一传输模式为数据直接拷贝模式。
在一些实施例中,所述第一传输模式为内存映射模式,所述待传输数据的数据信息包括所述待传输数据所在用户空间的首地址;或者,所述第一传输模式为共享内存模式,所述待传输数据的数据信息包括所述待传输数据所在共享内存的信息;或者,所述第一传输模式为数据直接拷贝模式,所述待传输数据的数据信息包括所述待传输数据。
在一些实施例中,所述第二处理模块具体用于:若所述第一传输模式为内存映射模式,则将所述待传输数据所在用户空间的首地址进行映射,通过访问映射后的地址,获得所述待传输数据;若所述第一传输模式为共享内存模式,则根据所述数据信息中的共享内存的信息,通过访问所述共享内存获得所述待传输数据;若所述第一传输模式为数据直接拷贝模式,则通过提取所述传输请求中的所述数据信息,获得所述待传输数据。
在一些实施例中,第二处理模块具体用于:根据所述待传输数据的长度,向内核申请用户态下的内存;根据所述数据信息,采用所述第一传输模式对应的处理策略,将所述待传输数据存储至申请的所述内存。
在一些实施例中,第二处理模块具体用于:根据所述数据信息,采用所述第一传输模式对应的处理策略,将所述待传输数据存储至预先分配的用户态下的内存。又一方面,本申请提供一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机执行指令,所述计算机执行指令被处理器执行时用于实现如前所述的方法。
又一方面,本申请提供一种电子设备,包括:处理器,以及与所述处理器通信连接的存储器;所述存储器存储计算机执行指令;所述处理器执行所述存储器存储的计算机执行指令,用于实现如前所述的方法。
又一方面,本申请提供另一种电子设备,包括:处理器,以及与所述处理器通信连接的存储器;所述存储器存储计算机执行指令;所述处理器执行所述存储器存储的计算机执行指令,用于实现如前所述的方法。
又一方面,本申请提供一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机执行指令,所述计算机执行指令被处理器执行时,用于实现如前所述的方法。
又一方面,本申请提供另一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机执行指令,所述计算机执行指令被处理器执行时,用于实现如前所述的方法。
本申请提供的进程间数据传输方法、进程、电子设备及存储介质中,根据待传输数据的长度,确定本次数据传输的第一传输模式;根据第一传输模式,生成传输请求,传输请求包括所述第一传输模式的标识和表征待传输数据的数据信息;其中,传输请求的数据长度不超过预设的阈值;通过内核二次拷贝的方式,向其它进程传送传输请求;传输请求用于其它进程通过采用第一传输模式对应的处理策略,获得待传输数据。本方案的进程间数据传输过程中,用户进程根据待传输数据的大小动态调整第一传输模式,通过将长度不超过预设阈值的传输请求通过单次执行内核二次拷贝的方式发送给其他进程,避免因需要多次执行内核二次拷贝所导致的多次系统调用和多次数据拷贝,从而节省系统开销。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本申请的实施例,并与说明书一起用于解释本申请的原理。
图1为根据实施例中微内核系统应用场景示意图;
图2为根据实施例中微内核系统中进程空间的进程通信场景示意图;
图3为本申请实施例一提供的进程间数据传输方法的流程示意图;
图4为本申请实施例二提供的进程间数据传输方法的流程示意图;
图5为本申请实施例三提供的进程间数据传输方法的流程示意图;
图6为示例性的三种模式用户态进程数据传递示意图;
图7为示例性的阻塞式进程间数据的写入请求发送的方法流程图;
图8为本申请实施例四提供的用户态进程的结构示意图;
图9为本申请实施例五提供的用户态进程的结构示意图;
图10为本申请实施例六中提供的一种电子设备的结构示意图。
通过上述附图,已示出本申请明确的实施例,后文中将有更详细的描述。这些附图和文字描述并不是为了通过任何方式限制本申请构思的范围,而是通过参考特定实施例为本领域技术人员说明本申请的概念。
具体实施方式
这里将详细地对示例性实施例进行说明,其示例表示在附图中。下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。
需要说明的是,本申请中对于术语的简要说明,仅是为了方便理解接下来描述的实施方式,而不是意图限定本申请的实施方式。除非另有说明,这些术语应当按照其普通和通常的含义理解。
本申请中说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似或同类的对象或实体,而不必然意味着限定特定的顺序或先后次序,除非另外注明(Unless otherwise indicated)。应该理解这样使用的用语在适当情况下可以互换,例如能够根据本申请实施例图示或描述中给出那些以外的顺序实施。
此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖但不排他的包含,例如,包含了一系列组件的产品或设备不必限于清楚地列出的那些组件,而是可包括没有清楚地列出的或对于这些产品或设备固有的其它组件。本申请中使用的术语“模块”,是指任何已知或后来开发的硬件、软件、固件、人工智能、模糊逻辑或硬件或/和软件代码的组合,能够执行与该元件相关的功能。
本申请各实施例中的“微内核系统(Microkernel Operating System)”由多个软件程序组成,它负责提供实现一个操作系统所需要的各种机制与功能。微内核系统应用广泛,具备进程管理、存储器管理以及中断和陷入处理等功能。本申请各实施例中的“实时操作系统(Real Time Operating System,RTOS)”是保证在一定时间限制内完成特定功能的微内核操作系统。它会按照排序运行、管理系统资源,并为开发应用程序提供一致的基础。实时操作系统与一般的操作系统相比,最大的特色就是“实时性”,如果有一个任务需要执行,实时操作系统会马上(在较短时间内)执行该任务,不会有较长的延时。因此在实际应用中,实时操作系统常常广泛应用在车辆驾驶领域。
本申请各实施例中的“进程”,狭义上是一段程序的执行过程,广义上是微内核系统中一个具有一定独立功能的程序关于某个数据集合的一次运动活动。进程是微内核操作系统进行资源分配和调度的基本单位,是微内核操作系统结构的基础。进程分为用户进程和内核进程,用户进程是由用户启动的进程,内核进程是微内核系统中对用户进程管理、内存管理、文件管理、驱动管理和网络管理的进程。举例来说,在32位的操作系统中,当创建一个进程时,操作系统会为该进程分配一个4GB(从虚拟地址0xC0000000到0xFFFFFFFF)大小的虚拟进程地址空间。微内核系统内核将这4GB空间分为两部分,将最高的1GB(从虚拟地址0xBFFFFFFF到0xFFFFFFFF)供内核使用,称为“内核空间”。而将较低的3GB(从虚拟地址0x00000000到0xBFFFFFFF)供各个进程使用,称为“用户空间。内核空间中存放的是内核代码和数据,而进程的用户空间中存放的是用户程序的代码和数据。当进程运行在内核空间时就处于内核态,而进程运行在用户空间时则处于用户态。进程间通信(Inter-ProcessCommunication,IPC)”,是指是指在不同进程之间传播或交换信息。进程间通信包括用户进程的通信和用户态进程和内核态进程通信两种。进程间通信的方式通常有管道(包括无名管道和命名管道)、消息队列、信号量、信号、共享内存、套接字等。
本申请各实施例中的“内核二次拷贝”,是指用户进程将需要传输的内容拷贝到内核进程,其他用户进程再从内核态进程中拷贝获得所述传输的内容的过程。具体的,由于每个用户进程只能访问对应的用户空间中的数据,无法访问其他用户进程对应的用户空间中的数据,而每个用户进程都可以访问内核空间,因此用户进程之间数据传递可以通过内核态进程进行。即用户态的进程之间数据传递时,用户进程现先将待传输数据传送给内核进程,内核进程再将待传输数据传送给其他用户进程。
图1为根据实施例中微内核系统应用场景示意图为。如图1所示,微内核系统104用于对进程管理、存储器管理以及中断和陷入等。微内核系统应用装置100搭载有微内核操作系统104,用户使用微内核系统应用装置100时,微内核系统应用装置100需要应用微内核系统104对用户需求进行处理。
其中,微内核系统应用装置100可以是智能设备,如智能驾驶设备101、计算机102、平板电脑103、移动终端设备、笔记本电脑、服务器、智能打印机、智能音箱、智能手表、无人机设备、智能家居设备、智能电网设备、航空航天设备、轨道交通设备、医学器械设备、地质设备等。微内核应用装置100也可以是网络通信设备,如高端路由设备等。其可以通过本地网(LAN,Local Area Network)、广域网(WAN,Wide Area Network)、无线局域网(WLAN,Wireless Local Area Network)或其他网络及时对用户需求给予响应并处理。
示例性的,以智能驾驶设备为例,智能驾驶设备101搭载微内核实时操作系统,智能驾驶设备101具有自动刹车装置,在车辆前部安装感应装置,当探知前方有行人或者异物时,会自动帮助驾驶员刹车。当智能驾驶设备101感应到前方行人或异物时,需要调用微内核实时操作系统,实时对进程调度和实时进程间通信来完成及时辅助驾驶员刹车的目的。
在另一些示例中,还可以再增加更多功能或减少上述功能。本申请对该微内核系统的功能不作具体限定。
图2为根据实施例中微内核系统中进程空间的进程通信场景示意图。如图2所示,进程201和进程202为用户进程,进程201和进程202通信为用户空间中进程间通信。用户空间之间各个进程之间存在进程隔离,不能直接通信,需要通过内核进程203通信,用户空间访问内核空间的一种方式是系统调用。以进程201向进程202发送数据为例,进程201先将需要传输的数据的数据大小信息等,通过系统调用内核二次拷贝,告知给进程202;进程202根据接收到的数据大小信息,向内核进程203申请相应大小的内存;之后,进程201再次通过系统调用内核二次拷贝的方式,将需要传输的数据,传输给进程202,进程202将接收到的数据存储至之前申请的内存中,至此完成进程201和进程202之间的一次数据传输。举例来说,内核二次拷贝的过程包括,进程201通过系统调用,先将数据从进程201对应的用户空间拷贝到内核进程203对应的内核空间,进程202通过系统调用,将数据从内核进程203对应的内核空间拷贝到进程202对应的用户空间。
可见,对于进程间的一次数据传输,通常需要执行两次信息传递。并且,对于进程201和进程202之间的小数据传递,可以通过执行两次信息传递完成数据传输,而对于进程201和进程202之间的大数据传递,还需将整个数据拆分为多个小数据,分别进行数据传输,导致信息传递次数较多。
图3为本申请实施例一提供的进程间数据传输方法的流程示意图,本实施例的执行主体可以是用户态进程,如图3所示,以该用户态进程作为数据发送方进行示例,该方法包括:
步骤301、根据待传输数据的长度,确定本次数据传输的第一传输模式;
步骤302、根据所述第一传输模式,生成传输请求,所述传输请求包括所述第一传输模式的标识、待传输数据的长度和表征所述待传输数据的数据信息;其中,所述传输请求的数据长度不超过预设的阈值;
步骤303、通过内核二次拷贝的方式,向其它进程传送所述传输请求;所述传输请求用于所述其它进程通过采用所述第一传输模式对应的处理策略,获得所述待传输数据。
其中,待传输数据的长度是指待传输数据占据内存的大小,所述数据信息则用于表征待传输数据。这里的表征指基于数据信息可以找到并获得待传输数据,故数据信息的形式可以不限,例如,数据信息可以包括待传输数据本身,或者数据信息可以包括待传输数据所在的位置等。其中,待传输数据所在的位置也可以为多种形式,比如,可以包括待传输数据所在地址的集合;或者针对连续地址,可以包括待传输数据对应的首地址和末尾地址;再或者,也可以包括待传输数据对应的首地址以及待传输数据的长度等。
示例性的,用户态进程向其他用户态进程发送传输请求时,该传输请求可以包括:第一传输模式的标识、待传输数据的长度和待传输数据在用户空间中的首地址。内核进程接收传输请求后,根据待传输数据的长度和待传输数据在用户空间中的首地址可以访问待传输数据所在地址,将待传输数据拷贝到内核进程中,内核进程再将待传输数据拷贝到其他用户态进程的内存中,即实现了用户态进程之间数据传输。
具体的,步骤301中,用户态进程根据待传输数据的长度,确定本次数据传输可采用的传输模式,该传输模式是为了保证后续生成的传输请求的长度不超过预定的阈值,以通过单次执行内核二次拷贝的方式完成传输请求的进程间传输。其中,预设的阈值可以根据操作系统的处理能力和情况确定,以规定执行单次内核二次拷贝的最大数据长度。比如,假设传输请求的数据长度未超过预设的阈值,传输请求可以通过一次内核二次拷贝的方式,向其它进程传送所述传输请求。
实际应用中,该进程间数据传输方法的执行主体可以为用户态进程。所述用户态进程可应用在多种情形,比如,可以计算机程序,例如,应用软件等;或者,例如,芯片等。也可以应用在存储有相关计算机程序的介质,例如,U盘、云盘等;再或者,还可以通过集成或安装有相关计算机程序的实体装置实现,比如,服务器等。
其中,第一传输模式的标识用于表征所述第一传输模式。举例来说,传输请求中的第一传输模式的标识,可以但不限于数字、字母、摩斯码。第一传输模式对应的标识,是可以在用户态进程和内核进程预先设定。
具体的,步骤302中,用户态进程根据第一传输模式,生成传输请求,所述传输请求包括所述第一传输模式的标识、待传输数据的长度和表征所述待传输数据的数据信息;其中,所述传输请求的数据长度不超过预设的阈值。比如,对于小数据长度的待传输数据,确定了对应的第一传输模式后,生成传输请求,传输请求中包括第一传输模式的标识、待传输数据的长度和表征所述待传输数据的数据信息,传输请求长度不超过阈值;对于大数据长度的待传输数据,确定了对应的第一传输模式后,生成传输请求,传输请求中包括第一传输模式的标识、待传输数据的长度和表征所述待传输数据的数据信息,传输请求长度不超过阈值。对于不同数据长度的待传输数据,确定对应第一传输模式,均能生成长度不超过阈值的传输请求。对应的,步骤303中,不同数据的待传输数据,对应的传输请求,都能通过内核二次拷贝的方式,向其它进程传送所述传输请求。再举例来说,传输请求中表征所述待传输数据的数据信息,根据当前采用的第一传输模式确定,不同的传输模式对应的数据信息不同,以保证生成的传输请求的长度不超过预定的阈值。举例来说,数据信息可以包括但不限于待传输数据本身、待传输数据所在用户空间的首地址、待传输数据的内存映射的地址、待传输数据的共享内存的地址。实际应用中,所述数据信息和所述第一传输模式的标识之间的对应关系,也可在用户态进程和内核进程预先设定。本实施例在进程间数据传输的方法中,根据待传输数据的长度,将待传输数据的传输模式设置为第一传输模式,并将第一传输模式的标识、待传输数据的长度和表征所述待传输数据的数据信息封装成,长度不超过预设阈值的传输请求,通过一次内核二次拷贝的方式,将待传输请求发送给其他进程,其他进程基于传输请求中的数据信息和传输模式标识,通过采用对应的手段获得待传输数据。本实施例在进程间数据传输的过程中,利用内核二次拷贝小数据的特性,将待传输数据转化为传输请求,即通过一次内核二次拷贝的方式,即可完成进程间数据传输,无需执行多次内核二次拷贝,从而避免多次系统调用和内核态和用户态切换带来的系统开销问题。
为了确定本次待传输数据的第一传输模式,所述传输请求包括头结构体和数据包结构体,所述头结构体用于封装所述第一传输模式的标识和待传输数据的长度,所述数据包结构体用于封装所述数据信息;图4为本申请实施例二提供的进程间数据传输方法的流程示意图,如图4所示,在任一示例的基础上,步骤301具体包括:
步骤401、若所述待传输数据和所述头结构体的数据长度之和超过所述阈值,则确定所述第一传输模式为内存映射模式或共享内存模式;其中,所述头结构体具有预定的数据长度;
步骤402、若所述待传输数据和所述头结构体的数据长度之和未超过所述阈值,则确定所述第一传输模式为数据直接拷贝模式。
实际应用中,第一传输模式包括但不限于:数据直接拷贝模式、共享内存模式、以及内存映射模式。其中,数据直接拷贝模式,对应于待传输数据和头结构体的数据长度未超过阈值。数据直接拷贝模式下,其他进程获取待传输数据需要通过内核。其中,内存映射模式,对应于待传输数据和头结构体的数据长度超过阈值。内存映射模式下,应用内存映射地址与用户进程的内存地址一一映射关系,其他进程对内存映射地址的操作,将关联到用户进程的内存地址,避免了内存拷贝的操作。其中,共享内存模式,对应于待传输数据和头结构体的数据长度超过阈值。共享内存模式下,用户态进程均可以访问共享内存,共享内存是两个正在运行的进程之间共享和传递数据的一种非常有效的方式。不同进程之间共享的内存通常为同一段物理内存。进程可以将同一段物理内存连接到他们自己的地址空间中,所有的进程都可以访问共享内存中的地址。如果某个进程向共享内存写入数据,所做的改动将立即影响到可以访问同一段共享内存的任何其他进程。
实际应用中,第一传输模式和第一传输模式的标识一一对应。结合上述实施例,第一传输模式的标识可以是数字,比如,第一传输模式的标识,可以由两个二进制数字表示,用户态进程间数据传递时,数据直接拷贝模式可以用00表征,共享内存模式可以用01表征,内存映射模式可以用10表征。若当前传输模式为数据直接拷贝模式,则传输请求中第一传输模式的标识为00。
实际应用中,每一次内核二次拷贝的数据大小不能超过预设的阈值。对于待传输数据和头结构体的数据长度之和,未超过阈值的待传输数据,应用数据直接拷贝模式,利用将待传输数据一次内核二次拷贝的方式传输数据,相比于应用共享内存模式或内存映射模式,更加简便快捷。
对于待传输数据和头结构体的数据长度之和,超过阈值的待传输数据,若应用数据直接拷贝模式,需要将待传输数据分多次内核二次拷贝的方式,才能完成数据传输。故为了避免多次传递,采用共享内存模式或内存映射模式。对于待传输数据和头结构体的数据长度之和,超过阈值的待传输数据,利用共享内存模式或内存映射模式传输数据,相比于将待传输数据分多次内核二次拷贝的方式,节省了内核多次二次拷贝的开销。
本实施例中,进程间数据传输具体采用什么模式由当前的待传输数据和头结构体的数据长度之和动态决定,从而最大限度地节约系统开销,提高数据传输的处理速度。
需要说明的是,上述各个实施例中,当待传输数据和头结构体的数据长度之和超过预设阈值时,内存映射和共享内存模式的选择不做限定,可以根据实际情况,在系统初始化的时候或者设置在满足某些条件下选择其一即可。
在一个示例中,头结构体预设的长度为12字节,传输请求的长度阈值预设为256字节。实际应用中,待传输数据和头结构体数据长度之和若超过256字节,则可确定第一传输模式为内存映射模式或共享内存模式;对应的,待传输数据和头结构体数据长度之和未超过256字节,确定第一传输模式为数据直接拷贝模式。举例来说,有三个待传输数据A、B和C,待传输数据A的数据长度为64字节,待传输数据B的数据长度为244字节,待传输数据C的数据长度为512字节。待传输数据A和头结构体数据长度之和为76字节,未超过256字节,确定第一传输模式为数据直接拷贝模式;待传输数据B和头结构体数据长度之和为256字节,未超过256字节,确定第一传输模式为数据直接拷贝模式;待传输数据C和头结构体数据长度之和为524字节,超过256字节,确定第一传输模式为内存映射模式或共享内存模式。
本示例中,通过将待传输数据和头结构体数据长度之和和预设阈值对比,确定了不同数据长度的待传输数据的第一传输模式。
此外,在一种实施方式中,所述第一传输模式为内存映射模式,所述待传输数据的数据信息包括所述待传输数据所在用户空间的首地址;
或者,所述第一传输模式为共享内存模式,所述待传输数据的数据信息包括所述待传输数据所在共享内存的信息;
或者,所述第一传输模式为数据直接拷贝模式,所述待传输数据的数据信息包括所述待传输数据。
实际应用中,传输请求中的表征所述待传输数据的数据信息,是根据传输请求中的第一传输模式确定。不同的第一传输模式,对应的传输请求中的表征所述待传输数据的数据信息不同。不同传输模式时,待传输数据的处理方式不同。示例性的,内存映射模式时,待传输数据的数据信息包括待传输数据所在用户空间的首地址,其他进程通过内存映射可以直接访问待传输数据所在地址的映射地址获取待传输数据,待传输数据没有直接通过内核二次拷贝方式,传输到其他进程。或者,共享内存模式时,待传输数据的数据信息包括待传输数据所在共享内存的信息,待传输数据存储于共享内存中,其他进程可以直接访问共享内存,待传输数据没有直接通过内核二次拷贝方式,传输到其他进程。或者,数据直接拷贝模式时,待传输数据的数据信息包括待传输数据,待传输数据直接通过内核二次拷贝方式,传输到其他进程。
需要说明的是,前述各个示例中共享内存的信息,是根据共享内存的形式决定的。比如共享内存形式是内存形式,传输请求中的表征所述待传输数据的数据信息,可以是共享内存的地址;共享内存形式是以共享文件夹的形式存储数据的,传输请求中的表征所述待传输数据的数据信息,可以是共享文件夹的地址信息等,根据共享内存的形式不同,传输请求中的表征所述待传输数据的数据信息也不同,在此,不做具体限定。
本实施方式中,根据不同的第一传输模式,动态确定传输请求中的表征所述待传输数据的数据信息,通过将不同第一模式下的待传输数据表征,可以将待传输数据进程间的传输过程,简化为一次内核二次拷贝,提高了进程间大数据传输的效率。
本实施例中提供的进程间数据传输方法中,根据待传输数据和头结构体的数据长度之和,确定待传输数据的第一传输模式为:数据直接拷贝模式、共享内存模式或内存映射模式。若待传输数据和头结构体的数据长度之和为超过阈值时,则应用数据直接拷贝模式传输数据;若待传输数据和头结构体的数据长度之和超过阈值时,则应用共享内存模式或内存映射模式传输数据。基于待传输数据和头结构体的数据长度动态调整第一传输模式,保证传输请求的长度不超过预定阈值,从而在减少开销的同时实现进程间的数据传输,尤其适用于进程间的大数据传输。
图5为本申请实施例三提供的进程间数据传输方法的流程示意图,本实施例的执行主体可以是用户态进程,如图5所示,以该用户态进程作为数据接收方进行示例,该方法包括:
步骤501、接收其它进程通过内核二次拷贝的方式发送的传输请求,所述传输请求包括第一传输模式的标识、待传输数据的长度和表征待传输数据的数据信息;所述传输请求的数据长度不超过预设的阈值;
步骤502、根据所述数据信息,采用所述第一传输模式对应的处理策略,获得所述待传输数据。
其中,第一传输模式对应的处理策略是指获取待传输数据的策略,针对不同的第一传输模式有不同的处理策略。第一传输模式的标识,用于表征本次数据传输的第一传输模式,用于接收方用户态进程确定第一传输模式。待传输数据的长度是指待传输数据占据内存的大小。所述数据信息用于表征待传输数据,用户态进程基于数据信息可以找到并获取待传输数据。当用户态进程接收到其他进程的传输请求后,根据传输请求中的第一传输模式的标识,可以确定当前进程间数据第一传输模式。根据表征待传输数据的数据信息,获取待传输数据。
实际应用中,该进程间数据传输方法的执行主体可以为用户态进程。所述用户态进程可应用在多种情形,比如,可以计算机程序,例如,应用软件等;或者,例如,芯片等。也可以应用在存储有相关计算机程序的介质,例如,U盘、云盘等;再或者,还可以通过集成或安装有相关计算机程序的实体装置实现,比如,服务器等。
具体的,步骤501中,用户态进程接收其它用户态进程,通过内核二次拷贝的方式发送的长度不超过阈值的传输请求。传输请求包括第一传输模式的标识、待传输数据的长度和表征待传输数据的数据信息。用户态进程接收到传输请求后,可以通过第一传输模式的标识确定第一传输模式。对应的,步骤502通过第一处理模式对应的处理策略,基于传输请求中的数据信息获取待传输数据。
本实施例中,接收端用户态进程通过确定传输请求表征的第一传输模式,并应用第一传输模式对应的处理策略获取待传输数据,可以实现通过一次内核二次拷贝获取其他进程发送的待传输数据,避免了多次系统调用和多次数据拷贝带来的系统开销问题。
此外,在一种实施方式中,所述传输请求包括头结构体和数据包结构体,所述头结构体用于封装所述第一传输模式的标识和待传输数据的长度,所述数据包结构体用于封装所述数据信息;
所述待传输数据和所述头结构体的数据长度之和超过所述阈值,所述第一传输模式为内存映射模式或共享内存模式;或者,所述待传输数据和所述头结构体的数据长度之和未超过所述阈值,所述第一传输模式为数据直接拷贝模式。
其中,头结构体为接收的传输请求的组成部分,其包括但不限于:第一传输模式的标识、待传输数据的长度、进程间通信开启。实际应用中,用户态进程接收其他进程的传输请求,根据传输请求中的头结构体中包括的信息,得知进程间待传输数据的第一传输模式、待传输数据的长度、进程间通信开启等信息。比如,用户态进程可以根据头结构体中的第一传输模式的标识,确定进程间数据传输的第一传输模式;或者,用户态进程出于休眠状态,接收其他进程的传输请求,传输请求的头结构体中包括进程间通信开启,用户态进程进入工作状态,可以与其他进程通信。
具体的,所述待传输数据和所述头结构体的数据长度之和超过所述阈值,所述第一传输模式为内存映射模式或共享内存模式。举例来说,待传输数据和头结构体的数据长度之和超过阈值,第一传输模式为内存映射模式,传输请求包括内存映射模式的标识、待传输数据的长度和表征待传输数据的数据信息。或者,待传输数据和头结构体的数据长度之和超过阈值,第一传输模式为共享内存模式,传输请求包括共享内存模式的标识、待传输数据的长度和表征待传输数据的数据信息。对应的,所述待传输数据和所述头结构体的数据长度之和未超过所述阈值,所述第一传输模式为数据直接拷贝模式。举例来说,待传输数据和头结构体的数据长度之和未超过阈值,第一传输模式为数据直接拷贝模式,传输请求包括数据直接拷贝模式的标识、待传输数据的长度和表征待传输数据的数据信息。
本实施例中,进程间数据传输模式由当前的待传输数据和头结构体的数据长度之和决定,从而最大限度地节约系统开销,提高数据传输的处理速度。
此外,在一种实施方式中,所述第一传输模式为内存映射模式,所述待传输数据的数据信息包括所述待传输数据所在用户空间的首地址;或者,所述第一传输模式为共享内存模式,所述待传输数据的数据信息包括所述待传输数据所在共享内存的信息;或者,所述第一传输模式为数据直接拷贝模式,所述待传输数据的数据信息包括所述待传输数据。
其中,待传输数据的数据信息表征待传输数据,用于接收端进程获取待传输数据。实际应用中,用户态进程接收其他进程的传输请求,根据第一传输模式,确定待传输数据的数据信息。比如,第一传输模式的标识为内存映射模式标识,根据第一传输模式为内存映射模式,确定待传输数据的数据信息包括待传输数据所在用户空间的首地址。或者,根据第一传输模式为共享内存模式,确定待传输数据的数据信息包括待传输数据所在共享内存的信息。或者,根据第一传输模式为数据直接拷贝模式,确定待传输数据的数据信息包括待传输数据。
本实施方式中,根据第一传输模式,确定了待传输数据的数据信息,即确定待传输数据的获取途径。
作为示例,在一种实施方式中,步骤502具体包括:若所述第一传输模式为内存映射模式,则将所述待传输数据所在用户空间的首地址进行映射,通过访问映射后的地址,获得所述待传输数据;若所述第一传输模式为共享内存模式,则根据所述数据信息中的共享内存的信息,通过访问所述共享内存获得所述待传输数据;若所述第一传输模式为数据直接拷贝模式,则通过提取所述传输请求中的所述数据信息,获得所述待传输数据。
结合上述各实施方式,用户态进程接收其他进程的传输请求,根据待传输数据的数据信息,依据第一传输模式对应的处理策略获得待传输数据。举例来说,第一传输模式为内存映射模式,待传输数据的数据信息包括待传输数据所在用户空间的首地址,用户态进程通过将待传输数据所在用户空间的首地址进行映射,通过访问映射后的地址,获得所述待传输数据。或者,第一传输模式为共享内存模式,待传输数据的数据信息包括待传输数据所在共享内存的信息,用户态进程根据所述数据信息中的共享内存的信息,通过访问所述共享内存获得所述待传输数据。或者,第一传输模式为数据直接拷贝模式,待传输数据的数据信息包括所述待传输数据,其他进程直接通过提取传输请求中的数据信息,获得所述待传输数据。
具体的,数据直接拷贝模式时,传输请求的数据信息包括待传输数据,具体指发送端用户进程向内核发送待传输数据所在用户空间的首地址,内核直接根据该地址将待传输数据拷贝至接收端用户进程。区别于数据直接拷贝模式,内存映射模式时,发送端用户进程向内核发送待传输数据所在用户的首地址,内核将该地址拷贝至接收端用户进程,然后接收端用户进程将待传输数据所在用户空间的首地址进行映射,接收端用户进程通过访问该映射的地址,获得待传输数据。
需要说明的是,第一传输模式为内存映射或共享内存模式时,其他进程通过内核二次拷贝向用户进程发送传输请求,内核不会将待传输数据拷贝到内核中,此时内核只是将传输请求传送给接收方的用户进程。
本实施方式中,根据待传输数据的数据信息,依据第一传输模式对应的确定了获取待传输数据的处理策略。
此外,在为了实现待传输数据的存储,一种实施方式中,在步骤502,可以包括:根据所述待传输数据的长度,向内核申请用户态下的内存;根据所述数据信息,采用所述第一传输模式对应的处理策略,将所述待传输数据存储至申请的所述内存。其中,用户态下的内存,用于存放待传输数据。用户态的内存是用户态进程向内核申请的用户空间内存,其他用户进程不能直接访问。实际应用中,用户态进程一般不能知道其他进程待传输数据的长度,无法提前向内核申请合适大小的户态下内存,存放待传输数据。本实施方式中,用户进程接收传输请求,传输请求中包括:第一传输模式的标识、待传输数据的长度和表征待传输数据的数据信息。用户进程根据传输请求中的待传输数据的长度,向内核申请对应大小的内存。根据数据信息,采取第一传输模式对应的处理策略,将待传输数据存储到申请的内存中。
本实施方式中,进程间数据传输不用提前发送包含头结构体的传输请求,告知其他进程待传输数据的大小,接收传输请求后,根据待传输数据的长度,向内核申请对应大小的内存,从而实现待传输数据存储空间的动态分配,节省内存资源。
此外,在另一种实施方式中,在步骤502可以包括:
根据所述数据信息,采用所述第一传输模式对应的处理策略,将所述待传输数据存储至预先分配的用户态下的内存。
其中,预先分配的用户态下的内存,是指用户态进程初始化时,内核预先分配的若干个固定大小的用户态内存池,用于存储待传输数据。预先分配的用户态下的内存,是用户态进程初始化时,向内核申请的私有用户空间内存,其他用户进程不能直接访问。为了避免向内核申请内存带来的内核进程和用户进程的切换开销问题,可以在用户态进程初始化时,预先向内核申请若干个固定大小(该大小至少大于预设阈值,视具体场景而定)的用户态内存池。用户进程接收传输请求,根据数据信息,采取第一传输模式对应的处理策略,可以直接将获取的数据存储至预先分配的用户态内存中,从而进一步减少开销。
本实施例在进程间数据传输的方法中,接收其他进程通过内核二次拷贝的方式发送的传输请求,传输请求中包括第一传输模式的标识、待传输数据的长度和表征待传输数据的数据信息,基于传输请求中的数据信息和传输模式的标识,通过采用对应的处理策略获得待传输数据。本实施例在进程间数据传输的过程中,依据第一传输模式,动态调整获取待传输数据的策略,有效避免了多次从内核拷贝数据带来的多次系统调用和内核态和用户态切换带来的系统开销问题。
需要说明的是,前述实施例可以单独实施也可以结合实施。比如对于,同一个进程,既可以发送传输请求,根据待传输数据的长度,确定本次数据传输的第一传输模式;根据第一传输模式,生成传输请求,传输请求包括所述第一传输模式的标识和表征所述待传输数据的数据信息;其中,所述传输请求的数据长度不超过预设的阈值;通过内核二次拷贝的方式,向其它进程传送所述传输请求,传输请求用于其它进程通过采用所述第一传输模式对应的处理策略,获得待传输数据。对于同一进程,也可以接收传输请求,接收其它进程通过内核二次拷贝的方式发送的传输请求,传输请求包括第一传输模式的标识和表征待传输数据的数据信息;传输请求的数据长度不超过预设的阈值;根据数据信息,采用所述第一传输模式对应的处理策略,获得待传输数。对应的用户态内存既可以存储其他进程发送的数据,也可以存储向其他进程发送的待传输数据。
为了便于理解方案,图6为示例性的三种模式用户态进程数据传递示意图,这是典型的微内核操作系统的用户进程数据传输场景,发送进程需要向接收进程发送数据传输请求。为方便描述,发送进程指需要发送数据的用户态进程,接收进程指需要接收该数据的用户态进程,内核进程通信的数据传递的阈值是256字节,小于等于该阈值内核会将数据直接进行二次拷贝,将发送进程的数据先拷贝到内核空间,然后再从内核空间拷贝到接收进程,小数据传输采用数据直接拷贝模式直接拷贝会是最有效的方式。当数据大于该阈值时,内核进程可以采取内存映射等其它方式进行进程间的数据传递,尽量保证不使用阈值大于256字节进行传输,而采用效率更高的小数据直接内核二次拷贝的方式。
如图6所示,所有的传输请求都包括一个头结构体,包括传输模式、待传输数据的大小等发送端的相关信息,为了方便描述,头结构体的大小设定为12字节,接收进程将接收的数据存储到预先向内核申请的内存池中,接收进程预先申请了多个512字节的内存空间,当图中标识①~③所示的情形发生时,内核进程唤醒接收进程的处理线程,将发送进程传递过来的数据存储到这些预申请的内存,再进行后续的操作。
如图中标识①所示的情形,待传输数据长度为128字节,头结构体大小和待传输数据长度之和小于256字节,发送进程将传输模式设置为数据直接拷贝模式,并将数据直接拷贝模式的标识和待传输数据的数据长度,写入头结构体中。发送进程将头结构体和待传输数据所在用户空间的首地址,打包为发送请求,通过内核进程将传输请求拷贝到接收进程的预先申请的内存池中,接收进程通过解析头结构体中的传输模式,得知当前数据传输模式为数据直接拷贝模式,接收进程可以通过从内核拷贝的方式获取待传输数据。
如图中标识②所示的情形,待传输数据长度为4096字节,头结构体大小和待传输数据长度之和大于256字节,将发送进程将传输模式设置为内存映射模式,并将内存映射模式的标识和待传输数据的数据长度写入头结构体中。待传输数据内存地址的映射地址的长度为8字节,头结构体大小和待传输数据内存地址的映射地址的长度之和小于256字节,发送进程将头结构体和发送进程中待传输数据内存地址的映射地址,打包为传输请求,通过内核进程将传输请求拷贝到接收进程的预先申请的内存池中,接收进程通过解析头结构体中的传输模式,得知当前数据传输模式为内存映射模式,可以将接收到的发送进程的待传输数据的内存地址映射到接收进程,接收进程便可以直接访问映射后的地址中的数据进行后续操作,省去了大数据拷贝的操作。
如图中标识③所示的情形,待传输数据长度为4096字节,头结构体大小和待传输数据长度之和大于256字节,发送进程将传输模式设置为共享内存模式,并将共享内存模式的标识和待传输数据的数据长度写入头结构体中。发送进程将待传输数据拷贝到共享内存中,待传输数据所在共享内存的信息的长度为32字节,头结构体大小和待传输数据所在共享内存信息的长度之和小于256字节,发送进程将头结构体和待传输数据所在共享内存信息,打包为传输请求,通过内核二次拷贝到接收进程的预先申请的内存池中,接收进程通过解析头结构体中的传输模式,得知当前数据传输模式为共享内存模式,接收进程便可以直接共享内存中的数据进行后续操作。
为了便于理解方案,结合阻塞式进程间数据传输进行示例,图7为示例性的阻塞式进程间数据的写入请求发送的方法流程图,所谓阻塞式即发送进程发送的请求必须等待接收进程处理完成返回后才能结束。该流程图以一次进程间数据的写入请求发送为例进行描述:
1、接收进程初始化时会申请一个内存池,同时会初始化一个进程间通信线程,进程间通信线程负责管理接收进程的内存池,管理内存队列中内存的申请、释放、弹出、入队等操作。当没有请求时进程间通信线程会处于睡眠状态,直到发送进程有请求发送过来,进程间通信线程弹出一个存储接收数据内存,用于存储发送进程发送的请求。执行完存储接收数据内存弹出操作后,等待唤醒或者直接执行下一条发送进程请求。
2、发送进程向接收进程发送写入请求,待写入数据包括两个参数,为待写入数据的初始地址和待写入数据的数据长度,发送进程开始按照内核进程能够识别的数据格式,以及接收进程约定的数据格式组装写入请求。
3、发送进程会将写入请求的头结构体和待写入数据的数据长度之和与预设阈值进行比较,头结构体中包括待写入数据的传输模式标识,如果小于等于阈值,则设置写入请求的传输模式为数据直接拷贝模式,否则,设置为内存映射模式(该流程以内存映射模式为例,共享内存模式类似);数据直接拷贝模式下,将头结构体和待写入数据的首地址组装成写入请求,写入请求的长度小于256字节。内存映射模式将头结构体和待写入数据的数据地址的映射地址组装写入请求,写入请求的长度也小于256字节。
4、发送进程将组装好的写入请求,经过内核二次拷贝将写入请求传递给接收进程。接收进程的进程间通信线程弹出一个存储接收数据内存,内核进程通过进程间通信机制将发送进程的写入请求拷贝到存储接收数据内存中,同时,该线程会被内核唤醒,发送进程进入阻塞状态,等待接收进程的回复。
5、接收进程的进程间通信线程,会根据待传输的头结构体中传输模式的标识,确定当前传输模式。当传输模式是数据直接拷贝模式时,接收进程将通过从内核拷贝的方式,获取待写入数据;当传输模式是内存映射模式时,接收进程会直接访问待写入数据的数据地址的映射地址,获取待写入数据。
6、接收进程调用底层写入操作,直至完成写入操作后,将结果通过内核二次拷贝的方式回复给发送进程,发送进程被唤醒后,接收待写入数据的写入处理结果,一次完整的进程间数据的写入操作就完成了。
实际应用中,阻塞式进程间数据传输的场景下,发送进程须等待接收进程回复接收完成后,方进行其他操作,因此对数据传输的效率有更高要求。对此,本方案中生成不超过预设阈值的传输请求(比如,上述写入请求),通过单次内核二次拷贝的方式实现数据传输,更加适合应用在大数据和阻塞式场景,节省系统开销,提高系统效率。
图8为本申请实施例四提供的用户态进程的结构示意图,如图8所示,以该用户态进程作为数据发送方进行示例,该进程包括:
确定模块81,用于根据待传输数据的长度,确定本次数据传输的第一传输模式;
第一处理模块82,用于根据所述第一传输模式,生成传输请求,所述传输请求包括所述第一传输模式的标识、待传输数据的长度和表征所述待传输数据的数据信息;其中,所述传输请求的数据长度不超过预设的阈值;
传送模块83,用于通过内核二次拷贝的方式,向其它进程传送所述传输请求;所述传输请求用于所述其它进程通过采用所述第一传输模式对应的处理策略,获得所述待传输数据。
其中,待传输数据的长度是指待传输数据占据内存的大小,所述数据信息则用于表征待传输数据。这里的表征指基于数据信息可以找到并获得待传输数据,故数据信息的形式可以不限。
本实施例中,确定模块81,根据待传输数据的长度确定第一传输模式,第一处理模块82,生成包含第一传输模式的标识和表征所述待传输数据的数据信息且长度不超过预定阈值的传输请求,传送模块83,通过单次内核二次拷贝方式将传输请求发送给其他进程,其他进程可基于传输请求中的数据信息和传输模式标识获得待传输数据。可以有效避免多次系统调用和多次数据拷贝带来的系统开销问题。
本实施例提供的用户态进程中,利用内核二次拷贝小数据的特性,根据待传输数据生成长度不超过阈值的传输请求,从而通过一次内核二次拷贝的方式,即可完成进程间数据传输,无需执行多次内核二次拷贝,避免多次系统调用和内核态和用户态切换带来的系统开销问题。
此外,在一种实施方式中,为了确定本次待传输数据的第一传输模式,所述传输请求包括头结构体和数据包结构体,所述头结构体用于封装所述第一传输模式的标识和待传输数据的长度,所述数据包结构体用于封装所述数据信息;在任一示例的基础上,确定模块81具体用于:若所述待传输数据和所述头结构体的数据长度之和超过所述阈值,则确定所述第一传输模式为内存映射模式或共享内存模式;其中,所述头结构体具有预定的数据长度;若所述待传输数据和所述头结构体的数据长度之和未超过所述阈值,则确定所述第一传输模式为数据直接拷贝模式。
实际应用中,第一传输模式包括但不限于:数据直接拷贝模式、共享内存模式、以及内存映射模式。实际应用中,每一次内核二次拷贝的数据大小不能超过预设的阈值。对于待传输数据和头结构体的数据长度之和未超过阈值的待传输数据,采用数据直接拷贝模式,利用将待传输数据一次内核二次拷贝的方式传输数据,相比于共享内存模式或内存映射模式,更加简便快捷。
本实施方式中,进程间数据传输具体采用什么模式由当前的待传输数据和头结构体的数据长度之和动态决定,从而最大限度地节约系统开销,提高数据传输的处理速度。
需要说明的是,上述各个实施例中,当待传输数据和头结构体的数据长度之和超过预设阈值时,内存映射和共享内存模式的选择不做限定,可以根据实际情况,在系统初始化的时候或者设置在满足某些条件下选择其一即可。
此外,在一种实施方式中,所述第一传输模式为内存映射模式,所述待传输数据的数据信息包括所述待传输数据所在用户空间的首地址;或者,所述第一传输模式为共享内存模式,所述待传输数据的数据信息包括所述待传输数据所在共享内存的信息。或者,所述第一传输模式为数据直接拷贝模式,所述待传输数据的数据信息包括所述待传输数据。
实际应用中,传输请求中的表征所述待传输数据的数据信息,是根据传输请求中的第一传输模式确定。不同的第一传输模式,对应的传输请求中的表征所述待传输数据的数据信息不同。不同传输模式时,待传输数据的处理方式不同。示例性的,内存映射模式时,待传输数据的数据信息包括待传输数据所在用户空间的首地址,其他进程通过内存映射可以直接访问待传输数据所在地址的映射地址获取待传输数据,待传输数据没有直接通过内核二次拷贝方式,传输到其他进程。或者,共享内存模式时,待传输数据的数据信息包括待传输数据所在共享内存的信息,待传输数据存储于共享内存中,其他进程可以直接访问共享内存,待传输数据没有直接通过内核二次拷贝方式,传输到其他进程。或者,数据直接拷贝模式时,待传输数据的数据信息包括待传输数据,待传输数据直接通过内核二次拷贝方式,传输到其他进程。需要说明的是,前述各个示例中共享内存的信息,是根据共享内存的形式决定的。
本实施方式中,根据不同的第一传输模式,动态确定传输请求中的表征所述待传输数据的数据信息,通过将不同第一模式下的待传输数据表征,可以将待传输数据进程间的传输过程,简化为一次内核二次拷贝,提高了进程间大数据传输的效率。
图9为本申请实施例五提供的用户态进程的结构示意图,如图9所示,以该用户态进程作为数据接收方进行示例,该进程包括:
接收模块91,用于接收其它进程通过内核二次拷贝的方式发送的传输请求,所述传输请求包括第一传输模式的标识、待传输数据的长度和表征待传输数据的数据信息;所述传输请求的数据长度不超过预设的阈值;
第二处理模块92,用于根据所述数据信息,采用所述第一传输模式对应的处理策略,获得所述待传输数据。
其中,第一传输模式对应的处理策略是指获取待传输数据的策略,针对不同的第一传输模式有不同的处理策略。第一传输模式的标识,用于表征本次数据传输的第一传输模式,用于接收方用户态进程确定第一传输模式。待传输数据的长度是指待传输数据占据内存的大小。所述数据信息用于表征待传输数据,用户态进程基于数据信息可以找到并获取待传输数据。当用户态进程接收到其他进程的传输请求后,根据传输请求中的第一传输模式的标识,可以确定当前进程间数据第一传输模式。根据表征待传输数据的数据信息,获取待传输数据。
本实施例中,进程通过内核二次拷贝的方式发送的传输请求中,第一传输模式的标识和表征待传输数据的数据信息,采用了对应于第一传输模式的处理策略,获取待传输数据,可以有效避免用户态进程之间大数据传输时,通过多次内核二次拷贝获取待传输数据,避免了多次系统调用和多次数据拷贝带来的系统开销问题。
此外,在一种实施方式中,所述传输请求包括头结构体和数据包结构体,所述头结构体用于封装所述第一传输模式的标识和待传输数据的长度,所述数据包结构体用于封装所述数据信息;所述待传输数据和所述头结构体的数据长度之和超过所述阈值,所述第一传输模式为内存映射模式或共享内存模式;或者,所述待传输数据和所述头结构体的数据长度之和未超过所述阈值,所述第一传输模式为数据直接拷贝模式;
其中,头结构体为接收的传输请求的组成部分,其包括但不限于:第一传输模式的标识、待传输数据的长度、进程间通信开启。
在一种实施方式中,所述第一传输模式为内存映射模式,所述待传输数据的数据信息包括所述待传输数据所在用户空间的首地址;或者,所述第一传输模式为共享内存模式,所述待传输数据的数据信息包括所述待传输数据所在共享内存的信息;或者,所述第一传输模式为数据直接拷贝模式,所述待传输数据的数据信息包括所述待传输数据。
其中,待传输数据的数据信息表征待传输数据,用于接收端进程获取待传输数据和第一传输模式是对应的。实际应用中,用户态进程接收其他进程的传输请求,根据第一传输模式,确定待传输数据的数据信息。
本实施方式中,根据第一传输模式,确定了待传输数据的数据信息,即确定待传输数据的获取途径。
作为示例,在一种实施方式中,第二处理模块92具体用于:若所述第一传输模式为内存映射模式,则将所述待传输数据所在用户空间的首地址进行映射,通过访问映射后的地址,获得所述待传输数据;若所述第一传输模式为共享内存模式,则根据所述数据信息中的共享内存的信息,通过访问所述共享内存获得所述待传输数据;若所述第一传输模式为数据直接拷贝模式,则通过从内核拷贝的方式,获得所述待传输数据。
结合上述各实施方式,用户态进程接收其他进程的传输请求,第二处理模块92,根据待传输数据的数据信息,依据第一传输模式对应的处理策略获得待传输数据。举例来说,第一传输模式为内存映射模式,待传输数据的数据信息包括待传输数据所在用户空间的首地址,第二处理模块92,将待传输数据所在用户空间的首地址进行内存映射,通过访问内存映射的映射地址,获得所述待传输数据。或者,第一传输模式为共享内存模式,待传输数据的数据信息包括待传输数据所在共享内存的信息,第二处理模块92,根据所述数据信息中的共享内存的信息,通过访问所述共享内存获得所述待传输数据。或者,第一传输模式为数据直接拷贝模式,待传输数据的数据信息包括所述待传输数据,其他进程直接则过提取传输请求中的所述数据信息,获得所述待传输数据。
在一种实施方式中,所述进程第二处理模块92具体用于根据所述待传输数据的长度,向内核申请用户态下的内存;根据所述数据信息,采用所述第一传输模式对应的处理策略,将所述待传输数据存储至申请的所述内存。
其中,用户态下的内存,用于存放待传输数据。用户态的内存是用户态进程向内核申请的用户空间内存,其他用户进程不能直接访问。本实施方式中,用户进程接收传输请求,传输请求中包括:第一传输模式的标识、待传输数据的长度和表征待传输数据的数据信息。第二处理模块92
根据传输请求中的待传输数据的长度,向内核申请对应大小的内存,并根据数据信息,采取第一传输模式对应的处理策略,将待传输数据存储到申请的内存中。
本实施方式中,进程间数据传输不用提前告知其他进程待传输数据的大小,其他进程接收传输请求后,根据待传输数据的长度,向内核申请对应大小的内存,从而实现待传输数据存储空间的动态分配,节省内存资源。
此外,在一种实施方式中,第二处理模块92具体用于,根据所述数据信息,采用所述第一传输模式对应的处理策略,将所述待传输数据存储至预先分配的用户态下的内存
其中,预先分配的用户态下的内存,是指用户态进程初始化时,内核预先分配的若干个固定大小的用户态内存池,用于存储待传输数据,其他用户进程不能直接访问。用户进程接收传输请求,根据数据信息,采取第一传输模式对应的处理策略,可以直接将获取的数据存储至预先分配的用户态内存中,从而进一步减少开销。
本实施例在进程间数据传输的过程中,依据第一传输模式,动态调整获取待传输数据的策略,有效避免了多次从内核拷贝数据带来的多次系统调用和内核态和用户态切换带来的系统开销问题。
需要说明的是,前述分别以数据发送方和数据接收方作为执行主体的介绍示例,在实际应用中,上述示例可以单独或结合实施。比如,单个用户进程可以即支持采用上述方案进行数据发送,也支持采用上述方案进行数据接收,本方案并未对其进行限制。
图10为本申请实施例六中提供的一种电子设备的结构示意图,如图10所示,该电子设备包括:
处理器(processor)291,电子设备还包括了存储器(memory)292;还可以包括通信接口(Communication Interface)293和总线294。其中,处理器291、存储器292、通信接口293、可以通过总线294完成相互间的通信。通信接口293可以用于信息传输。处理器291可以调用存储器292中的逻辑指令,以执行上述实施例的方法。
此外,上述的存储器292中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。
存储器292作为一种计算机可读存储介质,可用于存储软件程序、计算机可执行程序,如本申请实施例中的方法对应的程序指令/模块。处理器291通过运行存储在存储器292中的软件程序、指令以及模块,从而执行功能应用以及数据处理,即实现上述方法实施例中的方法。
存储器292可包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序;存储数据区可存储根据终端设备的使用所创建的数据等。此外,存储器292可以包括高速随机存取存储器,还可以包括非易失性存储器。
本申请实施例提供一种非临时性计算机可读存储介质,所述计算机可读存储介质中存储有计算机执行指令,所述计算机执行指令被处理器执行时用于实现如前述实施例所述的方法。
本申请实施例提供又一种非临时性计算机可读存储介质,所述计算机可读存储介质中存储有计算机执行指令,所述计算机执行指令被处理器执行时用于实现如前述实施例所述的方法。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本申请的其它实施方案。本申请旨在涵盖本申请的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本申请的一般性原理并包括本申请未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本申请的真正范围和精神由下面的权利要求书指出。
应当理解的是,本申请并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本申请的范围仅由所附的权利要求书来限制。
Claims (22)
1.一种进程间数据传输方法,其特征在于,包括:
根据待传输数据的长度,确定本次数据传输的第一传输模式;
根据所述第一传输模式,生成传输请求,所述传输请求包括所述第一传输模式的标识、待传输数据的长度和表征所述待传输数据的数据信息;其中,所述传输请求的数据长度不超过预设的阈值;
通过内核二次拷贝的方式,向其它进程传送所述传输请求;所述传输请求用于所述其它进程通过采用所述第一传输模式对应的处理策略,获得所述待传输数据。
2.根据权利要求1所述的方法,其特征在于,所述传输请求包括头结构体和数据包结构体,所述头结构体用于封装所述第一传输模式的标识和待传输数据的长度,所述数据包结构体用于封装所述数据信息;所述根据待传输数据的长度,确定本次数据传输的第一传输模式,包括:
若所述待传输数据和所述头结构体的数据长度之和超过所述阈值,则确定所述第一传输模式为内存映射模式或共享内存模式;其中,所述头结构体具有预定的数据长度;
若所述待传输数据和所述头结构体的数据长度之和未超过所述阈值,则确定所述第一传输模式为数据直接拷贝模式。
3.根据权利要求1或2所述的方法,其特征在于,所述第一传输模式为内存映射模式,所述待传输数据的数据信息包括所述待传输数据所在用户空间的首地址;
或者,所述第一传输模式为共享内存模式,所述待传输数据的数据信息包括所述待传输数据所在共享内存的信息;
或者,所述第一传输模式为数据直接拷贝模式,所述待传输数据的数据信息包括所述待传输数据。
4.一种进程间数据传输方法,其特征在于,包括:
接收其它进程通过内核二次拷贝的方式发送的传输请求,所述传输请求包括第一传输模式的标识、待传输数据的长度和表征待传输数据的数据信息;所述传输请求的数据长度不超过预设的阈值;
根据所述数据信息,采用所述第一传输模式对应的处理策略,获得所述待传输数据。
5.根据权利要求4所述的方法,其特征在于,所述传输请求包括头结构体和数据包结构体,所述头结构体用于封装所述第一传输模式的标识和待传输数据的长度,所述数据包结构体用于封装所述数据信息;
所述待传输数据和所述头结构体的数据长度之和超过所述阈值,所述第一传输模式为内存映射模式或共享内存模式;或者,所述待传输数据和所述头结构体的数据长度之和未超过所述阈值,所述第一传输模式为数据直接拷贝模式。
6.根据权利要求4或5所述的方法,其特征在于,所述第一传输模式为内存映射模式,所述待传输数据的数据信息包括所述待传输数据所在用户空间的首地址;
或者,所述第一传输模式为共享内存模式,所述待传输数据的数据信息包括所述待传输数据所在共享内存的信息;
或者,所述第一传输模式为数据直接拷贝模式,所述待传输数据的数据信息包括所述待传输数据。
7.根据权利要求6所述的方法,其特征在于,所述根据所述数据信息,采用所述第一传输模式对应的处理策略,获得所述待传输数据,包括:
若所述第一传输模式为内存映射模式,则将所述待传输数据所在用户空间的首地址进行映射,通过访问映射后的地址,获得所述待传输数据;
若所述第一传输模式为共享内存模式,则根据所述数据信息中的共享内存的信息,通过访问所述共享内存获得所述待传输数据;
若所述第一传输模式为数据直接拷贝模式,则通过提取所述传输请求中的所述数据信息,获得所述待传输数据。
8.根据权利要求4或5所述的方法,其特征在于,所述根据所述数据信息,采用所述第一传输模式对应的处理策略,获得所述待传输数据,包括:
根据所述待传输数据的长度,向内核申请用户态下的内存;
根据所述数据信息,采用所述第一传输模式对应的处理策略,将所述待传输数据存储至申请的所述内存。
9.根据权利要求4或5所述的方法,其特征在于,所述根据所述数据信息,采用所述第一传输模式对应的处理策略,获得所述待传输数据,包括:
根据所述数据信息,采用所述第一传输模式对应的处理策略,将所述待传输数据存储至预先分配的用户态下的内存。
10.一种用户态进程,其特征在于,包括:
确定模块,用于根据待传输数据的长度,确定本次数据传输的第一传输模式;
第一处理模块,用于根据所述第一传输模式,生成传输请求,所述传输请求包括所述第一传输模式的标识、待传输数据的长度和表征所述待传输数据的数据信息;其中,所述传输请求的数据长度不超过预设的阈值;
传送模块,用于通过内核二次拷贝的方式,向其它进程传送所述传输请求;所述传输请求用于所述其它进程通过采用所述第一传输模式对应的处理策略,获得所述待传输数据。
11.根据权利要求10所述的进程,其特征在于,所述传输请求包括头结构体和数据包结构体,所述头结构体用于封装所述第一传输模式的标识和待传输数据的长度,所述数据包结构体用于封装所述数据信息;所述确定模块具体用于:
若所述待传输数据和所述头结构体的数据长度之和超过所述阈值,则确定所述第一传输模式为内存映射模式或共享内存模式;其中,所述头结构体具有预定的数据长度;
若所述待传输数据和所述头结构体的数据长度之和未超过所述阈值,则确定所述第一传输模式为数据直接拷贝模式。
12.根据权利要求10或11所述的进程,其特征在于,所述第一传输模式为内存映射模式,所述待传输数据的数据信息包括所述待传输数据所在用户空间的首地址;
或者,所述第一传输模式为共享内存模式,所述待传输数据的数据信息包括所述待传输数据所在共享内存的信息;
或者,所述第一传输模式为数据直接拷贝模式,所述待传输数据的数据信息包括所述待传输数据。
13.一种用户态进程,其特征在于,包括:
接收模块,用于接收其它进程通过内核二次拷贝的方式发送的传输请求,所述传输请求包括第一传输模式的标识、待传输数据的长度和表征待传输数据的数据信息;所述传输请求的数据长度不超过预设的阈值;
第二处理模块,用于根据所述数据信息,采用所述第一传输模式对应的处理策略,获得所述待传输数据。
14.根据权利要求13所述的进程,其特征在于,所述传输请求包括头结构体和数据包结构体,所述头结构体用于封装所述第一传输模式的标识和待传输数据的长度,所述数据包结构体用于封装所述数据信息;
所述待传输数据和所述头结构体的数据长度之和超过所述阈值,所述第一传输模式为内存映射模式或共享内存模式;或者,所述待传输数据和所述头结构体的数据长度之和未超过所述阈值,所述第一传输模式为数据直接拷贝模式。
15.根据权利要求13或14所述的进程,其特征在于,所述第一传输模式为内存映射模式,所述待传输数据的数据信息包括所在用户空间的首地址;
或者,所述第一传输模式为共享内存模式,所述待传输数据的数据信息包括所述待传输数据所在共享内存的信息;
或者,所述第一传输模式为数据直接拷贝模式,所述待传输数据的数据信息包括所述待传输数据。
16.根据权利要求15所述的进程,其特征在于,所述第二处理模块具体用于:若所述第一传输模式为内存映射模式,则将所述待传输数据所在用户空间的首地址进行映射,通过访问映射后的地址,获得所述待传输数据;
若所述第一传输模式为共享内存模式,则根据所述数据信息中的共享内存的信息,通过访问所述共享内存获得所述待传输数据;
若所述第一传输模式为数据直接拷贝模式,则通过提取所述传输请求中的所述数据信息,获得所述待传输数据。
17.根据权利要求13或14所述的进程,其特征在于,所述第二处理模块具体用于:
根据所述待传输数据的长度,向内核申请用户态下的内存;
根据所述数据信息,采用所述第一传输模式对应的处理策略,将所述待传输数据存储至申请的所述内存。
18.根据权利要求13或14所述的进程,其特征在于,第二处理模块具体用于:
根据所述数据信息,采用所述第一传输模式对应的处理策略,将所述待传输数据存储至预先分配的用户态下的内存。
19.一种电子设备,其特征在于,包括:处理器,以及与所述处理器通信连接的存储器;
所述存储器存储计算机执行指令;
所述处理器执行所述存储器存储的计算机执行指令,以实现如权利要求1-3中任一项所述的方法。
20.一种电子设备,其特征在于,包括:处理器,以及与所述处理器通信连接的存储器;
所述存储器存储计算机执行指令;
所述处理器执行所述存储器存储的计算机执行指令,以实现如权利要求4-9中任一项所述的方法。
21.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有计算机执行指令,所述计算机执行指令被处理器执行时用于实现如权利要求1-3中任一项所述的方法。
22.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有计算机执行指令,所述计算机执行指令被处理器执行时用于实现如权利要求4-9中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210764521.9A CN115033405A (zh) | 2022-06-30 | 2022-06-30 | 进程间数据传输方法、进程、电子设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210764521.9A CN115033405A (zh) | 2022-06-30 | 2022-06-30 | 进程间数据传输方法、进程、电子设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115033405A true CN115033405A (zh) | 2022-09-09 |
Family
ID=83129589
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210764521.9A Pending CN115033405A (zh) | 2022-06-30 | 2022-06-30 | 进程间数据传输方法、进程、电子设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115033405A (zh) |
-
2022
- 2022-06-30 CN CN202210764521.9A patent/CN115033405A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
WO2018035856A1 (zh) | 实现硬件加速处理的方法、设备和系统 | |
AU751616B2 (en) | System and method of data communication in multiprocessor system | |
CN112948149A (zh) | 一种远端内存共享方法、装置、电子设备及存储介质 | |
EP0889623A2 (en) | System and method for efficient remote disk I/O | |
JP6498844B2 (ja) | コンピュータデバイス及びコンピュータデバイスによりデータを読み取る/書き込むための方法 | |
CN114201268B (zh) | 一种数据处理方法、装置、设备及可读存储介质 | |
US20230152978A1 (en) | Data Access Method and Related Device | |
CN105141603A (zh) | 通信数据传输方法及系统 | |
CN114296646B (zh) | 基于io业务的缓存方法、装置、服务器和存储介质 | |
WO2017032152A1 (zh) | 将数据写入存储设备的方法及存储设备 | |
WO2023030178A1 (zh) | 一种基于用户态协议栈的通信方法及相应装置 | |
CN115080479B (zh) | 传输方法、服务器、设备、裸金属实例及基板管理控制器 | |
CN116185553A (zh) | 数据迁移方法、装置及电子设备 | |
CN107453845B (zh) | 应答确认方法及设备 | |
CN115827506A (zh) | 数据写入方法、数据读取方法、装置、处理核和处理器 | |
CN113821309A (zh) | 一种微内核虚拟机间的通信方法、装置、设备及存储介质 | |
CN118069555A (zh) | 数据传输方法、装置、电子设备及存储介质 | |
US20230342087A1 (en) | Data Access Method and Related Device | |
CN115617537A (zh) | 一种数据传输方法及装置、存储介质 | |
KR100653178B1 (ko) | 전송제어프로토콜 오프로드 엔진 기반의 전송제어프로토콜전송정보 생성 및 관리 장치 및 그 방법 | |
CN111475202A (zh) | 基于异构多处理系统的核间通信方法及系统 | |
CN116436869A (zh) | 通用的rdma流级优先级调度方法、装置、设备及介质 | |
CN115033405A (zh) | 进程间数据传输方法、进程、电子设备及存储介质 | |
CN116701015A (zh) | 应用间通信方法、装置 | |
CN111339000A (zh) | Amp系统内存文件传输方法及装置 |
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 |