CN113760560A - 一种进程间通信方法以及进程间通信装置 - Google Patents

一种进程间通信方法以及进程间通信装置 Download PDF

Info

Publication number
CN113760560A
CN113760560A CN202010505324.6A CN202010505324A CN113760560A CN 113760560 A CN113760560 A CN 113760560A CN 202010505324 A CN202010505324 A CN 202010505324A CN 113760560 A CN113760560 A CN 113760560A
Authority
CN
China
Prior art keywords
memory block
memory
information
identification information
service data
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
Application number
CN202010505324.6A
Other languages
English (en)
Inventor
刘雄成
颉瑞昌
康文军
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Huawei Technologies Co Ltd
Original Assignee
Huawei Technologies Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Priority to CN202010505324.6A priority Critical patent/CN113760560A/zh
Priority to PCT/CN2021/087695 priority patent/WO2021244155A1/zh
Publication of CN113760560A publication Critical patent/CN113760560A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/544Buffers; Shared memory; Pipes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/546Message passing systems or structures, e.g. queues

Abstract

本申请实施例公开了一种进程间通信方法以及进程间通信装置,该进程间通信方法由进程间通信装置分别运行第一进程和第二进程实现。在该进程间通信方法中,第一进程在第一内存池中的第一内存块中写入内存块管理信息和第一业务数据。并且,该第一进程还将用于指示该第一内存块的地址的标识信息发送至第二进程,以使得该第二进程根据该标识信息和该内存块管理信息获取该第一内存块中的该第一业务数据。由于,该第二进程可以在没有第三方程序介入的情况下读取该第一内存块中的第一业务数据,以实现该第一进程与第二进程之间的通信。因此,可以提高第一进程与第二进程之间的通信效率。

Description

一种进程间通信方法以及进程间通信装置
技术领域
本申请实施例涉及计算机领域,尤其涉及一种进程间通信方法以及进程间通信装置。
背景技术
进程间通信(interprocess communication,IPC)是一个进程与另一个进程之间共享消息的一种通信方式,主要用于计算机系统中的不同进程之间的消息传递。其中,进程是计算机资源分配的最小单位,每个进程都拥有自己的虚拟地址空间,并与其他进程的虚拟地址空间相互隔离,也就是说,一个进程只能访问自己的虚拟地址空间,不能访问其他进程的虚拟地址空间。为了使不同的进程之间能够互相访问并协调工作,操作系统提供了多种IPC机制。
目前,该IPC机制主要包括管道(pipe)、消息队列(message quene)、套接字(socket)以及共享内存(shared memory)。其中,由于共享内存具有通信效率高、可靠性高以及容量可配置等特性,因此,共享内存是众多进程间通信机制中的一种常用且有效的方式。但是,当采用基于共享内存的进程间通信机制时,如果进程频繁向内核申请共享内存,将产生大量内存碎片而降低共享内存的利用率。对此,现有技术中常将共享内存机制和内存池(memory pool)机制结合,以减少内存碎片的产生,提高共享内存的利用率。
在将共享内存机制和内存池机制结合的方案中,处理器除了运行两个进程之外,还需要运行一个管理程序。该管理程序用于为前述两个进程分配共享内存作为内存池。当其中一个进程A需要发送业务数据给进程B时,该管理程序将该业务数据写入该内存池中的一个内存块中。当进程B需要获取该业务数据时,该管理程序获取该内存块中的业务数据并发送至该进程B。于是,可以实现进程A和进程B之间的通信。
在这样的方案中,进程A和进程B之间的通信需要第三方程序进行维护。因此,不利于提高进程A和进程B之间的通信效率。
发明内容
本申请实施例提供了一种进程间通信方法以及进程间通信装置,用于提高进程间的通信效率。
第一方面,本申请实施例提供了一种进程间通信方法,该进程间通信方法由进程间通信装置分别运行第一进程和第二进程实现。其中,当第一进程需要向其他进程(例如,第二进程)传输业务数据时,该第一进程可以从内存池中选择一个内存块写入业务数据。以第一内存池中的第一内存块为例。该第一进程在第一内存池中的第一内存块中写入内存块管理信息和第一业务数据。其中,该内存块管理信息为维护该第一内存块的信息,该第一业务数据为该第一进程准备传输给第二进程的业务数据。此外,该第一进程还将用于指示该第一内存块的地址的标识信息发送至第二进程,以使得该第二进程根据该标识信息和该内存块管理信息获取该第一内存块中的该第一业务数据。
本申请实施例中,由于,第一进程将维护第一内存块的内存块管理信息写入第一内存块中,并将用于确定第一内存块地址的标识信息发送至第二进程。于是,该第二进程基于标识信息在该第一内存池中找到该第一内存块,基于该内存块管理信息确定读取该第一业务数据的时机。于是,该第二进程可以在没有第三方程序介入的情况下读取该第一内存块中的第一业务数据,以实现该第一进程与第二进程之间的通信。因此,可以提高第一进程与第二进程之间的通信效率。
基于前述实施方式,本申请实施例的一种可选的实施方式中,前述标识信息可以进一步包括第一标识信息和第二标识信息。其中,该第一标识信息用于指示该第一内存池的首地址,该第二标识信息用于指示该第一内存块在该第一内存池中的地址。
示例性的,前述第一标识信息和第二标识信息可以组成一个二元组,该二元组可以通过管道或消息队列等方式发送至第二进程。
本实施方式中,提供了一种第一进程向第二进程指示第一内存块的地址的具体方式。由于,该第一标识信息是第一进程和第二进程之间约定的用于指示第一内存池的标识,因此,该第二进程根据该第一标识信息可以确定该第一内存池的首地址。可选的,该第一内存池的首地址为该第一内存池映射于该第二进程的地址空间的虚拟地址。又由于,该第二标识信息用于指示第一内存块在第一内存池中的地址,也可以理解为,该第二标识信息用于指示的是一个相对地址。因此,该第二进程可以基于前述第一标识信息和第二标识信息从该第一内存池中查找到该第一内存块。
基于前述实施方式,本申请实施例的一种可选的实施方式中,前述第一内存块包括两个区域,其中,第一区域用于记录前述内存块管理信息,第二区域用于记录业务数据(例如,前述第一业务数据)。可选的,前述第一区域也被称作第一内存块的头部,前述第二区域也被称作第一内存块的主体。当然,在实际应用中,还可以采用其他称谓表述,第一内存块中用于记录内存块管理信息的区域和第一内存块中用于记录业务数据的区域,具体此处不做限定。
示例性的,该第一区域仅占据该第一内存块的若干字节,也可以理解为,该内存块管理信息仅占据该第一内存块的若干字节。
基于前述实施方式,本申请实施例的一种可选的实施方式中,该内存块管理信息包括第一指示信息,该第一指示信息用于指示该第一内存块的第二区域(即存储第一业务数据的区域)是否允许第一进程或第二进程访问。具体地,该第一值用于指示该第一进程禁止访问该第一内存块的第二区域且该第二进程允许访问该第二区域。在本实施方式中,该第一进程在第一内存块中写入该内存块管理信息和该第一业务数据之后,该第一进程将标识信息发送至第二进程之前,该第一进程还将该第一指示信息设置为第一值。
本实施方式中,提出前述内存块管理信息中包含第一指示信息,该第一指示信息用于指示该第一内存块的第二区域(即存储第一业务数据的区域)是否允许第一进程或第二进程访问。该第一进程可以将该第一指示信息设置为第一值,此时,该第二进程可以推断该第一进程已将第一业务数据写入该第一内存块,于是该第二进程可以访问前述第一内存块中的第二区域。
基于前述实施方式,本申请实施例的一种可选的实施方式中,该第一进程将标识信息发送至第二进程之后,该第一进程将检测前述第一指示信息。若该第一指示信息一直未发送生变化,则该第一进程将在预设时间段之后再次检测前述第一指示信息。当该第一进程检测到该第一指示信息为第二值时,该第一进程从该第一内存块的第二区域获取第二业务数据,第二值用于指示该第一进程允许访问该第二区域且第二进程禁止访问该第二区域。
本实施方式中,当该第一进程检测到前述第一指示信息为第二值时,说明该第二进程已将该第二业务数据写入该第一内存块。于是,该第一进程将访问前述第一内存块的第二区域,并从该第一内存块中的第二区域中读取该第二业务数据。由于,在此过程中,第二进程直接在该第一内存块中写入的第二业务数据,没有重新在第一内存池中选取其他的内存块传输业务数据,因此,可以节省第二进程选取内存块以及将内存块映射至地址空间等流程,进而可以节省第一进程与第二进程间通信的效率。
基于前述实施方式,本申请实施例的一种可选的实施方式中,该内存块管理信息还包括状态信息,该状态信息用于指示该第一内存块处于空闲状态或使用状态。当前述第一进程在第一内存块中写入内存块管理信息和第一业务数据时,该第一进程将该状态信息由该空闲状态调整为该使用状态,并且,将该第一内存块从空闲链表移动至使用链表。
本实施方式中,当该第一进程确定需要使用该第一内存块进行通信时,该第一进程在向第一内存块写入内存块管理信息时,该第一进程可以将该状态信息调整为使用状态,并将该第一内存块从空闲链表移动至使用链表,以防止其他进程采用前述第一内存块。在这样的实施方式中,其他进程可以根据前述状态信息确定是否可以使用前述第一内存块,无需第三方程序向其他进程反馈该第一内存块的使用状态。因此,可以提高进程间通信的效率。
基于前述实施方式,本申请实施例的一种可选的实施方式中,该第一进程从该第一内存块的第二区域获取第二业务数据之后,该第一进程将该第一内存块的状态信息由该使用状态调整为该空闲状态,并且,将该第一内存块从使用链表移动至空闲链表。
本实施方式中,提出当该第一进程不再使用该第一内存块时,该第一进程可以通过调整状态信息和调整第一内存块所在的链表的方式,释放该第一内存块。
基于前述实施方式,本申请实施例的一种可选的实施方式中,该第一进程在第一内存块中写入内存块管理信息和第一业务数据之前,该方法还包括:该第一进程向内核申请第一共享内存块。该第一进程在该第一共享内存块的头部写入内存池管理信息。其中,该内存池管理信息用于将该第一共享内存块划分为多个初始内存块,该多个初始内存块构成该第一内存池。
本实施方式中,提出当第一进程没有可以使用的内存池时,该第一进程可以向内核申请第一共享内存块,然后通过向该第一共享内存块的头部写入内存池管理信息的方式,将前述第一共享内存块分化为由多个初始内存块组成的第一内存池。
基于前述实施方式,本申请实施例的一种可选的实施方式中,该第一内存块的大小小于或等于该初始内存块的大小。在这种实施方式中,该第一进程是直接从前述第一内存池中选取的一块初始内存块作为第一内存块,也就是说,该第一进程直接向前述第一内存池中的某一块初始内存块中写入第一业务数据。
基于前述实施方式,本申请实施例的一种可选的实施方式中,该第一内存池中每个初始内存块的大小不完全相同,该初始内存块包括第一初始内存块和第二初始内存块,该第一初始内存块的大小小于该第二初始内存块的大小。该第一内存块由一个该第二初始内存块拆分所得;或者,该第一内存块由至少两个该第一初始内存块组合所得。
本实施方式中,提出前述第一内存块可以由多个初始内存块组合所得,也可以由一个初始内存块拆分所得。这样,有利于前述第一进程根据待写入的第一业务数据灵活选取内存块,提高前述第一内存池中内存块的利用率。
基于前述实施方式,本申请实施例的一种可选的实施方式中,该内存块管理信息还包括第二指示信息,该第二指示信息用于指示第一内存块与其他内存块的连接关系。具体地,该第二指示信息可以包括与第一内存块相邻的内存块的地址。当该第一内存块位于链表的两端时,该第二指示信息包括一个相邻内存块的地址;当该一内存块位于链表的中部时,该第二指示信息包括两个相邻内存块的地址。
第二方面,本申请实施例提供了一种进程间通信方法,该进程间通信方法由进程间通信装置分别运行第一进程和第二进程实现。在该方法中,第二进程接收第一进程发送的标识信息。其中,该标识信息用于指示第一内存块的地址,该第一内存块位于第一内存池中。该第一内存块中包含该第一进程写入的第一业务数据和内存块管理信息,该内存块管理信息为维护该第一内存块的信息。此外,该第二进程根据该标识信息和该内存块管理信息从该第一内存块中读取该第一业务数据。
本申请实施例中,由于,第一进程将维护第一内存块的内存块管理信息写入第一内存块中,并将用于确定第一内存块地址的标识信息发送至第二进程。于是,该第二进程基于标识信息在该第一内存池中找到该第一内存块,基于该内存块管理信息确定读取该第一业务数据的时机。于是,该第二进程可以在没有第三方程序介入的情况下读取该第一内存块中的第一业务数据,以实现该第一进程与第二进程之间的通信。因此,可以提高第一进程与第二进程之间的通信效率。
基于前述实施方式,本申请实施例的一种可选的实施方式中,前述标识信息可以进一步包括第一标识信息和第二标识信息。其中,该第一标识信息用于指示该第一内存池的首地址,该第二标识信息用于指示该第一内存块在该第一内存池中的地址。
示例性的,前述第一标识信息和第二标识信息可以组成一个二元组,该二元组可以通过管道或消息队列等方式发送至第二进程。
本实施方式中,提供了一种第一进程向第二进程指示第一内存块的地址的具体方式。由于,该第一标识信息是第一进程和第二进程之间约定的用于指示第一内存池的标识,因此,该第二进程根据该第一标识信息可以确定该第一内存池的首地址。示例性的,该第一内存池的首地址为该第一内存池映射于该第二进程的地址空间的虚拟地址。又由于,该第二标识信息用于指示第一内存块在第一内存池中的地址,也可以理解为,该第二标识信息用于指示的是一个相对地址。因此,该第二进程可以基于前述第一标识信息和第二标识信息从该第一内存池中查找到该第一内存块。
基于前述实施方式,本申请实施例的一种可选的实施方式中,前述第一内存块包括两个区域,其中,第一区域用于记录前述内存块管理信息,第二区域用于记录业务数据(例如,前述第一业务数据)。可选的,前述第一区域也被称作第一内存块的头部,前述第二区域也被称作第一内存块的主体。当然,在实际应用中,还可以采用其他称谓表述,第一内存块中用于记录内存块管理信息的区域和第一内存块中用于记录业务数据的区域,具体此处不做限定。
示例性的,该第一区域仅占据该第一内存块的若干字节,也可以理解为,该内存块管理信息仅占据该第一内存块的若干字节。
基于前述实施方式,本申请实施例的一种可选的实施方式中,该内存块管理信息包括第一指示信息,该第一指示信息用于指示该第一内存块的第二区域(即存储第一业务数据的区域)是否允许第一进程或第二进程访问。具体地,该第一值用于指示该第一进程禁止访问该第一内存块的第二区域且该第二进程允许访问该第二区域。该第二进程根据该标识信息和该内存块管理信息从该第一内存块的第二区域读取该第一业务数据,包括:该第二进程根据该第一标识信息和该第二标识信息在该第一内存池中查找该第一内存块。当该第二进程检测到该第一指示信息为该第一值时,该第二进程从该第一内存块中读取该第一业务数据,该第一值用于指示该第一进程禁止访问该第一内存块的第二区域且该第二进程允许访问该第二区域。
本实施方式中,提出了第二进程利用标识信息和内存块管理信息从第一内存块中读取第一业务数据的具体实现方式。在该第二进程从前述第一内存池中查找到该第一内存块之后,该第二进程还需要检测前述第一指示信息的取值。当该第二进程检测到该第一指示信息为第一值时,该第二进程才能读取该第一内存块中的第一业务数据。
基于前述实施方式,本申请实施例的一种可选的实施方式中,该第二进程根据该标识信息和该内存块管理信息从该第一内存块的第二区域中读取该第一业务数据之后,该方法还包括:该第二进程在该第一内存块的第二区域中写入第二业务数据,并将该第一指示信息调整为第二值,该第二值用于指示该第一进程允许访问该第二区域且该第二进程禁止访问该第二区域。
本实施方式中,提出第二进程无需重新从前述第一内存池中选取内存块,而是可以直接采用该第一内存块向该第一进程发送或回复业务数据。此时,该第二进程直接在该第一内存块中写入第二业务数据,并将该第一指示信息调整为第二值。于是,当该第一进程检测到该第一指示信息由第一值调整为第二值时,该第一进程可以从前述第一内存块中读取第二业务数据。因此,可以节省第二进程选取内存块以及将内存块映射至地址空间等流程,进而可以节省第一进程与第二进程间通信的效率。
基于前述实施方式,本申请实施例的一种可选的实施方式中,该内存块管理信息还包括状态信息,该状态信息用于指示该第一内存块处于空闲状态或使用状态。
基于前述实施方式,本申请实施例的一种可选的实施方式中,该第二进程根据该标识信息和内存块管理信息从该第一内存块中读取该第一业务数据之后,该方法还包括:该第二进程将该第一内存块的状态信息由该使用状态调整为该空闲状态,并且,将该第一内存块从使用链表移动至空闲链表。
本实施方式中,提出当该第二进程不再使用该第一内存块时,该第二进程可以通过调整状态信息和调整第一内存块所在的链表的方式,释放该第一内存块。
基于前述实施方式,本申请实施例的一种可选的实施方式中,该内存块管理信息还包括第二指示信息,该第二指示信息用于指示第一内存块与其他内存块的连接关系。具体地,该第二指示信息可以包括与第一内存块相邻的内存块的地址。当该第一内存块位于链表的两端时,该第二指示信息包括一个相邻内存块的地址;当该一内存块位于链表的中部时,该第二指示信息包括两个相邻内存块的地址。
第三方面,本申请实施例提供了一种进程间通信装置,该进程间通信装置位于处理器中,该进程间通信装置通过调用存储器中程序代码运行第一进程,该进程间通信装置包括如下功能模块:写入模块,用于在第一内存块中写入内存块管理信息和第一业务数据,该第一内存块位于第一内存池中,该内存块管理信息为维护该第一内存块的信息。发送模块,用于将标识信息发送至第二进程,以使得该第二进程根据该标识信息和该内存块管理信息获取该第一内存块中的该第一业务数据,该标识信息用于指示该第一内存块的地址。
本申请实施例中,由于,第一进程将维护第一内存块的内存块管理信息写入第一内存块中,并将用于确定第一内存块地址的标识信息发送至第二进程。于是,该第二进程基于标识信息在该第一内存池中找到该第一内存块,基于该内存块管理信息确定读取该第一业务数据的时机。于是,该第二进程可以在没有第三方程序介入的情况下读取该第一内存块中的第一业务数据,以实现该第一进程与第二进程之间的通信。因此,可以提高第一进程与第二进程之间的通信效率。
基于前述实施方式,本申请实施例的一种可选的实施方式中,该标识信息包括第一标识信息和第二标识信息,该第一标识信息用于指示该第一内存池的首地址,该第二标识信息用于指示该第一内存块在该第一内存池中的地址。
基于前述实施方式,本申请实施例的一种可选的实施方式中,该第一内存块包括第一区域和第二区域;该第一区域用于记录该内存块管理信息,该第一区域允许该第一进程或该第二进程随时访问;该第二区域用于记录该第一业务数据,该第二区域不允许该第一进程和该第二进程随时访问。
基于前述实施方式,本申请实施例的一种可选的实施方式中,该内存块管理信息包括第一指示信息。该进程间通信装置还包括:
获取模块,用于当检测到该第一指示信息为第二值时从该第一内存块的第二区域获取第二业务数据,该第二值用于指示该第一进程允许访问该第二区域且该第二进程禁止访问该第二区域。
基于前述实施方式,本申请实施例的一种可选的实施方式中,该进程间通信装置还包括:指示信息调整模块,用于将该第一指示信息设置为第一值,该第一值用于指示该第一进程禁止访问该第一内存块的第二区域且该第二进程允许访问该第二区域。
基于前述实施方式,本申请实施例的一种可选的实施方式中,该内存块管理信息还包括状态信息,该状态信息用于指示该第一内存块处于空闲状态或使用状态。状态信息调整模块,用于将该状态信息由该空闲状态调整为该使用状态,并且,将该第一内存块从空闲链表移动至使用链表。
基于前述实施方式,本申请实施例的一种可选的实施方式中,该状态信息调整模块,还用于将该第一内存块的状态信息由该使用状态调整为该空闲状态,并且,将该第一内存块从使用链表移动至空闲链表。
基于前述实施方式,本申请实施例的一种可选的实施方式中,该进程间通信装置还包括:资源申请模块,用于向内核申请第一共享内存块。该写入模块,还用于在该第一共享内存块的头部写入内存池管理信息,该内存池管理信息用于将该第一共享内存块划分为多个初始内存块,该多个初始内存块构成该第一内存池。
需要说明的是,本申请实施例还有多种具体其他实施方式,具体可参见第一方面的具体实施方式和其有益效果,在此不再赘述。
第四方面,本申请实施例提供了一种进程间通信装置,该进程间通信装置位于处理器中,该进程间通信装置通过调用存储器中程序代码运行第二进程,该进程间通信装置包括如下功能模块:
接收模块,用于接收第一进程发送的标识信息,该标识信息用于指示第一内存块的地址,该第一内存块位于第一内存池中,该第一内存块中包含该第一进程写入的第一业务数据和内存块管理信息,该内存块管理信息为维护该第一内存块的信息。读取模块,用于根据该标识信息和该内存块管理信息从该第一内存块中读取该第一业务数据。
本申请实施例中,由于,第一进程将维护第一内存块的内存块管理信息写入第一内存块中,并将用于确定第一内存块地址的标识信息发送至第二进程。于是,该第二进程基于标识信息在该第一内存池中找到该第一内存块,基于该内存块管理信息确定读取该第一业务数据的时机。于是,该第二进程可以在没有第三方程序介入的情况下读取该第一内存块中的第一业务数据,以实现该第一进程与第二进程之间的通信。因此,可以提高第一进程与第二进程之间的通信效率。
基于前述实施方式,本申请实施例的一种可选的实施方式中,该标识信息包括第一标识信息和第二标识信息,该第一标识信息用于指示该第一内存池的首地址,该第二标识信息用于指示该第一内存块在该第一内存池中的地址。
基于前述实施方式,本申请实施例的一种可选的实施方式中,该第一内存块包括第一区域和第二区域;该第一区域用于记录该内存块管理信息,该第一区域允许该第一进程或该第二进程随时访问;该第二区域用于记录该第一业务数据,该第二区域不允许该第一进程和该第二进程随时访问。
基于前述实施方式,本申请实施例的一种可选的实施方式中,该内存块管理信息包括第一指示信息。该进程间通信装置还包括:写入模块,用于在该第一内存块的第二区域中写入第二业务数据,并将该第一指示信息调整为第二值,该第二值用于指示该第一进程允许访问该第二区域且该第二进程禁止访问该第二区域。
基于前述实施方式,本申请实施例的一种可选的实施方式中,该读取模块包括:查找单元,用于根据该第一标识信息和该第二标识信息在该第一内存池中查找该第一内存块。读取单元,用于当检测到该第一指示信息为该第一值时从该第一内存块的第二区域读取该第一业务数据,该第一值用于指示该第一进程禁止访问该第一内存块的第二区域且该第二进程允许访问该第二区域。
基于前述实施方式,本申请实施例的一种可选的实施方式中,该内存块管理信息还包括状态信息,该状态信息用于指示该第一内存块处于空闲状态或使用状态。
基于前述实施方式,本申请实施例的一种可选的实施方式中,该进程间通信装置还包括:状态信息调整模块,用于将该第一内存块的状态信息由该使用状态调整为该空闲状态,并且,将该第一内存块从使用链表移动至空闲链表。
需要说明的是,本申请实施例还有多种具体其他实施方式,具体可参见第二方面的具体实施方式和其有益效果,在此不再赘述。
第五方面,本申请实施例提供了一种设备,该可以是普通计算机或大型服务器,也可以其他带有处理器的设备。该设备中包括运行第一进程的进程间通信装置和运行第二进程的进程间通信装置。其中,运行第一进程的进程间通信装置用于实现如前述第三方面中任意一种实施方式所介绍的功能;运行第二进程的进程间通信装置用于实现如前述第四方面中任意一种实施方式所介绍的功能。
示例性的,运行第一进程的进程间通信装置和运行第二进程的进程间通信装置均位于前述设备的处理器中。该处理器可以是通用中央处理器或微处理器;该处理器可以是单核处理器,也可以是多核处理器。此外,该处理器可以指一个或多个装置、电路、和/或用于处理数据(例如计算机程序指令)的处理核。
示例性的,运行第一进程的进程间通信装置和运行第二进程的进程间通信装置与至少一个存储器和至少一个存储介质相连,该存储介质存储有第一进程对应的程序和第二进程对应的程序。更进一步地,运行第一进程的进程间通信装置和运行第二进程的进程间通信装置可以设置为与存储介质通信,以执行存储介质中的程序。
示例性的,该处理器还包括存储器管理单元,该MMU位于连接高速缓存以及存储器的总线之间,是一种负责处理CPU的内存访问请求的计算机硬件。该MMU用于实现物理地址到虚拟地址之间的转换。
第六方面,本申请实施例提供了一种处理系统,该处理系统包括如前述第三方面中任意一种实施方式所介绍的进程间通信装置,以及如前述第四方面中任意一种实施方式所介绍的进程间通信装置。
第七方面,本申请实施例提供了一种处理芯片,该处理芯片包括如第六方面所介绍的处理系统。
第八面,本申请实施例提供了一种计算机可读存储介质,其上存储有计算机程序或指令,其特征在于,该计算机程序或指令被执行时使得进程间通信装置执行第一方面以及第一方面中任意一种实施方式所介绍的方法,或者,执行第二方面以及第二方面中任意一种实施方式所介绍的方法。
从以上技术方案可以看出,本申请实施例具有以下优点:
本申请实施例中,由于,第一进程将维护第一内存块的内存块管理信息写入第一内存块中,并将用于确定第一内存块地址的标识信息发送至第二进程。于是,该第二进程基于标识信息在该第一内存池中找到该第一内存块,基于该内存块管理信息确定读取该第一业务数据的时机。于是,该第二进程可以在没有第三方程序介入的情况下读取该第一内存块中的第一业务数据,以实现该第一进程与第二进程之间的通信。因此,可以提高第一进程与第二进程之间的通信效率。
附图说明
为了更清楚地说明本申请实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例。
图1为基于共享内存机制的进程间通信的一个原理图;
图2为本申请实施例中进程间通信方法的一个流程图;
图3为本申请实施例中进程间通信方法的另一个流程图;
图4A为本申请实施例中基于共享内存机制的进程间通信的一个原理图;
图4B为本申请实施例中内存池的一个示意图;
图5为本申请实施例中进程间通信装置的一个实施例示意图;
图6为本申请实施例中进程间通信装置的另一个实施例示意图;
图7为本申请实施例中进程间通信装置适用的设备的一个结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。
本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”、“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的实施例能够以除了在这里图示或描述的内容以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
本申请实施例提供了一种进程间通信方法以及进程间通信装置,用于提高进程间的通信效率。
为便于理解本申请实施例提出的进程间通信方法,下面先对共享内存机制进行介绍:
如图1所示,为共享内存机制的一个原理图。共享内存机制,指内核为两个相互隔离的进程分配一块物理内存,将该物理内存分别映射到前述两个进程的地址空间中,以使得前述任意一个进程可以通过访问该进程自己的地址空间以读取到存储于前述物理内存中的数据。因此,可以使得两个进程通过一块内存进行通信,而这一块内存则被称作共享内存。以图1中的进程A和进程B之间的通信为例,共享内存002为物理内存001中的一部分,进程A的地址空间为101,进程B的地址空间为101’。若将共享内存002映射至进程A中的地址空间101,则共享内存002在地址空间101中的虚拟地址为102。此时,记录数据的内存块0031与进程A中的虚拟地址1031对应,记录地址的内存块0032与进程A中的虚拟地址1032对应。若将共享内存002映射至进程B中的地址空间101’,则共享内存002在地址空间101’中的虚拟地址为102’。此时,记录数据的内存块0031与进程B中的虚拟地址1031’对应,记录地址的内存块0032与进程B中的虚拟地址1032’对应。
应当理解的是,同一物理内存映射于不同的地址空间时,该内存在不同的地址空间中的虚拟地址一般不同。例如,记录数据的内存块0031在进程A的地址空间中的地址1031与该记录数据的内存块0031在进程B的地址空间中的地址1031’一般不同。因此,若进程B仅知道该记录数据的内存块0031在进程A的地址空间中的虚拟地址1031,则该进程B无法利用该虚拟地址1031在进程B的地址空间中查找到虚拟地址1031’中的数据。此外,若同一块共享内存同时被多个进程读取或同时被多个进程写入,则将导致数据读写错乱。因此,进程B要想收到来自进程A的数据,则该进程B需要获知记录数据的内存块在进程B的地址空间中的虚拟地址,还需要获知何时被允许读取前述内存块中的数据。
对此,目前的技术是在运行进程A和进程B的处理器中再运行一个管理程序,由该管理程序负责协调前述进程A和进程B之间的通信。具体地,该管理程序将前述进程A需要发送给进程B的数据写入在共享内存中的某一个内存块(例如图1中记录数据的内存块0031)中,再将该内存块映射于进程A的地址空间中的虚拟地址(即虚拟地址1031)写入另一个内存块(例如图1中记录地址的内存块0032)中。当进程B需要访问前述数据时,该管理程序将从记录地址的内存块0032中获取前述虚拟地址1031并转换为进程B的地址空间中的虚拟地址(即虚拟地址1031’),并且,该管理程序将在进程B被允许读取前述内存块(即记录数据的内存块0031)时将该进程B的地址空间中虚拟地址1031’发送至进程B,以使得进程B通过该虚拟地址1031’读取到前述数据。在这样的方案中,管理程序对前述两个进程进行管理,对前述两个进程之间的数据通信进行协调。若前述管理程序出现错误,则将影响进程A和进程B之间的通信。
为提高进程间通信的效率,本申请实施例提出在共享内存中写入管理信息,以使得前述两个进程通过查看管理信息获知内存的状态以及允许读取内存中的数据的时机,通过修改管理信息通知对方进程读取或写入数据。在此过程中,处理器仅需要运行前述进程A和进程B,而不需要运行第三方程序以对前述两个进程之间的通信进行协调。因此,有利于提高进程间的通信的效率。
下面以第一进程和第二进程之间的通信流程对本申请实施例提出的进程间通信方法进行介绍,具体如图2所示,该第一进程和第二进程将执行如下步骤:
201、第一进程在第一内存块中写入内存块管理信息和第一业务数据。
其中,该第一业务数据指该第一进程准备传输给第二进程的业务数据。
该内存块管理信息为维护该第一内存块的信息。可以理解为,该第一进程通过在该第一内存块中写入该内存块管理信息的方式,实现对该第一内存块的管理或维护。例如,确定第一内存块的状态,定义进程对该第一内存块的访问权限,定义第一内存块所在的链表,定义第一内存块与其他内存块的连接关系,以及定义其他可以对第一内存块实现管理维护功能的信息等。
示例性的,前述内存块管理信息包括:状态信息,用于指示第一内存块的状态;第一指示信息,用于指示第一进程或其他进程对该第一内存块的访问权限;第二指示信息,用于指示第一内存块与其他内存块的连接关系。除了前述多种信息,该内存块管理信息还可以包括其他用于对第一内存块实现管理维护的信息。具体地,后文步骤303将进行详细介绍,此处不再赘述。
基于前述示例,当前述第一内存块中的内存块管理信息被第一进程修改时,前述多种信息中的一种或多种将发生改变,以使得该第一内存块的状态、第一内存块对于其他进程的访问权限以及第一内存块与其他内存块的连接关系中的一项或多项发生改变,进而实现对该第一内存块的管理和维护,也有助于其他进程基于前述内存块管理信息做决策。
应当注意的是,除了前述第一进程可以对该内存块管理信息进行修改,其他将与该第一进程进行通信的进程(例如后续将介绍的第二进程)也可以对该内存块管理信息进行修改。
此外,前述第一内存块位于第一内存池中,该第一内存池可以由第一进程对内核分配的共享内存块进行初始化而获得,也可以由其他进程对内核分配的共享内存进行初始化而获得,具体此处不做限定。在本实施例以及后续实施例中,以该第一内存池由第一进程共享内存块进行初始化而获得为例进行介绍。
示例性的,当第一进程向内核申请了共享内存并初始化为第一内存池之后,该第一内存池中可以有多个不同大小的初始内存块,并且前述多个初始内存块可以供前述第一进程选择。该第一进程可以直接在前述多个初始内存块中的一个初始内存块中写入内存块管理信息和第一业务数据。此时,前述第一内存块为前述多个初始内存块中的一个内存块。此外,前述第一内存块也可以是前述一个初始内存块经拆分之后获得的内存块,也可以是前述多个初始内存块合并之后获得的内存块。具体地,以该第一进程待写入的第一业务数据的大小和内存块管理信息的大小的总和而定。也就是说,当前述总和等于一个初始内存块的大小时,前述第一内存块可以是前述多个初始内存块中的某一个初始内存块;当前述总和小于一个初始内存块的大小时,前述第一内存块可以是前述一个初始内存块经拆分之后获得的内存块;当前述总和大于一个初始内存块的大小时,前述第一内存块可以是前述多个初始内存块合并之后获得的内存块。
应当理解的是,虽然前述第一内存池中包含若干个不同大小的初始内存块,但是,同一种大小的初始内存块也可以有多个。此外,不同大小的初始内存块之间具有一定的规律。示例性的,其中一个初始内存块的大小是另一个初始内存块的整数倍。例如,第一内存池中包含N个8M的初始内存块,Q个16M的初始内存块,R个32M的初始内存块。
此外,前述第一内存块包括两个区域,其中,前述第一区域为第一内存块中用于记录内存块管理信息的区域,前述第二区域为第一内存块中用于记录业务数据的区域。也可以理解为,第一区域用于供该第一进程写入前述内存块管理信息,或者,用于供第二进程或其他进程修改前述内存块管理信;第二区域用于供该第一进程写入业务数据(例如,前述第一业务数据)。示例性的,前述第一区域也被称作第一内存块的头部,前述第二区域也被称作第一内存块的主体。当然,在实际应用中,还可以采用其他称谓表述,具体此处不做限定。其中,第一区域仅占据该第一内存块靠前的若干字节。由于,该内存块管理信息位于前述第一内存块的第一区域,该第一区域的大小远小于第一内存块的大小。因此,该内存块管理信息的大小也一般较小,甚至远小于第一业务数据的大小。
具体地,在该第一进程向该第一内存块中写入前述内存块管理信息和第一业务数据的过程中,该第一进程先在前述第一区域内写入内存块管理信息,再在前述第二区域写入第一业务数据。该第一区域被写入前述内存块管理信息之后,该第一区域允许第一进程或其他进程随时访问该第一区域。但是,该第二区域不允许除写入内存块管理信息之外的进程随时访问。也就是说,若该第一内存块中的内存块管理信息是由第一进程写入的,则该第二区域不允许除了该第一进程之外的进程随时访问该第二区域。但是,若前述第一进程修改了前第一区域中的内存块管理信息,则其他进程可能被允许访问该第二区域。例如,若第一进程将内存块管理信息中关于访问权限的信息(例如,前文介绍的用于指示进程对该第一内存块的访问权限的信息;又例,如后文将介绍的第一指示信息)进行修改,且修改后的信息可以指示允许其他进程访问该第二区域,则其他进程将可以访问该第二区域。因此,第二进程在读取第一内存块中第一业务数据之前,需要先读取内存块管理信息以确定第一内存块的状态以及何时能够读取该第一内存块中的第一数据。
202、该第一进程将标识信息发送至第二进程。
其中,该标识信息用于指示该第一内存块的地址。当该第一进程将该标识信息发送至第二进程时,该第二进程可以收到该标识信息,并根据该标识信息确定该第一内存块的地址。也就是说,该第二进程可以根据该标识信息从前述第一内存池中查找到该第一内存块。
示例性的,前述第一内存块的地址指第二进程能够识别的地址,也可以理解为,该第一内存块的地址能使该第二进程通过该标识信息直接或间接地查找到该第一内存块。例如,该第一内存块的地址为该第一内存块映射于第二进程的地址空间中的虚拟地址。又例如,该第一内存块的地址为该第一内存块的物理地址,该第二进程可以根据该物理地址与该第二进程的地址空间的映射关系确定该第一内存块在该第二进程的地址空间中的虚拟地址。
示例性的,该第一进程可以通过管道(pipe)或消息队列(message quene)等方式将前述标识信息发送至第二进程。具体此处不做限定。
示例性的,该标识信息包括第一标识信息和第二标识信息。
其中,该第一标识信息与前述第一内存池关联。由于,一个进程可以向内核申请多个内存池,因此,与该第一进程关联的内存池可能有多个,而前述第一内存池是前述多个内存池中的一个。因此,该第一进程需要向第二进程发送指示该第一内存池的第一标识信息,以使得该第二进程可以获知前述第一进程采用哪个内存池与该第二进程进行通信。
此外,该第二标识信息与前述第一内存块关联。由于,一个内存池中一般包括多个内存块,因此,前述第一内存池中也包含多个内存块。因此,该第一进程需要向第二进程发送指示该第一内存块的第二标识信息,以使得该第二进程可以获知前述第一进程是通过前述第一内存池中的第一内存块与该第二进程进行通信的。
进一步地,前述第一标识信息用于指示该第一内存池的首地址。可选的,该第一标识信息,可以是第一进程与第二进程之间约定的用于指示第一内存池的字符(例如,key),也可以是第一内存池的ID,也可以直接是第一内存池的首地址,还可以是其他能够指示第一内存池的首地址的信息。该第二进程在收到前述第一标识信息之后,该第二进程可以根据前述第一标识信息确定该第一内存池的首地址。
此外,该第二标识信息用于指示该第一内存块在该第一内存池中的地址,也可以理解为,该第一内存块在该第一内存池中的相对地址。可选的,该第二标识信息可以由第一内存池内偏移(lable)(简称,偏移量)表示。该第二进程在收到前述第二标识信息之后,该第二进程可以将该第二标识信息结合前述第一标识信息确定该第一内存块的地址。也就是说,当该第二进程确定该第一内存池的首地址和该第一内存块在该第一内存池中的地址之后,该第二进程可以确定该第一内存块的地址。
示例性的,当前述标识信息包括第一标识信息和第二标识信息时,该第一进程可以将前述第一标识信息和第二标识信息封装为二元组,采用管道或消息队列等方式发送至第二进程。当然,该第一进程也可以采用其他形式封装前述第一标识信息和第二标识信息,具体此处不做限定。
203、第二进程根据该标识信息和该内存块管理信息获取该第一内存块中的该第一业务数据。
由于,该内存块管理信息是直接写在第一内存块的第一区域(即第一内存块的头部),因此,该第二进程通过该标识信息查找到该第一内存块之后,该第二进程将先读取该第一区域中的内存块管理信息,并根据该内存块管理信息确定该第二进程对该第一内存块的第二区域的访问权限,以确定该第二进程读取第二区域中的第一业务数据的时机。当前述第一内存块允许该第二进程访问该第一内存块时,该第二进程可以从前述第二区域中读取该第一业务数据。因此,基于前述标识信息和内存块管理信息,该第二进程可以从前述第一内存块中获取到该第一进程写入该第一内存块的第一业务数据。
本实施例中,由于,第一进程将维护第一内存块的内存块管理信息写入第一内存块中,并将用于确定第一内存块地址的标识信息发送至第二进程。于是,该第二进程基于标识信息在该第一内存池中找到该第一内存块,基于该内存块管理信息确定读取该第一业务数据的时机。于是,该第二进程可以在没有第三方程序介入的情况下读取该第一内存块中的第一业务数据,以实现该第一进程与第二进程之间的通信。因此,可以提高第一进程与第二进程之间的通信效率。
基于前述实施例,对前述进程间通信方法进行进一步介绍,具体如图3所示,依然以第一进程和第二进程之间的通信流程为例,该第一进程和该第二进程将执行如下步骤:
301、第一进程向内核申请第一共享内存块。
本实施例中,若第一进程需要与其他进程进行通信(例如,本实施例将介绍的第二进程),并且,该第一进程没有可以使用的内存池,则该第一进程将执行本步骤301。
应当理解的是,第一进程没有可以使用的内存池,也可以理解为,已存在的内存池不满足第一进程发送第一数据的需求,具体此处不做限定。
此时,该第一进程可以向内核申请一块共享内存块,为便于介绍,在本实施例以及后续实施例中称这一块共享内存块为第一共享内存块。该第一共享内存块的大小可以由第一进程在向内核申请共享内存时向内核指示,也可以由内核根据系统的运行情况为该第一进程分配,具体此处不做限定。
当该内核为该第一进程分配前述第一共享内存块之后,该第一共享内存块将被映射至第一进程的地址空间和第二进程的地址空间中。
302、该第一进程在该第一共享内存块的头部写入内存池管理信息,得到第一内存池。
本实施例中,当为前述第一进程分配了第一共享内存块之后,该第一进程需要对该第一共享内存块进行初始化,也就是说,将该第一共享内存块初始化为满足该第一进程的通信需求的第一内存池。具体地,该第一进程可以在前述第一共享内存块的头部写入内存池管理信息,该内存池管理信息用于将该第一共享内存块划分为多个初始内存块,该多个初始内存块构成前述第一内存池。为便于理解,以图4A为例介绍前述第一内存池的结构。其中,该第一内存池的头部为内存池管理信息,该第一内存池的头部的大小可以按需调整。示例性的,该内存池管理信息包括该第一内存池中初始内存块的大小以及初始内存块的数量等。该第一内存池包括多个初始内存块(例如,内存块1、内存块2、内存块3、内存块4以及内存块5等),其中,每个初始内存块的头部均保留了若干字节用于写入内存块管理信息。示例性的,初始内存块的第一区域用于写入内存块管理信息,初始内存块的第二区域用于写入业务数据。具体地,可以参阅前述步骤201和步骤202中关于第一内存块的第一区域和第一内存块的第二区域的相关介绍,此处不再赘述。
为便于理解,以图4B为例,物理内存011与第一进程的地址空间111对应,物理内存011与第二进程的地址空间111’对应。当前述第一进程申请到第一共享内存块之后,该第一共享内存块将同时被映射至第一进程的地址空间111和第二进程的地址空间111’中。当该第一进程将前述第一共享内存块初始化为第一内存池012之后,第一内存池012在地址空间111中的虚拟地址为112,第一内存池012在地址空间111’中的虚拟地址为112’。其中,该第一内存池012的头部为内存池管理信息。该第一内存池012中包含多个内存块(例如,内存块0131和内存块0132)。每个内存块均预留有填写内存块管理信息的第一区域,即每个内存块的头部。以内存块0131为例,该内存块0131在进程A的地址空间111中的虚拟地址113,该内存块0131在进程B的地址空间111’中的虚拟地址113’。该内存块0131的第一区域用于填写内存块管理信息,该内存块0131的第二区域用于填写业务数据。
应当理解的是,步骤301和步骤302为可选的步骤。当该第一进程没有可使用的内存池时,该第一进程将执行步骤301和步骤302。当存在多个内存池可供该第一进程选择时,该第一进程可以从多个内存池中选择一个内存池作为第一内存池,并执行步骤303,而不用再执行前述步骤301和步骤302。
303、该第一进程在该第一内存池中的第一内存块中写入内存块管理信息和第一业务数据。
其中,该第一内存块可以直接是前述第一内存池中的某一个初始内存块,也可以由前述多个初始内存块合并所得,还可以由前述某一个初始内存块拆分所得。具体前文步骤201中已作详细介绍,此处不再赘述。
该内存块管理信息为维护该第一内存块的信息。该第一业务数据为该第一进程准备发送给第二进程的数据。由于,该第一进程在初始化第一内存池时,便在每个初始内存块中预留了第一区域用于填写内存块管理信息,因此,该第一进程将该内存块管理信息写入该第一内存块的第一区域,将该第一业务数据写入该第一内存块的第二区域。
具体地,该内存块管理信息包括第一指示信息。该第一指示信息用于指示第一进程或其他进程对该第一内存块的第二区域的访问权限,也可以理解为,该第一内存块当前是否允许第一进程或其他进程在该第一内存块的第二区域执行读取或写入操作。
具体地,该第一指示信息可以有如下多种实现方式:
在一种可选的实现方式中,该第一指示信息包括两个值。其中一个值用于指示第一进程禁止访问该第一内存块的第二区域,第二进程允许访问该第二区域;另一个值用于指示第一进程允许访问第一内存块的第二区域,第二进程禁止访问该第二区域。
示例性的,该第一指示信息包括第一值和第二值。其中,第一值用于指示第一进程禁止访问该第一内存块的第二区域,第二进程允许访问该第二区域;第二值用于指示第一进程允许访问第一内存块的第二区域,第二进程禁止访问该第二区域。
应当理解的是,前述第一值和第二值并非对该第一指示信息的取值进行限定,仅表示前述第一指示信息可以是两个不同的取值。例如,当前述第一指示信息由二进制字符进行表示时,该第一值可以为0时,该第二值可以为1。当然,也可以设置第一值为1、第二值为0;或者,采用两个不同的字符表示前述第一值和第二值。具体此处不做限定。
在另一种可选的实现方式中,该第一指示信息包括至少N+1个值,用于实现N个进程通过前述第一内存块进行通信。其中,N为大于1的整数,每个值均对应一个进程。当前述第一指示信息指示N个值中的某一个值时,与该值对应的进程可以访问该第一内存块中的第二区域,而其他进程则不允许访问该第一内存块的第二区域。当前述第一指示信息指示的值与前述N个进程均不对应时,该第一内存块禁止任何进程访问该第二区域。为便于理解,以N等于2为例进行介绍。当N等于2时,可以实现两个进程间的通信。此时,该第一指示信息可以包括三个值,分别为0,1和2。其中,0表示进程A和进程B均不允许访问该第二区域;1表示进程A允许访问第二区域,进程B不允许访问第二区域;2表示进程A不允许访问第二区域,进程B允许访问第二区域。又例如,当N等于3时,可以实现三个进程间的通信。此时,该第一指示信息可以包括四个值,分别为0,1,2和3。其中,0表示进程A、进程B和进程C均不允许访问该第二区域;1表示进程A允许访问第二区域,进程B和进程C不允许访问第二区域;2表示进程B允许访问第二区域,进程A和进程C不允许访问第二区域;3表示进程C允许访问第二区域,进程A和进程B不允许访问第二区域。依次类推,具体此处不再赘述。
在这种实施方式中,若前述某一个进程将第一指示信息指示的值设置为与前述N个进程均不对应时,该进程可以触发释放内存块的流程。依然以前述N等于3为例进行介绍,若进程B从前述进程A的第二区域中读取了业务数据,并且,该进程B没有需要向进程A回复数据的需求。此时,该进程B可以将前述第一指示信息的取值设置为0,其中,0表示进程A、进程B和进程C均不允许访问该第二区域。然后,该进程B可以进一步指示释放内存块的流程。例如,后文将介绍的,该进程B可以将该内存块的状态信息由该使用状态调整为该空闲状态,并且,将该内存块从使用链表移动至空闲链表。
应当理解的是,在实际应用中,除了上述两种实现方式之外,还可以有其他实现方式,此处不再一一列举。
此外,该内存块管理信息还包括状态信息,该状态信息用于指示该第一内存块处于空闲状态或使用状态。其中,使用状态指该第一内存块的第二区域中已被写入业务数据,或者,某一个进程正在向该第一内存块的第一区域写入内存块管理信息。空闲状态指该第一内存块的第二区域是没有被写入业务数据的,并且,也没有进程向该第一内存块的第一区域写入内存块管理信息。若前述第一内存池是由第一进程申请的第一共享内存块初始化而得到的,则该第一进程可以确定该第一内存块的状态为空闲状态,该第一进程可以直接向该第一内存块中写入内存块管理信息和第一业务数据;若第一内存池不是第一进程进行初始化而获得的,而是从众多内存池中选取的,则第一进程需要先根据状态信息确定初始内存块的状态,当该初始内存块为空闲状态时,该初始内存块才有可能作为第一内存块。
当该第一进程在第一内存块中写入内存块管理信息和第一业务数据时,该第一进程还将该状态信息由该空闲状态调整为该使用状态,并且,将该第一内存块从空闲链表移动至使用链表。于是,当其他进程读取到该状态信息时,可以获知该第一内存块为使用状态。
此外,该内存块管理信息还包括第二指示信息。该第二指示信息用于指示第一内存块与其他内存块的连接关系。具体地,该第二指示信息可以包括与第一内存块相邻的内存块的地址。当该第一内存块位于链表的两端时,该第二指示信息包括一个相邻内存块的地址;当该一内存块位于链表的中部时,该第二指示信息包括两个相邻内存块的地址。
应当理解的是,该内存块管理信息除了包括前述第一指示信息、状态信息和第二指示信息之外,还可以包括其他关于该第一内存块的信息。具体此处不做限定。
304、该第一进程将该第一指示信息设置为第一值。
其中,该第一值用于指示该第一进程禁止访问该第一内存块的第二区域,第二进程允许访问该第二区域。由于,第一进程向该第一内存块中写入内存块管理信息和第一业务数据之后,该第一进程才会将前述第一指示信息调整为第一值。因此,该第二进程可以确定前述第一进程已将该第一业务数据写入该第一内存块。
应当理解的是,当第一进程执行前述步骤303时,该第一进程在向该第一内存块中写入内存块管理信息时,该第一进程仅定义了第一指示信息,但并未对该第一指示信息赋值。当该第一进程将第一业务数据完全写入该第一内存块之后,该第一进程才将前述第一指示信息设置为第一值。
305、该第一进程将该第一标识信息和该第二标识信息发送至第二进程。
其中,该第一标识信息与第一内存池关联,该第一标识信息用于指示该第一内存池的首地址。该第二标识信息与第一内存块关联,该第二标识信息用于指示该第一内存块在该第一内存池中的地址。示例性的,该第一进程可以通过管道或消息队列等方式将前述第一标识信息和第二标识信息发送至第二进程。
具体地,可以参阅前述步骤202中的相关介绍,此处不再赘述。
本实施例中,当第一进程执行步骤305之后,该第一进程将执行步骤311,该第二进程将执行步骤306。
306、该第二进程根据该第一标识信息和该第二标识信息在该第一内存池中查找该第一内存块。
本实施例中,该第二进程可以根据该第一标识信息确定第一内存池的首地址,并且,根据该第二标识信息确定该第一内存块在该第一内存池中的地址。因此,该第二进程可以通过前述第一标识信息和第二标识信息从前述第一内存池中查找到该第一内存块。也就是说,该第二进程可以在该第二进程的地址空间中查找到前述第一内存块。
具体地,可以参阅前述步骤202中的相关介绍,此处不再赘述。
307、该第二进程检测内存块管理信息中的第一指示信息。
当该第二进程从前第一内存池中查找到该第一内存块时,该第二进程还不能直接读取该第一内存块的第二区域中的数据。该第二进程还需要确定当前是否被允许访问该第一内存块。于是,该第二进程将从该第一内存块的第一区域中读取第一内存块管理信息,并检测该内存块管理信息中的第一指示信息,以确定当前该第一内存块的第二区域是否被允许访问。
当该第二进程检测到该第一指示信息为第一值时,该第二进程执行步骤308。
当该第二进程检测到该第一指示信息为并非为第一值时,该第二进程将在预设时间段之后再次检测该第一指示信息。示例性的,该第二进程可以启动计时器,当计时器达到预设值之后,该第二进程再次检测该第一指示信息。
308、该第二进程从该第一内存块的第二区域中读取该第一业务数据。
当该第二进程检测到该第一指示信息为该第一值时,该第二进程从该第一内存块的第二区域中读取该第一业务数据。
本实施例中,由于,第一进程将维护第一内存块的内存块管理信息写入第一内存块的第一区域中,并将第一标识信息和第二标识信息发送至第二进程。于是,该第二进程基于第一标识信息和第二标识信息在该第一内存池中找到该第一内存块,基于该内存块管理信息中的第一指示信息确定可以从该第一内存块的第二区域中读取第一业务数据的时机。在此过程中,不需要除第一进程和第二进程之外的程序介入,该第一进程与第二进程之间可以直接进行通信。因此,可以提高第一进程与第二进程之间的通信效率。
基于前述实施例,在第一内存块被释放之前,若第二进程需要向第一进程回复数据,或者,该第二进程恰好有数据需要传输给该第一进程。则该第二进程将执行步骤309至步骤310,该第一进程将执行步骤311至步骤312。
309、该第二进程在该第一内存块的第二区域中写入第二业务数据。
本实施例中,由于,该第二进程已从前述第一内存块中读取了第一业务数据,因此,该第一内存块对于该第二进程为允许访问的状态。因此,该第二进程可以将需要传输给第一进程的第二业务数据写入该第一内存块的第二区域中。
310、该第二进程将该第一指示信息调整为第二值。
其中,该第二值用于指示第一进程允许访问第一内存块的第二区域,第二进程禁止访问该第二区域。由于,第二进程向该第一内存块的第二区域中写入第二业务数据之后,该第二进程才会将前述第一指示信息调整为第二值。因此,该第一进程可以确定前述第二进程已将该第二业务数据写入该第一内存块的第二区域。
应当理解的是,由于第一进程在执行步骤303时已经定义了第一指示信息。因此,本步骤310中,该第二进程仅需要调整该第一指示信息赋值,即将前述第一指示信息设置为第二值。
311、该第一进程检测内存块管理信息中的第一指示信息。
应当理解的是,当第一进程执行步骤305之后,该第一进程将执行步骤311。也就是说,当第一进程将向第二进程发送该第一标识信息和该第二标识信息之后,该第一进程将检测该第一指示信息,以确定该第二进程是否会向该第一进程传输数据。
当该第一进程检测到该第一指示信息为第二值时,该第一进程执行步骤312。
当该第一进程检测到该第一指示信息为第一值时,该第一进程将在预设时间段之后再次检测该第一指示信息。示例性的,该第一进程可以启动计时器,当计时器达到预设值之后,该第一进程再次检测该第一指示信息。
312、该第一进程从该第一内存块的第二区域中获取第二业务数据。
本实施例中,当该第一进程检测到该第一指示信息为第二值时,则说明该第二进程对该内存块管理信息中的第一指示信息进行了修改,该第一进程可以推断该第二进程有第二业务数据需要传输给第一进程,并且,该第二进程已将该第二业务数据写入该第一内存块的第二区域中。此时,该第一进程可以从该第一内存块的第二区域中获取该第二业务数据。
应当理解的是,由于该第一进程已知第一内存块的地址,并且能够检测该第一指示信息,因此,该第一进程可以从该前述第一内存块的第二区域中读取第二业务数据,而不需要采用第一标识信息查找第一内存池,也不需要采用第二标识信息从第一内存池中查找第一内存块。在这样的实施方式中,节省了第一进程查找第一内存块的地址的过程,有利于提高第一进程与第二进程之间的通信效率。
本实施例中,当该第一进程执行了步骤312之后,若该第一进程还需要向第二进程传输数据时,则该第一进程将再次向该第一内存块的第二区域中写入需要发送给第二进程的数据(例如,第三业务数据),具体与前述步骤303至步骤305类似,此处不再赘述。应当注意的是,在执行与前述步骤303类似的步骤时,即该第一进程再次利用该第一内存块传输数据时,该第一进程仅需要修改一部分内存块管理信息并写入前述第三业务数据即可,无需重新向该第一内存块的头部写入所有的内存块管理信息。例如,仅需要修改第一指示信息的取值,而无需重新设置一个新的指示信息。类似的,该第二进程也将再次从前述第一内存块中读取内存块指示信息和业务数据,具体与前述步骤306至308,此处不再赘述。
本实施方式中,第二进程在读取第一业务数据的第一内存块中写入了第二业务数据,此时,第一进程检测该第一指示信息以确定该第二进程是否向该第一进程回复了业务数据。在此过程中,该第二进程无需重新从前述第一内存池中找内存块以写入第二业务数据,而是直接利用该第一内存块与该第一进程通信,节省了第二进程查找其他内存块来与第一进程进行通信的流程。因此,可以提高第一进程与第二进程之间的通信效率。
基于前述实施例,当第一进程与第二进程之间不需要再传输业务数据时,可以由该第一进程或第二进程中的任意一方发起释放前述第一内存块。
在一种可选的实施方式中,前述第一进程可以释放该第一内存块。例如,当该第一进程执行了步骤312之后,该第一进程可以将该第一内存块的状态信息由该使用状态调整为该空闲状态,并且,将该第一内存块从使用链表移动至空闲链表。于是,该第一进程可以完成释放该第一内存块。
在另一种可选的实施方式中,前述第二进程可以释放该第一内存块。例如,当该第二进程执行了步骤308之后,该第二进程将该第一内存块的状态信息由该使用状态调整为该空闲状态,并且,将该第一内存块从使用链表移动至空闲链表。
在这样的实施方式中,由于,在释放该第一内存块之前,前述第一进程和第二进程均可以查看到该第一内存块头部的状态信息。因此,当其中一个进程修改状态信息时,另一个进程可以获知对方进行无需再传输业务数据。相比于现有技术中需要两个进程均向处理器发出释放指示的方案,前述实施方式更加简洁高效。
下面将对前述实施例中的进程间通信装置的结构进行介绍:
如图5所示,本实施例提供的一种进程间通信装置50的结构示意图。该进程间通信装置50运行第一进程以实现前述图2和图3对应的方法实施例中的第一进程的功能。
该进程间通信装置50包括:
写入模块501,用于在第一内存块中写入内存块管理信息和第一业务数据,该第一内存块位于第一内存池中,该内存块管理信息为维护该第一内存块的信息。
发送模块502,用于将标识信息发送至第二进程,以使得该第二进程根据该标识信息和该内存块管理信息获取该第一内存块中的该第一业务数据,该标识信息用于指示该第一内存块的地址。
其中,该标识信息包括第一标识信息和第二标识信息,该第一标识信息用于指示该第一内存池的首地址,该第二标识信息用于指示该第一内存块在该第一内存池中的地址。该第一内存块包括第一区域和第二区域。该第一区域用于记录该内存块管理信息,该第一区域允许该第一进程或该第二进程随时访问。该第二区域用于记录该第一业务数据,该第二区域不允许该第一进程和该第二进程随时访问。
本实施例中,由于,运行第一进程的进程间通信装置50将维护第一内存块的内存块管理信息写入第一内存块中,并将用于确定第一内存块地址的标识信息发送至第二进程(即后文图6对应的实施例中的运行第二进程的进程间通信装置60)。于是,该进程间通信装置60基于标识信息在该第一内存池中找到该第一内存块,基于该内存块管理信息确定读取该第一业务数据的时机。于是,该进程间通信装置60可以在没有第三方程序介入的情况下读取该第一内存块中的第一业务数据,以实现该第一进程与第二进程之间的通信。因此,可以提高第一进程与第二进程之间的通信效率。
在一种可选的实施方式中,该进程间通信装置50还包括:
该写入模块501,还用于在该第一共享内存块的第一区域写入内存池管理信息,得到第一内存池。其中,该内存池管理信息用于将该第一共享内存块划分为多个初始内存块,该多个初始内存块构成该第一内存池。
在另一种可选的实施方式中,该内存块管理信息包括第一指示信息。
该进程间通信装置50还包括获取模块503。该获取模块503,用于当检测到该第一指示信息为第二值时从该第一内存块的第二区域获取第二业务数据,该第二值用于指示第一进程允许访问该第二区域且第二进程禁止访问该第二区域。
在另一种可选的实施方式中,该进程间通信装置50还包括指示信息调整模块504。该指示信息调整模块504,用于将该第一指示信息设置为第一值,第一值用于指示该第一进程禁止访问该第一内存块的第二区域且该第二进程允许访问该第二区域。
在另一种可选的实施方式中,该内存块管理信息还包括状态信息,该状态信息用于指示该第一内存块处于空闲状态或使用状态。该进程间通信装置50还包括状态信息调整模块505。该状态信息调整模块505,用于将该状态信息由该空闲状态调整为该使用状态,并且,将该第一内存块从空闲链表移动至使用链表。该状态信息调整模块505,还用于将该第一内存块的状态信息由该使用状态调整为该空闲状态,并且,将该第一内存块从使用链表移动至空闲链表。
如图6所示,本实施例提供的一种进程间通信装置60的结构示意图。该进程间通信装置60运行第二进程以实现前述图2和图3对应的方法实施例中的第二进程的功能。
该进程间通信装置60包括:
接收模块601,用于接收第一进程发送的标识信息,该标识信息用于指示第一内存块的地址,该第一内存块位于第一内存池中,该第一内存块中包含该第一进程写入的第一业务数据和内存块管理信息,该内存块管理信息为维护该第一内存块的信息。
读取模块602,用于根据该标识信息和该内存块管理信息从该第一内存块中读取该第一业务数据。
其中,该标识信息包括第一标识信息和第二标识信息,该第一标识信息用于指示该第一内存池的首地址,该第二标识信息用于指示该第一内存块在该第一内存池中的地址。该第一内存块包括第一区域和第二区域。该第一区域用于记录该内存块管理信息,该第一区域允许该第一进程或该第二进程随时访问。该第二区域用于记录该第一业务数据,该第二区域不允许该第一进程和该第二进程随时访问。
本实施例中,由于,运行第一进程的进程间通信装置50将维护第一内存块的内存块管理信息写入第一内存块中,并将用于确定第一内存块地址的标识信息发送至运行第二进程的进程间通信装置60。于是,该进程间通信装置60基于标识信息在该第一内存池中找到该第一内存块,基于该内存块管理信息确定读取该第一业务数据的时机。于是,该进程间通信装置60可以在没有第三方程序介入的情况下读取该第一内存块中的第一业务数据,以实现该第一进程与第二进程之间的通信。因此,可以提高第一进程与第二进程之间的通信效率。
在一种可选的实施方式中,该内存块管理信息包括第一指示信息。
该进程间通信装置60还包括:
写入模块603,用于在该第一内存块的第二区域中写入第二业务数据;
指示信息调整模块604,并将该第一指示信息调整为第二值,该第二值用于指示第一进程允许访问该第二区域且第二进程禁止访问该第二区域。
在一另种可选的实施方式中,该读取模块602包括:查找单元,用于根据该第一标识信息和该第二标识信息在该第一内存池中查找该第一内存块。读取单元,用于当检测到该第一指示信息为该第一值时从该第一内存块的第二区域读取该第一业务数据,第一值用于指示该第一进程禁止访问该第一内存块的第二区域且该第二进程允许访问该第二区域。
在一另种可选的实施方式中,该内存块管理信息还包括状态信息,该状态信息用于指示该第一内存块处于空闲状态或使用状态。该进程间通信装置60还包括:
状态信息调整模块605,用于将该第一内存块的状态信息由该使用状态调整为该空闲状态,并且,将该第一内存块从使用链表移动至空闲链表。
如图7所示,本实施例提供的一种设备70的结构示意图。该设备70可以是普通计算机或大型服务器,也可以其他带有处理器的设备。
该设备70中包括运行第一进程的进程间通信装置7011和运行第二进程的进程间通信装置7012。其中,进程间通信装置7011的具体结构可以参阅前述图5,该进程间通信装置7012的具体结构可以参阅前述图6。
可选的,进程间通信装置7011和进程间通信装置7012均位于处理器701中。应当理解的是,一个处理器701中可以运行多个进程间通信装置。在本申请实施例中,该处理器701至少包括两个进程间通信装置,这两个进程间通信装置分别运行前述第一进程和第二进程前述。其中,该进程间通信装置7011和进程间通信装置7012之间可以采用管道或消息队列等方式相互传输较少的数据。
其中,该处理器701可以是通用中央处理器(central processing unit,CPU)或微处理器(micro processor)。该处理器701可以是单核处理器(single-CPU),也可以是多核处理器(multi-CPU)。此外,该处理器701可以指一个或多个装置、电路、和/或用于处理数据(例如计算机程序指令)的处理核。可选的,该处理器701还可以包括一个用于为进程间通信装置7011和进程间通信装置7012分配共享内存的内核(图未示)。进程间通信装置7011和进程间通信装置7012位于该内核之外。可选的,为进程间通信装置7011和进程间通信装置7012分配共享内存的功能也可以由该处理器701实现,具体此处不做限定。
此外,该前述进程间通信装置7011和进程间通信装置7012与至少一个存储器702和至少一个存储介质703相连,该存储介质703存储有第一进程对应的程序和第二进程对应的程序。更进一步地,进程间通信装置7011和进程间通信装置7012可以设置为与存储介质703通信,进程间通信装置7011执行存储介质703中的与第一进程对应的程序以运行第一进程,进程间通信装置7012执行存储介质703中的与第二进程对应的程序以运行第二进程。
可选的,该处理器701还包括存储器管理单元(memory management unit,MMU),该存储器管理单元有时也被称作为分页内存管理单元(paged memory management unit,PMMU)。该MMU位于连接高速缓存(图未示)以及存储器702的总线之间,是一种负责处理CPU的内存访问请求的计算机硬件。该MMU用于实现物理地址到虚拟地址之间的转换。例如,将第一内存池的物理地址映射到第一进程的地址空间,以使得该第一进程通过该地址空间中的虚拟地址可以查找到该第一内存池,进而可以使该第一进程通过偏移量可以查找到第一内存块。此外,该MMU具有少量存储空间存放从虚拟地址到物理地址的匹配表,该匹配表也被称作页表或转换旁置缓冲区(translation lookaside buffer,TLB),该匹配表记录有物理地址与虚拟地址之间的映射关系,也就是说,该匹配表的每一项对应于一个虚拟地址到物理地址的映射。可选的,该匹配表的表项除完成虚拟地址到物理地址的映射功能之外,还定义了访问权限和缓冲特性等,具体此处不做限定。
为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围。

Claims (32)

1.一种进程间通信方法,其特征在于,包括:
第一进程在第一内存块中写入内存块管理信息和第一业务数据,所述第一内存块位于第一内存池中,所述内存块管理信息为维护所述第一内存块的信息;
所述第一进程将标识信息发送至第二进程,以使得所述第二进程根据所述标识信息和所述内存块管理信息获取所述第一内存块中的所述第一业务数据,所述标识信息用于指示所述第一内存块的地址。
2.根据权利要求1所述的方法,其特征在于,所述标识信息包括第一标识信息和第二标识信息,所述第一标识信息用于指示所述第一内存池的首地址,所述第二标识信息用于指示所述第一内存块在所述第一内存池中的地址。
3.根据权利要求1或2所述的方法,其特征在于,所述第一内存块包括第一区域和第二区域;
所述第一区域用于记录所述内存块管理信息,所述第一区域允许所述第一进程或所述第二进程随时访问;
所述第二区域用于记录所述第一业务数据,所述第二区域不允许所述第一进程和所述第二进程随时访问。
4.根据权利要求3所述的方法,其特征在于,所述内存块管理信息包括第一指示信息;
所述第一进程将标识信息发送至第二进程之后,所述方法还包括:
当所述第一进程检测到所述第一指示信息为第二值时,所述第一进程从所述第一内存块的第二区域获取第二业务数据,所述第二值用于指示所述第一进程允许访问所述第二区域且所述第二进程禁止访问所述第二区域。
5.根据权利要求3所述的方法,其特征在于,所述第一进程在第一内存块中写入所述内存块管理信息和所述第一业务数据之后,所述第一进程将标识信息发送至第二进程之前,所述方法还包括:
所述第一进程将所述第一指示信息设置为第一值,所述第一值用于指示所述第一进程禁止访问所述第一内存块的第二区域且所述第二进程允许访问所述第二区域。
6.根据权利要求1至5中任意一项所述的方法,其特征在于,所述内存块管理信息还包括状态信息,所述状态信息用于指示所述第一内存块处于空闲状态或使用状态;
所述第一进程在第一内存块中写入内存块管理信息和第一业务数据时,所述方法还包括:
所述第一进程将所述状态信息由所述空闲状态调整为所述使用状态,并且,将所述第一内存块从空闲链表移动至使用链表。
7.根据权利要求6所述的方法,其特征在于,所述第一进程从所述第一内存块的第二区域获取第二业务数据之后,所述方法还包括:
所述第一进程将所述第一内存块的状态信息由所述使用状态调整为所述空闲状态,并且,将所述第一内存块从使用链表移动至空闲链表。
8.根据权利要求1至7中任意一项所述的方法,其特征在于,所述第一进程在第一内存块中写入内存块管理信息和第一业务数据之前,所述方法还包括:
所述第一进程向内核申请第一共享内存块;
所述第一进程在所述第一共享内存块的头部写入内存池管理信息,所述内存池管理信息用于将所述第一共享内存块划分为多个初始内存块,所述多个初始内存块构成所述第一内存池。
9.一种进程间通信方法,其特征在于,包括:
第二进程接收第一进程发送的标识信息,所述标识信息用于指示第一内存块的地址,所述第一内存块位于第一内存池中,所述第一内存块中包含所述第一进程写入的第一业务数据和内存块管理信息,所述内存块管理信息为维护所述第一内存块的信息;
所述第二进程根据所述标识信息和所述内存块管理信息从所述第一内存块中读取所述第一业务数据。
10.根据权利要求9所述的方法,其特征在于,所述标识信息包括第一标识信息和第二标识信息,所述第一标识信息用于指示所述第一内存池的首地址,所述第二标识信息用于指示所述第一内存块在所述第一内存池中的地址。
11.根据权利要求9或10所述的方法,其特征在于,所述第一内存块包括第一区域和第二区域;
所述第一区域用于记录所述内存块管理信息,所述第一区域允许所述第一进程或所述第二进程随时访问;
所述第二区域用于记录所述第一业务数据,所述第二区域不允许所述第一进程和所述第二进程随时访问。
12.根据权利要求11所述的方法,其特征在于,所述内存块管理信息包括第一指示信息;
所述第二进程根据所述标识信息和所述内存块管理信息从所述第一内存块中读取所述第一业务数据之后,所述方法还包括:
所述第二进程在所述第一内存块的第二区域写入第二业务数据,并将所述第一指示信息调整为第二值,所述第二值用于指示所述第一进程允许访问所述第二区域且所述第二进程禁止访问所述第二区域。
13.根据权利要求11所述的方法,其特征在于,所述第二进程根据所述标识信息和所述内存块管理信息从所述第一内存块中读取所述第一业务数据,包括:
所述第二进程根据所述第一标识信息和所述第二标识信息在所述第一内存池中查找所述第一内存块;
当所述第二进程检测到所述第一指示信息为所述第一值时,所述第二进程从所述第一内存块的第二区域中读取所述第一业务数据,所述第一值用于指示所述第一进程禁止访问所述第一内存块的第二区域且所述第二进程允许访问所述第二区域。
14.根据权利要求9至13中任意一项所述的方法,其特征在于,所述内存块管理信息还包括状态信息,所述状态信息用于指示所述第一内存块处于空闲状态或使用状态;
所述第二进程根据所述标识信息和内存块管理信息从所述第一内存块中读取所述第一业务数据之后,所述方法还包括:
所述第二进程将所述第一内存块的状态信息由所述使用状态调整为所述空闲状态,并且,将所述第一内存块从使用链表移动至空闲链表。
15.一种进程间通信装置,其特征在于,包括:
写入模块,用于在第一内存块中写入内存块管理信息和第一业务数据,所述第一内存块位于第一内存池中,所述内存块管理信息为维护所述第一内存块的信息;
发送模块,用于将标识信息发送至第二进程,以使得所述第二进程根据所述标识信息和所述内存块管理信息获取所述第一内存块中的所述第一业务数据,所述标识信息用于指示所述第一内存块的地址。
16.根据权利要求15所述的进程间通信装置,其特征在于,所述标识信息包括第一标识信息和第二标识信息,所述第一标识信息用于指示所述第一内存池的首地址,所述第二标识信息用于指示所述第一内存块在所述第一内存池中的地址。
17.根据权利要求15或16所述的进程间通信装置,其特征在于,所述第一内存块包括第一区域和第二区域;
所述第一区域用于记录所述内存块管理信息,所述第一区域允许所述第一进程或所述第二进程随时访问;
所述第二区域用于记录所述第一业务数据,所述第二区域不允许所述第一进程和所述第二进程随时访问。
18.根据权利要求17所述的进程间通信装置,其特征在于,所述内存块管理信息包括第一指示信息;
所述进程间通信装置还包括:
获取模块,用于当检测到所述第一指示信息为第二值时从所述第一内存块的第二区域获取第二业务数据,所述第二值用于指示所述第一进程允许访问所述第二区域且所述第二进程禁止访问所述第二区域。
19.根据权利要求17所述的进程间通信装置,其特征在于,所述进程间通信装置还包括:
指示信息调整模块,用于将所述第一指示信息设置为第一值,所述第一值用于指示所述第一进程禁止访问所述第一内存块的第二区域且所述第二进程允许访问所述第二区域。
20.根据权利要求15至19中任意一项所述的进程间通信装置,其特征在于,所述内存块管理信息还包括状态信息,所述状态信息用于指示所述第一内存块处于空闲状态或使用状态;
状态信息调整模块,用于将所述状态信息由所述空闲状态调整为所述使用状态,并且,将所述第一内存块从空闲链表移动至使用链表。
21.根据权利要求20所述的进程间通信装置,其特征在于,所述状态信息调整模块,还用于将所述第一内存块的状态信息由所述使用状态调整为所述空闲状态,并且,将所述第一内存块从使用链表移动至空闲链表。
22.根据权利要求15至21中任意一项所述的进程间通信装置,其特征在于,所述进程间通信装置还包括:
资源申请模块,用于向内核申请第一共享内存块;
所述写入模块,还用于在所述第一共享内存块的头部写入内存池管理信息,所述内存池管理信息用于将所述第一共享内存块划分为多个初始内存块,所述多个初始内存块构成所述第一内存池。
23.一种进程间通信装置,其特征在于,包括:
接收模块,用于接收第一进程发送的标识信息,所述标识信息用于指示第一内存块的地址,所述第一内存块位于第一内存池中,所述第一内存块中包含所述第一进程写入的第一业务数据和内存块管理信息,所述内存块管理信息为维护所述第一内存块的信息;
读取模块,用于根据所述标识信息和所述内存块管理信息从所述第一内存块中读取所述第一业务数据。
24.根据权利要求23所述的进程间通信装置,其特征在于,所述标识信息包括第一标识信息和第二标识信息,所述第一标识信息用于指示所述第一内存池的首地址,所述第二标识信息用于指示所述第一内存块在所述第一内存池中的地址。
25.根据权利要求23或24所述的进程间通信装置,其特征在于,所述第一内存块包括第一区域和第二区域;
所述第一区域用于记录所述内存块管理信息,所述第一区域允许所述第一进程或所述第二进程随时访问;
所述第二区域用于记录所述第一业务数据,所述第二区域不允许所述第一进程和所述第二进程随时访问。
26.根据权利要求25所述的进程间通信装置,其特征在于,所述内存块管理信息包括第一指示信息;
所述进程间通信装置还包括:
写入模块,用于在所述第一内存块的第二区域写入第二业务数据;
指示信息调整模块,用于将所述第一指示信息调整为第二值,所述第二值用于指示所述第一进程允许访问所述第二区域且所述第二进程禁止访问所述第二区域。
27.根据权利要求25所述的进程间通信装置,其特征在于,所述读取模块包括:
查找单元,用于根据所述第一标识信息和所述第二标识信息在所述第一内存池中查找所述第一内存块;
读取单元,用于当检测到所述第一指示信息为所述第一值时从所述第一内存块的第二区域读取所述第一业务数据,所述第一值用于指示所述第一进程禁止访问所述第一内存块的第二区域且所述第二进程允许访问所述第二区域。
28.根据权利要求23至27中任意一项所述的进程间通信装置,其特征在于,所述内存块管理信息还包括状态信息,所述状态信息用于指示所述第一内存块处于空闲状态或使用状态;
所述进程间通信装置还包括:
状态信息调整模块,用于将所述第一内存块的状态信息由所述使用状态调整为所述空闲状态,并且,将所述第一内存块从使用链表移动至空闲链表。
29.一种进程间通信装置,其特征在于,所述进程间通信装置位于处理器中,所述进程间通信装置调用存储器中的程序代码运行第一进程,以实现权利要求1至8中任意一项所述的方法。
30.一种进程间通信装置,其特征在于,所述进程间通信装置位于处理器中,所述进程间通信装置调用存储器中的程序代码运行第二进程,以实现权利要求9至14中任意一项所述的方法。
31.一种处理系统,其特征在于,所述处理系统包括如权利要求15至22中任意一项所述的进程间通信装置,以及如权利要求23至28中任意一项所述的进程间通信装置;
或者,
所述处理系统包括如权利要求27所述的进程间通信装置和如权利要求28所述的进程间通信装置。
32.一种计算机可读存储介质,其上存储有计算机程序或指令,其特征在于,所述计算机程序或指令被执行时使得进程间通信装置执行如权利要求1至8中任意一项所述的方法,或者权利要求9至14中任意一项所述的方法。
CN202010505324.6A 2020-06-05 2020-06-05 一种进程间通信方法以及进程间通信装置 Pending CN113760560A (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN202010505324.6A CN113760560A (zh) 2020-06-05 2020-06-05 一种进程间通信方法以及进程间通信装置
PCT/CN2021/087695 WO2021244155A1 (zh) 2020-06-05 2021-04-16 一种进程间通信方法以及进程间通信装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010505324.6A CN113760560A (zh) 2020-06-05 2020-06-05 一种进程间通信方法以及进程间通信装置

Publications (1)

Publication Number Publication Date
CN113760560A true CN113760560A (zh) 2021-12-07

Family

ID=78784975

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010505324.6A Pending CN113760560A (zh) 2020-06-05 2020-06-05 一种进程间通信方法以及进程间通信装置

Country Status (2)

Country Link
CN (1) CN113760560A (zh)
WO (1) WO2021244155A1 (zh)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115878351A (zh) * 2023-03-03 2023-03-31 苏州浪潮智能科技有限公司 消息的传输方法及装置、存储介质及电子装置
WO2023125209A1 (zh) * 2021-12-27 2023-07-06 北京罗克维尔斯科技有限公司 进程间通信方法及其装置
CN116737404A (zh) * 2022-09-28 2023-09-12 荣耀终端有限公司 用于应用接续的方法及终端设备
WO2024060228A1 (zh) * 2022-09-23 2024-03-28 华为技术有限公司 获取数据的方法、装置、系统及存储介质

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2023221003A1 (zh) * 2022-05-18 2023-11-23 北京小米移动软件有限公司 系统内存的回收方法、装置、电子设备及存储介质
CN115858184B (zh) * 2023-03-03 2023-05-02 浪潮电子信息产业股份有限公司 一种rdma内存管理方法、装置、设备及介质

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101448018A (zh) * 2008-12-26 2009-06-03 中兴通讯股份有限公司 进程间通信方法和装置
CN103838859B (zh) * 2014-03-19 2019-04-26 厦门雅迅网络股份有限公司 一种减少linux下多进程间数据拷贝的方法
CN107193673B (zh) * 2017-06-28 2020-05-26 锐捷网络股份有限公司 一种报文处理方法及设备
CN110399229A (zh) * 2018-04-25 2019-11-01 清华大学 进程间的通信方法、装置、系统、介质及终端
CN110618883B (zh) * 2019-09-26 2022-09-13 迈普通信技术股份有限公司 一种用于共享内存链表的方法、装置、设备及存储介质

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2023125209A1 (zh) * 2021-12-27 2023-07-06 北京罗克维尔斯科技有限公司 进程间通信方法及其装置
WO2024060228A1 (zh) * 2022-09-23 2024-03-28 华为技术有限公司 获取数据的方法、装置、系统及存储介质
CN116737404A (zh) * 2022-09-28 2023-09-12 荣耀终端有限公司 用于应用接续的方法及终端设备
CN115878351A (zh) * 2023-03-03 2023-03-31 苏州浪潮智能科技有限公司 消息的传输方法及装置、存储介质及电子装置

Also Published As

Publication number Publication date
WO2021244155A1 (zh) 2021-12-09

Similar Documents

Publication Publication Date Title
CN113760560A (zh) 一种进程间通信方法以及进程间通信装置
US9734085B2 (en) DMA transmission method and system thereof
US9395921B2 (en) Writing data using DMA by specifying a buffer address and a flash memory address
US9229751B2 (en) Apparatus and method for managing virtual memory
US20190243757A1 (en) Systems and methods for input/output computing resource control
JP4879981B2 (ja) メモリのマイクロタイリングによる投機的なリターン
US10613796B2 (en) System and method of writing to nonvolatile memory using write buffers
US9317312B2 (en) Computer and memory management method
WO2015142341A1 (en) Dynamic memory expansion by data compression
US20160275042A1 (en) Zero-copy data transmission system
WO2015180598A1 (zh) 对存储设备的访问信息处理方法和装置、系统
CN109977037B (zh) 一种dma数据传输方法及系统
CN113204407B (zh) 一种内存超配管理方法及装置
US20130054896A1 (en) System memory controller having a cache
CN112463307A (zh) 一种数据传输方法、装置、设备及可读存储介质
CN115964319A (zh) 远程直接内存访问的数据处理方法及相关产品
US20170018050A1 (en) Communication between integrated graphics processing units
US9772776B2 (en) Per-memory group swap device
CN109857553B (zh) 内存管理方法及装置
US20210191777A1 (en) Memory Allocation in a Hierarchical Memory System
CN115811509A (zh) 一种总线通信方法及相关设备
US20230281113A1 (en) Adaptive memory metadata allocation
CN113742115A (zh) 用于通过处理器处理页面错误的方法
CN111026680A (zh) 将第一标识符映射到第二标识符
EP4276638A1 (en) System and method for accessing remote resource

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