CN102455943A - 一种基于内存池来进行数据共享的方法和计算机设备 - Google Patents

一种基于内存池来进行数据共享的方法和计算机设备 Download PDF

Info

Publication number
CN102455943A
CN102455943A CN2010105123476A CN201010512347A CN102455943A CN 102455943 A CN102455943 A CN 102455943A CN 2010105123476 A CN2010105123476 A CN 2010105123476A CN 201010512347 A CN201010512347 A CN 201010512347A CN 102455943 A CN102455943 A CN 102455943A
Authority
CN
China
Prior art keywords
memory
memory block
information
original address
internal 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.)
Granted
Application number
CN2010105123476A
Other languages
English (en)
Other versions
CN102455943B (zh
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.)
Jiangsu Sushang Bank Co ltd
Original Assignee
Shanghai Synacast Media Technology 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 Shanghai Synacast Media Technology Co Ltd filed Critical Shanghai Synacast Media Technology Co Ltd
Priority to CN201010512347.6A priority Critical patent/CN102455943B/zh
Priority claimed from CN201010512347.6A external-priority patent/CN102455943B/zh
Publication of CN102455943A publication Critical patent/CN102455943A/zh
Application granted granted Critical
Publication of CN102455943B publication Critical patent/CN102455943B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明的目的是提供一种基于内存池来进行数据共享的方法和内存控制装置。其中,内存控制装置根据来自第二进程的对象访问请求,来获取所述第二进程需要访问的第一对象的标识信息,然后根据所确定的第一对象的标识信息来获取所述第一对象的位置信息,并将所述第一对象的位置信息提供给所述第二进程。与现有技术相比,本发明具有以下优点:本发明将共享内存与内存池相结合,达到既可以有效防止由于频繁申请内存而产生内存碎片、降低***性能的问题,又可以达到数据共享的效果。

Description

一种基于内存池来进行数据共享的方法和计算机设备
技术领域
本发明涉及数据共享的技术,尤其涉及基于内存池来进行数据共享的技术。
背景技术
现有的计算机设备中的进程间数据交换和共享的方式主要有共享内存、命名管道、匿名管道、发送消息等直接方法,也有通过socket口,配置文件和注册表等间接方法来实现进程间数据通讯任务。其中,共享内存是进程间通信的最有用方式,然而,在数据共享时,如果频繁申请共享内存,则会造成大量内存碎片的产生,空间利用率低。
为了减少内存碎片的产生,提高空间利用率,现有技术中多采用内存池(Memory Pool)技术。内存池是一种内存分配技术,其在真正使用内存之前,先申请分配一定数量的、大小相等(一般情况下)的内存块留作备用。当有新的内存需求时,就从内存池中分出一部分内存块,若内存块不够再继续申请新的内存可有效降低申请内存的次数、减少与***内核的交互、减少内存碎片、提升***性能等优点,然而,由于内存块在不同进程中的映射地址不同,因而,在内存池中无法让不同进程共享对象数据。
因此,如何提供一种在计算机设备中既能够利用内存池的优点,又能够使得不同进程可在内存池中进行对象数据共享的方案,已成为本领域技术人员需要解决的问题。
发明内容
本发明的目的是提供一种基于内存池来使得不同进程进行对象数据共享的方法和设备。
根据本发明的一个方面,提供一种在计算机设备中基于内存池来进行数据共享的方法,其中,该方法包括以下步骤:
a根据来自第二进程的对象访问请求,来获取所述第二进程需要访问的第一对象的标识信息;
b根据所确定的第一对象的标识信息来获取所述第一对象的位置信息;
c将所述第一对象的位置信息提供给所述第二进程。
根据本发明的另一个方面,还提供了一种基于内存池来进行数据共享的计算机设备,其中,该设备包括:
第一获取装置,用于根据来自第二进程的对象访问请求,来获取所述第二进程需要访问的第一对象的标识信息;
第二获取装置,用于根据所确定的第一对象的标识信息来获取所述第一对象的位置信息;
提供装置,用于将所述第一对象的位置信息提供给所述第二进程。
与现有技术相比,本发明具有以下优点:本发明将共享内存与内存池相结合,达到既可以有效防止由于频繁申请内存而产生内存碎片、降低***性能的问题,又可以达到数据共享的效果。
附图说明
通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本发明的其它特征、目的和优点将会变得更明显:
图1为本发明一个方面的基于内存池来进行数据共享的方法的流程图;
图2为本发明的一个优选实施例的基于内存池来进行数据共享的流程图;
图3为本发明的另一个优选实施例的基于内存池来进行数据共享的流程图;
图4为本发明一个方面的基于内存池来进行数据共享的设备的示意图;
图5为本发明的一个优选实施例的基于内存池来进行数据共享的设备的示意图;
图6为本发明的另一个优选实施例的基于内存池来进行数据共享的设备的示意图;
附图中相同或相似的附图标记代表相同或相似的部件。
具体实施方式
术语定义:
“计算机设备”:本上下文中,计算机设备为能够按照事先存储的程序,自动地进行数值计算和信息处理的电子设备,包括但不限于个人电脑、智能手机、服务器、小型机等,其通过操作***或内存控制芯片等来进行内存管理;
“进程”:本上下文中,进程是在计算机中正在运行的应用程序实体,其被分配给计算机设备的处理器并由处理器执行;
“对象”:本上下文中,对象是指在基于面向对象的程序语言所设计的应用程序中的对象。
下面结合附图对本发明作进一步详细描述。
图1示意出了本发明一个方面的在计算机设备基于内存池来进行数据共享的方法的流程图。其中,所述根据本发明的方法可通过计算机设备中的处理器执行操作***或内存控制程序来实现,所述操作***包括但不限于Windows、Linux、Unix、Netware或嵌入式***等,也可由内存控制芯片等硬件来实现
具体地,计算机设备首先创建和管理内存池,并根据来自使用所述内存池的进程的内存分配请求,在内存池中为所述进程分配一个或多个内存块,当所述进程需要创建对象时,计算机设备根据获得的所述进程创建所述对象的请求,在所述一个或多个内存块中为所述对象分配空间,以存储所述对象。计算机设备可根据上述操作在一个或多个内存池内为多个进程创建对象。并且,所述计算机设备还能够在内存池中将一个进程创建的对象提供给另一个进程共享。
以下以第二进程访问第一进程所创建的第一对象为例,说明所述计算机设备如何实现在内存池内进行对象共享。其中,所述第二进程包括但不限于以下类别:1)未创建对象的进程;2)创建了非共享对象的进程;3)创建了共享对象的进程。
在步骤S1中,计算机设备根据来自第二进程的对象访问请求,来获取所述第二进程需要访问的第一对象的标识信息。其中,所述第二进程的对象访问请求可基于OpenFileMapping函数、GetProcAddress函数、消息函数、中断、或控件等发送。计算机设备如果捕获到所述对象访问请求,则从该对象访问请求中提取所述第二进程需要访问的第一对象的标识信息。其中,所述标识信息包括但不限于:1)所述第一对象的名称;2)所述第一对象的ID;3)创建所述第一对象的第一进程的名称;4)所述第一对象的创建时间等。需要说明的是,由于一个对象可具有多种标识信息,而在所述对象访问请求中可能仅包含一种标识信息,因此,计算机设备在提取该一种标识信息后,还可结合所述内存池的相关信息,获取该对象的其他标识信息。
接着,在步骤S2中,计算机设备根据所确定的第一对象的标识信息来获取所述第一对象的位置信息。具体地,计算机设备获取所述第一对象的位置信息的方式包括但不限于:
1)根据所述第一对象的标识信息,直接获取第一进程创建所述第一对象时,内存池所保存的所述第一对象的位置信息;
其中,所述内存池所保存的所述第一对象的位置信息包括但不限于:
a)所述第一对象在创建所述第一对象的第一进程中的原始地址及所述第一对象在可能访问所述第一对象的其他进程中的映射地址;
例如,请参照如下表1,表1示出所存储的所述第一对象的位置信息及与所述第一对象的位置信息相关的信息,其中第一进程创建对象时,所述计算机设备即根据第一进程提供的第二进程可能访问所述第一对象的信息,保存了所述第一对象的标识信息以及所述第一对象在第二进程地址空间的映射地址信息,当计算机设备根据第二进程提供的信息判断得到第二进程需要访问的对象的ID为456时,所述计算机设备查找所记录的ID为456的对象的信息,得到所述第一对象在第二进程地址空间的映射地址为0x12345678。本领域技术人员应理解,上下文中所例举的具体的映射地址以及内存块大小等数值仅为说明目的所例举,不应视为对本发明的任何限制。
表1:第一对象的位置信息及位置信息相关的信息
Figure BSA00000310036400051
b)所述第一对象所在的内存块的ID及所述第一对象在该内存块中的位置;
例如,第一进程创建所述第一对象时,所述计算机设备即记录了所述第一对象的ID、为所述第一对象分配的内存块的ID及该第一对象在内存块中的位置,例如,在该内存块中的偏移量等。当计算机设备根据第二进程提供的信息得到第二进程需要访问的第一对象的ID时,所述计算机设备查找得到所述第一对象所在的内存块及第一对象在该内存块中的位置,以便向所述第二进程提供所述第一对象的映射地址信息。
2)如果第一进程创建所述第一对象时,内存池保存了所述第一进程与所述第一对象的对应关系及所述第一对象的标识信息,但没有保存所述第一对象在其他进程的映射地址信息或所述第一对象所在的内存块的信息,则计算机设备需要根据所确定的第一对象的标识信息,在内存池相关信息中进行查找,获取创建所述第一对象的第一进程的相关信息,进而获知所述第一对象在所述第一进程地址空间的地址以及其他进程地址空间的映射地址信息。
该等获取所述第一对象的位置信息的例子仅为用于更好地阐释本发明的方案,本领域技术人员应理解,本发明应不限于上述获取所述第一对象的位置信息的方式,任何可使用于本发明的获取所述第一对象的位置信息的方式均应在本发明的保护范围以内,并以引用方式包含于此。
最后,在步骤S3中,计算机设备将得到的所述第一对象的位置信息提供给所述第二进程。所述第二进程根据该位置信息,访问所述第一对象,与第一进程进行数据共享。第二进程根据计算机设备返回的所述第一对象在所述第二进程地址空间的映射地址,将数据从内存块复制到本地缓存中,再进行后续处理。
优选的,所述内存池的相关信息包括但不限于:
-所述内存池的版本号;
-用于存储所述内存池相关信息的内存块的分配状态,例如,所述内存块是位于所述内存池中,还是分配在内存区域中并被多个内存池共享,该内存块已被分配的空间比例和位置等;
-所述内存池的ID,例如:计算机设备按时间顺序创建的第一个内存池的ID为1,第二个内存池的ID为2等;
-使用内存池的进程的ID,例如:使用ID为1的第一个内存池的第一个进程的ID为101,使用第二个ID为2的内存池的第四个进程的ID为204等;
-使用内存池的进程所创建的内存块的相关信息,包括但不限于内存块的ID、内存块链表的头部和尾部等;例如,使用ID为1的第一个内存池的ID为101的第一个进程所创建的第一个内存块的ID为10101,使用ID为2的第二个内存池的ID为204的第四个进程所创建的第三个内存块的ID为20403;及内存块链表的前驱指针、后继指针、头指针等;
-被共享的对象的ID,例如:创建在ID为1的第一个内存池中由ID为102第二个进程所创建的ID为10203的第三个内存块上的第四个共享对象的ID为1020304;
-用于查找对象的引用关系库,根据被共享的对象之间存在的引用关系建立引用关系库,所述引用关系库包括但不限于树状、单向链表、循环链表等拓扑结构,例如:第二进程的创建的共享对象b需要引用第一进程创建的共享对象a与c,则引用关系的拓扑结构可为:
Figure BSA00000310036400071
该等描述内存池相关信息的例子仅为用于更好地阐释本发明的方案,本领域技术人员应理解,本发明内存池的相关信息应不限于上述的说明,任何与内存池相关的信息均应在本发明的保护范围以内,并以引用方式包含于此。
图2示出根据本发明的一个优选实施例的基于内存池来进行数据共享的流程图。
在本实施例中,计算机设备在进程创建对象时,即记录该对象的位置信息,以便后续使用。
具体地,在步骤S4中,计算机设备获取所述进程为待创建的对象请求创建位置的请求。其中,所述请求可基于诸如CreatFileMapping函数、消息函数、中断、或控件等发送。
接着,在步骤S5中,计算机设备在所述进程所请求的内存块中为所述待创建的对象分配所述创建位置。具体地,以第一进程创建第一对象为例,当计算机设备获取到第一进程需要创建对象的请求时,计算机设备获取待创建的对象的大小,分析所述第一进程在所述内存池创建的内存块的信息,所述信息包括但不限于所述内存块的个数、各内存块的大小、各内存块的剩余空间大小等。计算机设备对所述待创建的对象的大小以及第一进程创建的各内存块的剩余空间大小进行比较,选择合适的所述内存块来存储所述待创建的对象。计算机设备获知所述待创建的对象大小为4000字节,所述计算机设备分析该第一进程创建的各内存块的信息,得到所述第一进程一共创建了三个内存块,其中第一个内存块的剩余空间大小为1024字节,第二个内存块的剩余空间大小为8192字节,第三个内存块尚未存储任何对象,其大小为24576字节,则计算机设备对所述待创建的对象的大小以及第一进程创建的各内存块的剩余空间大小进行比较后,会在所述第二个内存块中分配一块大小为4096字节的空间来存储所述大小为4000字节的待创建的对象。
该等为所述待创建的对象分配所述创建位置的例子仅为用于更好地阐释本发明的方案,本领域技术人员应理解,本发明应不限于上述为所述待创建的对象分配所述创建位置的方式,任何与为所述待创建的对象分配所述创建位置的方式均应在本发明的保护范围以内,并以引用方式包含于此。
随后,在步骤S6中,计算机设备记录所述待创建对象的所述创建位置的信息。具体地,计算机设备根据所述待创建对象的存储位置,记录相关信息到内存池相关信息库中,所述相关信息包括但不限于:1)存储所述对象的内存块的ID;2)所述对象在所述内存块的地址信息;3)所述内存块的基地址;4)所述对象在其他进程中的映射地址等。
本实施例中,当收到一个进程的对象访问请求时,所述计算机设备查找记录的该对象的位置信息,提供给该进程。以第二进程请求访问所述第一对象为例。
在步骤S1中,计算机设备根据来自第二进程的对象访问请求,来获取所述第二进程需要访问的第一对象的标识信息;或者计算机设备根据来自第二进程的对象访问请求,并结合所述内存池的相关信息,来获取所述第二进程需要访问的第一对象的标识信息。所述步骤S1已在前面参照图1所述的实施例中予以详述,为简明起见,在此不做赘述,而以引用的方式包含。
随后,在步骤S2’中,计算机设备根据所确定的第一对象的标识信息来查找所述第一对象的所述创建位置,将所述创建位置作为所述第一对象的位置信息。具体地,计算机设备根据所确定的标识信息,在内存池相关信息库中直接搜索以获取所述第一对象的位置信息。其中,所述内存池所保存的所述第一对象的创建位置的信息包括但不限于:
1)所述第一对象在创建所述第一对象的第一进程中的原始地址及所述第一对象在可能访问所述第一对象的其他进程中的映射地址;
例如,请参照所述表1,表1示出所存储的所述第一对象的位置信息及与所述第一对象的位置信息相关的信息,其中第一进程创建对象时,所述计算机设备即根据第一进程提供的第二进程可能访问所述第一对象的信息,保存了所述第一对象的标识信息以及所述第一对象在第二进程地址空间的映射地址信息,当计算机设备根据第二进程提供的信息判断得到第二进程需要访问的第一对象的ID为456时,所述计算机设备查找所记录的ID为456的第一对象的信息,得到所述第一对象在第二进程地址空间的映射地址为0x12345678;
2)所述第一对象所在的内存块的ID及所述第一进程在该内存块中的位置;
例如,第一进程创建所述第一对象时,所述计算机设备即记录了所述第一对象的ID、为所述第一对象分配的内存块的ID及该第一对象在内存块中的位置,例如,在该内存块中的偏移量等,当计算机设备根据第二进程提供的信息得到第二进程需要访问的第一对象的ID时,所述计算机设备查找得到所述第一对象所在的内存块及第一对象在该内存块中的位置,以便向所述第二进程提供所述第一对象的映射地址信息。
接着,步骤S3中,计算机设备将得到的所述第一对象的位置信息提供给所述第二进程。所述第二进程根据该位置信息,访问所述第一对象,与第一进程进行数据共享。所述步骤S3已在前面参照图1所述的实施例中予以详述,为简明起见,在此不做赘述,而以引用的方式包含。
图3示出本发明的另一个优选实施例的基于内存池来进行数据共享的流程图。本实施例中,计算机设备并未在创建对象时记录对象的位置信息,因此,需根据提出对象访问请求的进程提供的信息,推算得到被访问对象的位置。以下以第二进程请求访问第一进程所创建的第一对象为例,进行说明。
具体地,步骤S1’中,计算机设备根据来自所述第二进程的对象访问请求,来获取所述第二进程需要访问的第一对象及创建该第一对象的第一进程的标识信息。其中,所述第二进程的对象访问请求可基于诸如OpenFileMapping函数、GetProcAddress函数、消息函数、中断、或控件等发送。计算机设备可直接获取所述第二进程的对象访问请求中提供的第一对象及及创建该第一对象的第一进程的标识信息;或者,当计算机设备捕获到所述对象访问请求,则结合内存池的相关信息,从所述对象访问请求中获取所述第二进程需要访问的第一对象的标识信息,并基于所述第一对象的标识信息在所述内存池相关信息中进行查询,以确定创建所述第一对象的所述第一进程的标识信息,其中,所述标识信息包括但不限于:1)所述第一对象的名称;2)所述第一对象的ID;3)创建所述第一对象的第一进程的名称;4)所述第一进程的ID等。
接着,在步骤S21中,计算机设备根据所确定的所述第一对象及所述第一进程的标识信息来获取所述第一对象在所述第一进程中的对象原始地址、为所述第一进程分配的各个内存块在所述第一进程中的各个内存原始地址及各个内存块的大小。具体地,计算机设备根据所述标识信息获取所述第一对象在所述第一进程中的对象原始地址,计算机设备根据所述第一进程的ID,在内存池相关信息库中查找所述第一进程创建的内存块的信息,所述信息包括但不限于内存块的个数、各内存块在所述第一进程的各内存原始地址、各内存块的大小等。
随后,在步骤S22中,计算机设备根据所述第一对象在所述第一进程中的对象原始地址、为所述第一进程分配的各个内存块在所述第一进程中的各个内存原始地址及各个内存块的大小,来确定所述第一对象所在的内存块及其在该内存块中的位置信息。
具体地,计算机设备将所述第一对象在所述第一进程中的对象原始地址与为所述第一进程分配的各个内存块在所述第一进程中的各个内存原始地址进行比较,所述比较方式包括但不限于用所述第一对象的对象原始地址逐一减去各个内存块的内存原始地址,然后逐一分析所得差值,从而确定存储所述第一对象的内存块,其中:
-如果所述差值小于零,则该内存块不是存储所述第一对象的内存块,需要继续比较以获得其他差值;
-如果所述差值等于零,则该内存块是存储所述第一对象的内存块,并且所述第一对象存储在该内存块的起始位置;
-如果所述差值大于零,则继续比较所述差值与该内存块总空间大小的关系,如果所述差值大于该内存块总空间大小,则该内存块不是存储所述第一对象的内存块,需要继续比较以获得其他差值;如果所述差值小于该内存块总空间大小,则该内存块是存储所述第一对象的内存块;如果所述差值等于该内存块总空间大小,则该内存块是存储所述第一对象的内存块,并且所述第一对象存储在该内存块的末尾位置。
该等确定所述第一对象所在的内存块及其在该内存块中的位置信息的例子仅为用于更好地阐释本发明的方案,本领域技术人员应理解,本发明应不限于上述确定所述第一对象所在的内存块及其在该内存块中的位置信息的方式,任何与确定所述第一对象所在的内存块及其在该内存块中的位置信息的方式均应在本发明的保护范围以内,并以引用方式包含于此。
计算机设备通过所述比较,可以确定所述第一对象所在的内存块及其在该内存块中的位置信息,所述第一对象在所述内存块中的位置信息包括但不限于所述第一对象相对于所述内存块的基地址的偏移量、所述第一对象相对于所述内存块的尾地址的偏移量等。
随后,在步骤S3中,计算机设备将得到的所述第一对象的位置信息提供给所述第二进程。所述第二进程根据该位置信息,访问所述第一对象,与第一进程进行数据共享。所述步骤S3已在前面参照图1所述的实施例中予以详述,为简明起见,在此不做赘述,而以引用的方式包含。
优选地,计算机设备根据所确定的所述第一对象及所述第一进程的标识信息来获取所述对象原始地址、为所述第一进程分配的各个内存块在所述第一进程中的各个内存原始地址及每个内存原始地址所指内存块的最大偏移量。具体地,计算机设备根据所述标识信息获取所述第一对象在所述第一进程中的对象原始地址,计算机设备根据所述第一进程的ID,在内存池相关信息库中查找所述第一进程创建的内存块的信息,所述信息包括但不限于内存块的个数、各内存块在所述第一进程的各内存原始地址、每个内存原始地址所指内存块的最大偏移量等。
接着,计算机设备将所述对象原始地址逐一与所述内存原始地址及该内存原始地址所对应的尾地址进行范围匹配,以确定所述第一对象所在的内存块,其中,所述尾地址为所述内存原始地址与该内存原始地址所对应的最大偏移量之和。具体地,计算机设备对所述对象原始地址和所述内存块的内存原始地址及所述内存块的尾地址进行比较,判断所述对象原始地址是否介于所述内存块的内存原始地址及所述内存块的尾地址之间,以确定所述第一对象所在的内存块。例如,计算机设备获知所述第一对象的原始地址为0x699D1234,计算机设备分析创建所述第一对象的第一进程在所述内存池创建的各内存块的信息,得到所述第一进程一共创建了三个内存块,其中第一个内存块的内存原始地址为0x00030000、尾地址为0x0010D000,第二个内存块的内存原始地址为0x00470000、尾地址为0x004B3000,第三个内存块的内存原始地址为0x699D 1000、尾地址为0x699D5000,则计算机设备确定所述第一对象所在的内存块为所述第三个内存块。
该等确定所述第一对象所在内存块的例子仅为用于更好地阐释本发明的方案,本领域技术人员应理解,本发明应不限于上述确定所述第一对象所在内存块的方式,任何与确定所述第一对象所在内存块的方式均应在本发明的保护范围以内,并以引用方式包含于此。
随后,计算机设备将所述对象原始地址减去该对象所在内存块的内存原始地址,以得到该对象在该内存块中的偏移量,并将所述第一对象所在的内存块及在该内存块中的偏移量作为位置信息。具体地,计算机设备根据所获取的对象原始地址以及该对象所在内存块的内存原始地址,得到该对象在该内存块中的偏移量,所述偏移量为所述对象原始地址与所述内存原始地址之差。例如,计算机设备获知所述第一对象的原始地址为0x699D1234,该对象所在内存块的内存原始地址为0x699D1000,则所述偏移量为0x00000234,则计算机设备将所述偏移量作为所述位置信息。
优选地,存储所述内存池相关信息的设备包括但不限于:1)计算机设备在内存区域为其分配的一块内存,所述内存用来存储所述内存池的相关信息,并且所述内存可以被一个或多个内存池访问以及管理;2)计算机设备在所述某个内存池实例中创建的内存,当计算机设备创建所述某个内存池实例时,即在所述内存池中创建一块内存用来存储所述内存池相关信息。优选地,所述内存池相关信息变化时,例如创建了新的被共享的对象、所述进程申请创建了新的内存块、进程间数据共享结束释放了一些对象以及内存块的存储空间等,计算机设备会更新所述变化。
优选地,计算机设备还可以根据所述一个或多个进程中对象之间存在的引用关系,建立或更新对象引用关系库。具体地,所述引用关系库建立或更新的方法包括但不限于:1)所述计算机设备根据预设的内容来建立引用关系库,例如,根据预设的对象引用链接,来建立引用关系库;2)所述计算机设备根据预设的规则,来建立或更新引用关系库,例如,计算机设备根据预设的对象命名规则,结合待创建的对象的名称,来判断该对象是否与其他对象存在引用关系,若是,则在所述引用关系库中进行更新;3)当所述计算机设备检测得到访问第一对象时,需要引用第二对象,且未能在引用关系库中检索到第一对象与第二对象之间存在关联,则在所述引用关系库中更新记录所述第一对象与所述第二对象的关系。
本领域技术人员应该理解,上述建立或更新引用关系库的举例仅为更好地阐释本发明的技术方案,而非对本发明所做的限定,事实上,任何根据所述一个或多个进程中对象之间存在的引用关系,建立或更新对象引用关系库的方案,均应包含在本发明的范围内,并以引用的方式包含于此。
图4为本发明一个方面的在计算机设备中基于内存池来进行数据共享的内存控制装置的示意图。其中,所述根据本发明的方法可通过计算机设备中的处理器执行操作***或内存控制程序来实现,所述操作***包括但不限于Windows、Linux、Unix、Netware或嵌入式***等,也可由内存控制芯片等硬件来实现。为简明起见,在本上下文中,我们将可执行本发明的所有操作***或内存控制程序或内存控制芯片统称为“内存控制装置”。
在本发明中,计算机设备中内存控制装置首先创建和管理所述内存池,所述内存控制装置根据来自使用所述内存池的进程的内存分配请求,在内存池中为所述进程分配一个或多个内存块,当所述进程需要创建对象时,该内存控制装置根据获得的所述进程创建所述对象的请求,在所述一个或多个内存块中为所述对象分配空间,以存储所述对象。所述内存控制装置可根据上述操作在一个或多个内存池内为多个进程创建对象。并且,所述内存控制装置还能够在内存池中将一个进程创建的对象提供给另一个进程共享。
下面以第二进程访问第一进程所创建的第一对象为例,说明所述内存控制装置如何实现在内存池内进行对象共享。其中,所述第二进程包括但不限于以下类别:1)未创建对象的进程;2)创建了非共享对象的进程;3)创建了共享对象的进程。
具体地,该内存控制装置包括第一获取装置11、第二获取装置12、提供装置13。
第一获取装置11根据来自第二进程的对象访问请求,来获取所述第二进程需要访问的第一对象的标识信息。其中,所述第二进程的对象访问请求可基于OpenFileMapping函数、GetProcAddress函数、消息函数、中断、或控件等发送。第一获取装置11如果捕获到所述对象访问请求,则从该对象访问请求中提取所述第二进程需要访问的第一对象的标识信息。其中,所述标识信息包括但不限于:1)所述第一对象的名称;2)所述第一对象的ID;3)创建所述第一对象的第一进程的名称;4)所述第一对象的创建时间等。需要说明的是,由于一个对象可具有多种标识信息,而在所述对象访问请求中可能仅包含一种标识信息,因此,第一获取装置11还可包括提取装置(图未示),该提取装置在提取该一种标识信息后,还可结合所述内存池的相关信息,获取该对象的其他标识信息。
接着,第二获取装置12根据所确定的第一对象的标识信息来获取所述第一对象的位置信息。具体地,第二获取装置12获取所述第一对象的位置信息的方式包括但不限于:
1)根据所述第一对象的标识信息,直接获取第一进程创建所述第一对象时,内存池所保存的所述第一对象的位置信息;
其中,所述内存池所保存的所述第一对象的位置信息包括但不限于:
a)所述第一对象在创建所述第一对象的第一进程中的原始地址及所述第一对象在可能访问所述第一对象的其他进程中的映射地址;
例如,请参照所述表1,表1示出所存储的所述第一对象的位置信息及与所述第一对象的位置信息相关的信息,其中第一进程创建对象时,所述内存控制装置即根据第一进程提供的第二进程可能访问所述第一对象的信息,保存了所述第一对象的标识信息以及所述第一对象在第二进程地址空间的映射地址信息,当第一获取装置11根据第二进程提供的信息判断得到第二进程需要访问的对象的ID为456时,第二获取装置12查找所记录的ID为456的对象的信息,得到所述第一对象在第二进程地址空间的映射地址为0x12345678。
表1:第一对象的位置信息及位置信息相关的信息
Figure BSA00000310036400161
b)所述第一对象所在的内存块的ID及所述第一对象在该内存块中的位置;
例如,第一进程创建所述第一对象时,所述内存控制装置即记录了所述第一对象的ID、为所述第一对象分配的内存块的ID及该第一对象在内存块中的位置,例如,在该内存块中的偏移量等。当第一获取装置11根据第二进程提供的信息得到第二进程需要访问的第一对象的ID时,第二获取装置12查找得到所述第一对象所在的内存块及第一对象在该内存块中的位置,以便向所述第二进程提供所述第一对象的映射地址信息。
2)如果第一进程创建所述第一对象时,内存池保存了所述第一进程与所述第一对象的对应关系及所述第一对象的标识信息,但没有保存所述第一对象在其他进程的映射地址信息或所述第一对象所在的内存块的信息,则第二获取装置12需要根据所确定的第一对象的标识信息,在内存池相关信息中进行查找,获取创建所述第一对象的第一进程的相关信息,进而获知所述第一对象在所述第一进程地址空间的地址以及其他进程地址空间的映射地址信息。
该等获取所述第一对象的位置信息的例子仅为用于更好地阐释本发明的方案,本领域技术人员应理解,本发明应不限于上述获取所述第一对象的位置信息的方式,任何可使用于本发明的获取所述第一对象的位置信息的方式均应在本发明的保护范围以内,并以引用方式包含于此。
最后,提供装置13将得到的所述第一对象的位置信息提供给所述第二进程。所述第二进程根据该位置信息,访问所述第一对象,与第一进程进行数据共享。例如,第二进程根据提供装置13返回的所述第一对象在所述第二进程地址空间的映射地址,将数据从内存块复制到本地缓存中,再进行后续处理。
优选的,所述内存池的相关信息包括但不限于:
-所述内存池的版本号;
-用于存储所述内存池相关信息的内存块的分配状态,例如,所述内存块是位于所述内存池中,还是分配在内存区域中并被多个内存池共享,该内存块已被分配的空间比例和位置等;
-所述内存池的ID,例如:所述内存控制装置中按时间顺序创建的第一个内存池的ID为1,第二个内存池的ID为2等;
-使用内存池的进程的ID,例如:使用ID为1的第一个内存池的第一个进程的ID为101,使用第二个ID为2的内存池的第四个进程的ID为204等;
-使用内存池的进程所创建的内存块的相关信息,包括但不限于内存块的ID、内存块链表的头部和尾部等;例如,使用ID为1的第一个内存池的ID为101的第一个进程所创建的第一个内存块的ID为10101,使用ID为2的第二个内存池的ID为204的第四个进程所创建的第三个内存块的ID为20403;及内存块链表的前驱指针、后继指针、头指针等;
-被共享的对象的ID,例如:创建在ID为1的第一个内存池中由ID为102第二个进程所创建的ID为10203的第三个内存块上的第四个共享对象的ID为1020304;
-用于查找对象的引用关系库,根据被共享的对象之间存在的引用关系建立引用关系库,所述引用关系库包括但不限于树状、单向链表、循环链表等拓扑结构,例如:第二进程的创建的共享对象b需要引用第一进程创建的共享对象a与c,则引用关系的拓扑结构可为:
Figure BSA00000310036400181
该等描述内存池相关信息的例子仅为用于更好地阐释本发明的方案,本领域技术人员应理解,本发明内存池的相关信息应不限于上述的说明,任何与内存池相关的信息均应在本发明的保护范围以内,并以引用方式包含于此。
图5为本发明的一个优选实施例的基于内存池来进行数据共享的内存控制装置的示意图。本实施例中,所述内存控制装置在进程创建对象时,即记录该对象的位置信息,以便后续使用。所述内存控制装置包括第一获取装置11、第二获取装置12、提供装置13、第三获取装置14、分配装置15、记录装置16,其中,第二获取装置12包括查找装置121。
具体地,第三获取装置14获取所述进程为待创建的对象请求创建位置的请求。其中,所述请求可基于CreatFileMapping函数、消息函数、中断、或控件等发送。
接着,分配装置15在所述进程所请求的内存块中为所述待创建的对象分配所述创建位置。具体地,以第一进程创建第一对象为例,当第三获取装置14获取到第一进程需要创建对象的请求时,分配装置15获取待创建的对象的大小,分析所述第一进程在所述内存池创建的内存块的信息,所述信息包括但不限于所述内存块的个数、各内存块的大小、各内存块的剩余空间大小等。分配装置15对所述待创建的对象的大小以及第一进程创建的各内存块的剩余空间大小进行比较,选择合适的所述内存块来存储所述待创建的对象。例如,分配装置15获知所述待创建的对象大小为4000字节,所述分配装置15分析该第一进程创建的各内存块的信息,得到所述第一进程一共创建了三个内存块,其中第一个内存块的剩余空间大小为1024字节,第二个内存块的剩余空间大小为8192字节,第三个内存块尚未存储任何对象,其大小为24576字节,则分配装置15对所述待创建的对象的大小以及第一进程创建的各内存块的剩余空间大小进行比较后,会在所述第二个内存块中分配一块大小为4096字节的空间来存储所述大小为4000字节的待创建的对象。
该等为所述待创建的对象分配所述创建位置的例子仅为用于更好地阐释本发明的方案,本领域技术人员应理解,本发明应不限于上述为所述待创建的对象分配所述创建位置的方式,任何与为所述待创建的对象分配所述创建位置的方式均应在本发明的保护范围以内,并以引用方式包含于此。
随后,记录装置16记录所述待创建对象的所述创建位置的信息。具体地,记录装置16根据所述待创建对象的存储位置,记录相关信息到内存池相关信息库中,所述相关信息包括但不限于:1)存储所述对象的内存块的ID;2)所述对象在所述内存块的地址信息;3)所述内存块的基地址;4)所述对象在其他进程中的映射地址等。
本实施例中,当收到一个进程的对象访问请求时,所述内存控制装置查找记录的该对象的位置信息,提供给该进程。以第二进程请求访问所述第一对象为例。
第一获取装置11根据来自第二进程的对象访问请求,来获取所述第二进程需要访问的第一对象的标识信息;或者,第一获取装置11中包含的提取装置根据来自第二进程的对象访问请求,并结合所述内存池的相关信息,来获取所述第二进程需要访问的第一对象的标识信息。第一获取装置11及提取装置已在前面参照图4所述的实施例中予以详述,为简明起见,在此不做赘述,而以引用的方式包含。
随后,查找装置121根据所确定的第一对象的标识信息来查找所述第一对象的所述创建位置,将所述创建位置作为所述第一对象的位置信息。具体地,查找装置121根据所确定的标识信息,在内存池相关信息库中直接搜索以获取所述第一对象的位置信息。其中,所述内存池所保存的所述第一对象的创建位置的信息包括但不限于:
1)所述第一对象在创建所述第一对象的第一进程中的原始地址及所述第一对象在可能访问所述第一对象的其他进程中的映射地址;
例如,请参照所述表1,表1示出所存储的所述第一对象的位置信息及与所述第一对象的位置信息相关的信息,其中第一进程创建对象时,所述内存控制装置即根据第一进程提供的第二进程可能访问所述第一对象的信息,保存了所述第一对象的标识信息以及所述第一对象在第二进程地址空间的映射地址信息,当第一获取装置11根据第二进程提供的信息判断得到第二进程需要访问的第一对象的ID为456时,查找装置121查找所记录的ID为456的第一对象的信息,得到所述第一对象在第二进程地址空间的映射地址为0x12345678;
2)所述第一对象所在的内存块的ID及所述第一进程在该内存块中的位置;
例如,第一进程创建所述第一对象时,所述内存控制装置即记录了所述第一对象的ID、为所述第一对象分配的内存块的ID及该第一对象在内存块中的位置,例如,在该内存块中的偏移量等,当第一获取装置11根据第二进程提供的信息得到第二进程需要访问的第一对象的ID时,查找装置121查找得到所述第一对象所在的内存块及第一对象在该内存块中的位置,以便向所述第二进程提供所述第一对象的映射地址信息。
接着,提供装置13将得到的所述第一对象的位置信息提供给所述第二进程。所述第二进程根据该位置信息,访问所述第一对象,与第一进程进行数据共享。所述提供装置13已在前面参照图4所述的实施例中予以详述,为简明起见,在此不做赘述,而以引用的方式包含。
图6为本发明的另一个优选实施例的基于内存池来进行数据共享的内存控制装置的示意图。本实施例中,所述内存控制装置并未在创建对象时记录对象的位置信息,因此,需根据提出对象访问请求的进程提供的信息,推算得到被访问对象的位置。以下以第二进程请求访问第一进程所创建的第一对象为例,进行说明。所述内存控制装置包括第一获取装置11、第二获取装置12、提供装置13,其中,第一获取装置11包括第一获取子装置111,第二获取装置12包括第二获取子装置122、第一位置分析装置123。
具体地,第一获取子装置111根据来自所述第二进程的对象访问请求,来获取所述第二进程需要访问的第一对象及创建该第一对象的第一进程的标识信息。其中,所述第二进程的对象访问请求可基于OpenFileMapping函数、GetProcAddress函数、消息函数、中断、或控件等发送。第一获取子装置111可直接获取所述第二进程的对象访问请求中提供的第一对象及及创建该第一对象的第一进程的标识信息;或者,其中,第一获取子装置111还包括前述提取装置(图未示)及查询装置(图未示),第一获取子装置111如果捕获到所述对象访问请求,则所述提取装置结合内存池的相关信息,从所述对象访问请求中获取所述第二进程需要访问的第一对象的标识信息,所述查询装置基于所述第一对象的标识信息在所述内存池相关信息中进行查询,以确定创建所述第一对象的所述第一进程的标识信息,其中,所述标识信息包括但不限于:1)所述第一对象的名称;2)所述第一对象的ID;3)创建所述第一对象的第一进程的名称;4)所述第一进程的ID等。
接着,第二获取子装置122根据所确定的所述第一对象及所述第一进程的标识信息来获取所述第一对象在所述第一进程中的对象原始地址、为所述第一进程分配的各个内存块在所述第一进程中的各个内存原始地址及各个内存块的大小。具体地,第二获取子装置122根据所述标识信息获取所述第一对象在所述第一进程中的对象原始地址,第二获取子装置122根据所述第一进程的ID,在内存池相关信息库中查找所述第一进程创建的内存块的信息,所述信息包括但不限于内存块的个数、各内存块在所述第一进程的各内存原始地址、各内存块的大小等。
随后,第一位置分析装置123根据所述第一对象在所述第一进程中的对象原始地址、为所述第一进程分配的各个内存块在所述第一进程中的各个内存原始地址及各个内存块的大小,来确定所述第一对象所在的内存块及其在该内存块中的位置信息。
具体地,第一位置分析装置123将所述第一对象在所述第一进程中的对象原始地址与为所述第一进程分配的各个内存块在所述第一进程中的各个内存原始地址进行比较,所述比较方式包括但不限于用所述第一对象的对象原始地址逐一减去各个内存块的内存原始地址,然后逐一分析所得差值,从而确定存储所述第一对象的内存块,其中:
-如果所述差值小于零,则该内存块不是存储所述第一对象的内存块,需要继续比较以获得其他差值;
-如果所述差值等于零,则该内存块是存储所述第一对象的内存块,并且所述第一对象存储在该内存块的起始位置;
-如果所述差值大于零,则继续比较所述差值与该内存块总空间大小的关系,如果所述差值大于该内存块总空间大小,则该内存块不是存储所述第一对象的内存块,需要继续比较以获得其他差值;如果所述差值小于该内存块总空间大小,则该内存块是存储所述第一对象的内存块;如果所述差值等于该内存块总空间大小,则该内存块是存储所述第一对象的内存块,并且所述第一对象存储在该内存块的末尾位置。
该等确定所述第一对象所在的内存块及其在该内存块中的位置信息的例子仅为用于更好地阐释本发明的方案,本领域技术人员应理解,本发明应不限于上述确定所述第一对象所在的内存块及其在该内存块中的位置信息的方式,任何与确定所述第一对象所在的内存块及其在该内存块中的位置信息的方式均应在本发明的保护范围以内,并以引用方式包含于此。
第一位置分析装置123通过所述比较,可以确定所述第一对象所在的内存块及其在该内存块中的位置信息,所述第一对象在所述内存块中的位置信息包括但不限于所述第一对象相对于所述内存块的基地址的偏移量、所述第一对象相对于所述内存块的尾地址的偏移量等。
随后,提供装置13将得到的所述第一对象的位置信息提供给所述第二进程。所述第二进程根据该位置信息,访问所述第一对象,与第一进程进行数据共享。所述提供装置13已在前面参照图4所述的实施例中予以详述,为简明起见,在此不做赘述,而以引用的方式包含。
优选地,第二获取装置12还包括第三获取子装置(图未示)、匹配装置(图未示)、第二位置分析装置(图未示)。
第三获取子装置根据所确定的所述第一对象及所述第一进程的标识信息来获取所述对象原始地址、为所述第一进程分配的各个内存块在所述第一进程中的各个内存原始地址及每个内存原始地址所指内存块的最大偏移量。具体地,第三获取子装置根据所述标识信息获取所述第一对象在所述第一进程中的对象原始地址,第三获取子装置根据所述第一进程的ID,在内存池相关信息库中查找所述第一进程创建的内存块的信息,所述信息包括但不限于内存块的个数、各内存块在所述第一进程的各内存原始地址、每个内存原始地址所指内存块的最大偏移量等。
接着,匹配装置将所述对象原始地址逐一与所述内存原始地址及该内存原始地址所对应的尾地址进行范围匹配,以确定所述第一对象所在的内存块,其中,所述尾地址为所述内存原始地址与该内存原始地址所对应的最大偏移量之和。具体地,匹配装置对所述对象原始地址和所述内存块的内存原始地址及所述内存块的尾地址进行比较,判断所述对象原始地址是否介于所述内存块的内存原始地址及所述内存块的尾地址之间,以确定所述第一对象所在的内存块。例如,匹配装置获知所述第一对象的原始地址为0x699D1234,匹配装置分析创建所述第一对象的第一进程在所述内存池创建的各内存块的信息,得到所述第一进程一共创建了三个内存块,其中第一个内存块的内存原始地址为0x00030000、尾地址为0x0010D000,第二个内存块的内存原始地址为0x00470000、尾地址为0x004B3000,第三个内存块的内存原始地址为0x699D1000、尾地址为0x699D5000,则匹配装置确定所述第一对象所在的内存块为所述第三个内存块。
该等确定所述第一对象所在内存块的例子仅为用于更好地阐释本发明的方案,本领域技术人员应理解,本发明应不限于上述确定所述第一对象所在内存块的方式,任何与确定所述第一对象所在内存块的方式均应在本发明的保护范围以内,并以引用方式包含于此。
随后,第二位置分析装置将所述对象原始地址减去该对象所在内存块的内存原始地址,以得到该对象在该内存块中的偏移量,并将所述第一对象所在的内存块及在该内存块中的偏移量作为位置信息。具体地,第二位置分析装置根据所获取的对象原始地址以及该对象所在内存块的内存原始地址,得到该对象在该内存块中的偏移量,所述偏移量为所述对象原始地址与所述内存原始地址之差。例如,第二位置分析装置获知所述第一对象的原始地址为0x699D1234,该对象所在内存块的内存原始地址为0x699D1000,则所述偏移量为0x00000234,则第二位置分析装置将所述偏移量作为所述位置信息。
优选地,存储所述内存池相关信息的存储内存控制装置包括但不限于:1)所述基于内存池来进行数据共享的内存控制装置在内存区域为该内存池相关信息分配的一块内存,保存装置(图未示)将所述相关信息保存至所述内存,并且所述内存可以被一个或多个内存池访问以及管理;2)所述基于内存池来进行数据共享的内存控制装置在所述某个内存池实例中创建的内存,当所述内存控制装置创建所述某个内存池实例时,即在所述内存池中创建一块内存,保存装置将所述内存池相关信息保存至所述内存。优选地,所述内存池相关信息变化时,例如创建了新的被共享的对象、所述进程申请创建了新的内存块、进程间数据共享结束释放了一些对象以及内存块的存储空间等,第二更新装置(图未示)会更新所述变化。
优选地,第一更新装置(图未示)还可以根据所述一个或多个进程中对象之间存在的引用关系,建立或更新对象引用关系库。具体地,所述引用关系库建立或更新的方法包括但不限于:1)所述第一更新装置根据预设的内容来建立引用关系库,例如,根据预设的对象引用链接,来建立引用关系库;2)所述第一更新装置根据预设的规则,来建立或更新引用关系库,例如,第一更新装置根据预设的对象命名规则,结合待创建的对象的名称,来判断该对象是否与其他对象存在引用关系,若是,则在所述引用关系库中进行更新;3)当所述第一更新装置检测得到访问第一对象时,需要引用第二对象,且未能在引用关系库中检索到第一对象与第二对象之间存在关联,则在所述引用关系库中更新记录所述第一对象与所述第二对象的关系。
本领域技术人员应该理解,上述建立或更新引用关系库的举例仅为更好地阐释本发明的技术方案,而非对本发明所做的限定,事实上,任何根据所述一个或多个进程中对象之间存在的引用关系,建立或更新对象引用关系库的方案,均应包含在本发明的范围内,并以引用的方式包含于此。
对于本领域技术人员而言,显然本发明不限于上述示范性实施例的细节,而且在不背离本发明的精神或基本特征的情况下,能够以其他的具体形式实现本发明。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本发明的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化涵括在本发明内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。此外,显然“包括”一词不排除其他单元或步骤,单数不排除复数。***权利要求中陈述的多个单元或装置也可以由一个单元或装置通过软件或者硬件来实现。第一,第二等词语用来表示名称,而并不表示任何特定的顺序。

Claims (21)

1.一种在计算机设备中基于内存池来进行数据共享的方法,其中,所述内存池根据来自进程的内存分配请求为其分配一个或多个内存块,以使所述进程在所述一个或多个内存块中创建一个或多个对象,该方法包括以下步骤:
a根据来自第二进程的对象访问请求,来获取所述第二进程需要访问的第一对象的标识信息;
b根据所确定的第一对象的标识信息来获取所述第一对象的位置信息;
c将所述第一对象的位置信息提供给所述第二进程。
2.根据权利要求1所述的方法,其中,该方法还包括以下步骤:
-获取所述进程为待创建的对象请求创建位置的请求;
-在为所述进程分配的内存块中为所述待创建的对象分配所述创建位置;
-记录所述待创建对象的所述创建位置的信息。
3.根据权利要求2所述的方法,其中,所述步骤b还包括以下步骤:
-根据所确定的第一对象的标识信息来查找所述第一对象的所述创建位置的信息,将所述创建位置的信息作为所述第一对象的位置信息。
4.根据权利要求1所述的方法,其中,所述步骤a还包括以下步骤:
-根据来自所述第二进程的对象访问请求,来获取所述第二进程需要访问的第一对象及创建该第一对象的第一进程的标识信息;
所述步骤b还包括以下步骤:
-根据所确定的所述第一对象及所述第一进程的标识信息来获取所述第一对象在所述第一进程中的对象原始地址、为所述第一进程分配的各个内存块在所述第一进程中的各个内存原始地址及各个内存块的大小;
-根据所述第一对象在所述第一进程中的对象原始地址、为所述第一进程分配的各个内存块在所述第一进程中的各个内存原始地址及各个内存块的大小,来确定所述第一对象所在的内存块及其在该内存块中的位置信息。
5.根据权利要求4所述的方法,其中,所述步骤b还包括以下步骤:
-根据所确定的所述第一对象及所述第一进程的标识信息来获取所述对象原始地址、为所述第一进程分配的各个内存块在所述第一进程中的各个内存原始地址及每个内存原始地址所指内存块的最大偏移量;
-将所述对象原始地址逐一与所述内存原始地址及该内存原始地址所对应的尾地址进行范围匹配,以确定所述第一对象所在的内存块,其中,所述尾地址为所述内存原始地址与该内存原始地址所对应的最大偏移量之和;
-将所述对象原始地址减去该对象所在内存块的内存原始地址,以得到该对象在该内存块中的偏移量,并将所述第一对象所在的内存块及在该内存块中的偏移量作为位置信息。
6.根据权利要求1至5中任一项所述的方法,其中,所述步骤a还包括以下步骤:
-根据所述对象访问请求,并结合所述内存池的相关信息,来获取所述第一对象的标识信息;
-基于所述第一对象的标识信息在所述内存池相关信息中进行查询,以确定创建所述第一对象的所述第一进程的标识信息。
7.根据权利要求1至6中任一项所述的方法,其中,该方法还包括以下步骤:
-根据所述一个或多个进程中对象之间存在的引用关系,建立或更新对象引用关系库。
8.根据权利要求1至7中任一项所述的方法,其中,该方法还包括以下步骤:
-根据所述内存池的信息变化,更新所述内存池相关信息。
9.根据权利要求1至8中任一项所述的方法,其中,所述内存池相关信息包括以下至少一项信息:
-所述内存池的版本号;
-用于存储所述内存池的相关信息的存储块的分配状态;
-所述内存池的ID;
-使用该内存池的进程的ID;
-各个使用该内存池的进程的所创建的内存块的相关信息;
-被共享的对象的ID;
-用于查找对象的引用关系库。
10.根据权利要求1至9中任一项所述的方法,其中,所述内存池的相关信息保存在所述内存池的一个共享内存块中。
11.一种在计算机设备中基于内存池来进行数据共享的内存控制装置,其中,所述内存池根据来自进程的内存分配请求为其分配一个或多个内存块,以使所述进程在所述一个或多个内存块中创建一个或多个对象,该内存控制装置包括:
第一获取装置,用于根据来自第二进程的对象访问请求,来获取所述第二进程需要访问的第一对象的标识信息;
第二获取装置,用于根据所确定的第一对象的标识信息来获取所述第一对象的位置信息;
提供装置,用于将所述第一对象的位置信息提供给所述第二进程。
12.根据权利要求11所述的内存控制装置,其中,该内存控制装置还包括:
第三获取装置,用于获取所述进程为待创建的对象请求创建位置的请求;
分配装置,用于在为所述进程分配的内存块中为所述待创建的对象分配所述创建位置;
记录装置,用于记录所述待创建对象的所述创建位置的信息。
13.根据权利要求12所述的内存控制装置,其中,所述第二获取装置还包括:
查找装置,用于根据所确定的第一对象的标识信息来查找所述第一对象的所述创建位置的信息,将所述创建位置的信息作为所述第一对象的位置信息。
14.根据权利要求11所述的内存控制装置,其中,所述第一获取装置还包括:
第一获取子装置、用于根据来自所述第二进程的对象访问请求,来获取所述第二进程需要访问的第一对象及创建该第一对象的第一进程的标识信息;
所述第二获取装置还包括:
第二获取子装置,用于根据所确定的所述第一对象及所述第一进程的标识信息来获取所述第一对象在所述第一进程中的对象原始地址、为所述第一进程分配的各个内存块在所述第一进程中的各个内存原始地址及各个内存块的大小;
第一位置分析装置,用于根据所述第一对象在所述第一进程中的对象原始地址、为所述第一进程分配的各个内存块在所述第一进程中的各个内存原始地址及各个内存块的大小,来确定所述第一对象所在的内存块及其在该内存块中的位置信息。
15.根据权利要求14所述的内存控制装置,其中,所述第二获取装置还包括:
第三获取子装置、用于根据所确定的所述第一对象及所述第一进程的标识信息来获取所述对象原始地址、为所述第一进程分配的各个内存块在所述第一进程中的各个内存原始地址及每个内存原始地址所指内存块的最大偏移量;
匹配装置,用于将所述对象原始地址逐一与所述内存原始地址及该内存原始地址所对应的尾地址进行范围匹配,以确定所述第一对象所在的内存块,其中,所述尾地址由所述内存原始地址与该内存原始地址所对应的最大偏移量相加得到;
第二位置分析装置,用于将所述对象原始地址减去该对象所在内存块的内存原始地址,以得到该对象在该内存块中的偏移量,并将所述第一对象所在的内存块及在该内存块中的偏移量作为位置信息。
16.根据权利要求11至15中任一项所述的内存控制装置,其中,所述第一获取子装置还包括:
提取装置,用于根据所述对象访问请求,并结合所述内存池的相关信息,来获取所述第一对象的标识信息;
查询装置,用于基于所述第一对象的标识信息在所述内存池相关信息中进行查询,以确定创建所述第一对象的所述第一进程的标识信息。
17.根据权利要求11至16中任一项所述的内存控制装置,其中,该内存控制装置还包括:
第一更新装置,用于根据所述一个或多个进程中对象之间存在的引用关系,建立或更新对象引用关系库。
18.根据权利要求11至17中任一项所述的内存控制装置,其中,该内存控制装置还包括:
第二更新装置,用于根据所述内存池的信息变化,更新所述内存池相关信息。
19.根据权利要求11至18中任一项所述的内存控制装置,其中,所述内存池相关信息包括以下至少一项信息:
-所述内存池的版本号;
-用于存储所述内存池的相关信息的存储块的分配状态;
-所述内存池的ID;
-使用该内存池的进程的ID;
-各个使用该内存池的进程所创建的内存块相关信息;
-被共享的对象的ID;
-用于查找对象的引用关系库。
20.根据权利要求11至19中任一项所述的内存控制装置,其中,该内存控制装置还包括:
保存装置,用于将所述内存池的相关信息保存在所述内存池的一个共享内存块中。
21.一种计算机设备,其包括如权利要求11至20中任一项所述的内存控制装置。
CN201010512347.6A 2010-10-19 一种基于内存池来进行数据共享的方法和计算机设备 Active CN102455943B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201010512347.6A CN102455943B (zh) 2010-10-19 一种基于内存池来进行数据共享的方法和计算机设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201010512347.6A CN102455943B (zh) 2010-10-19 一种基于内存池来进行数据共享的方法和计算机设备

Publications (2)

Publication Number Publication Date
CN102455943A true CN102455943A (zh) 2012-05-16
CN102455943B CN102455943B (zh) 2016-12-14

Family

ID=

Cited By (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103491193A (zh) * 2013-09-30 2014-01-01 华为技术有限公司 一种文件共享的方法和设备
CN104571953A (zh) * 2014-12-25 2015-04-29 珠海金山网络游戏科技有限公司 一种扩展进程中内存地址控制的方法
CN104978278A (zh) * 2014-04-14 2015-10-14 阿里巴巴集团控股有限公司 数据处理方法和装置
CN106529679A (zh) * 2016-10-14 2017-03-22 腾讯科技(上海)有限公司 一种机器学习方法及***
CN109800035A (zh) * 2019-01-24 2019-05-24 博云视觉科技(青岛)有限公司 一种算法集成服务框架***
CN110008036A (zh) * 2019-02-19 2019-07-12 西安万像电子科技有限公司 数据传输方法及装置
CN110879748A (zh) * 2018-09-06 2020-03-13 阿里巴巴集团控股有限公司 一种共享资源分配方法、装置和设备
CN111506426A (zh) * 2020-04-17 2020-08-07 翱捷科技(深圳)有限公司 内存管理方法、装置及电子设备
CN116069530A (zh) * 2023-04-03 2023-05-05 中国人民解放军国防科技大学 基于内存池的仿真引擎数据共享黑板***

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1752949A (zh) * 2004-09-24 2006-03-29 上海贝尔阿尔卡特股份有限公司 内存管理***及方法

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1752949A (zh) * 2004-09-24 2006-03-29 上海贝尔阿尔卡特股份有限公司 内存管理***及方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
WENJIANAN: "Windows平台下常用进程间通信的实现方式", 《HTTP://BLOG.ITPUB.NET/9215421/VIEWSPACE-605618/》, 9 June 2009 (2009-06-09) *

Cited By (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103491193A (zh) * 2013-09-30 2014-01-01 华为技术有限公司 一种文件共享的方法和设备
CN104978278B (zh) * 2014-04-14 2020-05-29 创新先进技术有限公司 数据处理方法和装置
CN104978278A (zh) * 2014-04-14 2015-10-14 阿里巴巴集团控股有限公司 数据处理方法和装置
CN104571953A (zh) * 2014-12-25 2015-04-29 珠海金山网络游戏科技有限公司 一种扩展进程中内存地址控制的方法
CN104571953B (zh) * 2014-12-25 2017-10-17 珠海金山网络游戏科技有限公司 一种扩展进程中内存地址控制的方法
CN106529679A (zh) * 2016-10-14 2017-03-22 腾讯科技(上海)有限公司 一种机器学习方法及***
CN106529679B (zh) * 2016-10-14 2020-01-14 腾讯科技(上海)有限公司 一种机器学习方法及***
CN110879748A (zh) * 2018-09-06 2020-03-13 阿里巴巴集团控股有限公司 一种共享资源分配方法、装置和设备
CN110879748B (zh) * 2018-09-06 2023-06-13 阿里巴巴集团控股有限公司 一种共享资源分配方法、装置和设备
CN109800035A (zh) * 2019-01-24 2019-05-24 博云视觉科技(青岛)有限公司 一种算法集成服务框架***
CN109800035B (zh) * 2019-01-24 2022-11-15 博云视觉科技(青岛)有限公司 一种算法集成服务框架***
CN110008036A (zh) * 2019-02-19 2019-07-12 西安万像电子科技有限公司 数据传输方法及装置
CN111506426A (zh) * 2020-04-17 2020-08-07 翱捷科技(深圳)有限公司 内存管理方法、装置及电子设备
CN116069530A (zh) * 2023-04-03 2023-05-05 中国人民解放军国防科技大学 基于内存池的仿真引擎数据共享黑板***

Similar Documents

Publication Publication Date Title
CN107391653B (zh) 一种分布式NewSQL数据库***及图片数据储存方法
US8065484B2 (en) Enhanced access to data available in a cache
CN101620609B (zh) 多租户数据存储和访问方法和装置
CN111414389B (zh) 一种数据处理方法、装置、电子设备及存储介质
US20160164899A1 (en) Data-oriented information technology system
US20160012155A1 (en) System and method for use of immutable accessors with dynamic byte arrays
CN104881466A (zh) 数据分片的处理以及垃圾文件的删除方法和装置
CN103607428A (zh) 一种访问共享内存的方法和装置
CN111258978A (zh) 一种数据存储的方法
CN106471501A (zh) 数据查询的方法、数据对象的存储方法和数据***
CN104423982A (zh) 请求的处理方法和处理设备
CN103377269A (zh) 传感器数据定位方法和装置
CN102024051B (zh) 分布式内存数据库数据更新方法
CN115470156A (zh) 基于rdma的内存使用方法、***、电子设备和存储介质
CA2702133A1 (en) Redistribute native xml index key shipping
CN109271193B (zh) 一种数据处理方法、装置、设备及存储介质
CN102724301B (zh) 云数据库***以及云数据读写处理方法、设备
CN112783866B (zh) 数据读取方法、装置、计算机设备和存储介质
EP3743821A1 (en) Wide key hash table for a graphics processing unit
CN102780780B (zh) 云计算模式下的数据处理方法、设备和***
CN110019448B (zh) 一种数据交互方法及装置
US20150172131A1 (en) Method and system for verifying quality of server
CN102455943A (zh) 一种基于内存池来进行数据共享的方法和计算机设备
CN114547055A (zh) 一种数据处理方法及装置
CN111552740B (zh) 数据处理方法及装置

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
TR01 Transfer of patent right
TR01 Transfer of patent right

Effective date of registration: 20200615

Address after: 210000 room 834, Caiying building, No.99 Tuanjie Road, Nanjing, Jiangsu Province

Patentee after: Suning financial technology (Nanjing) Co.,Ltd.

Address before: Bi Sheng Lu Pudong New Area Zhangjiang hi tech park Shanghai city 201204 299 Lane 4, Room 102

Patentee before: SHANGHAI SYNACAST MEDIA TECH Co.,Ltd.

CP03 Change of name, title or address
CP03 Change of name, title or address

Address after: Room 834, Yingying building, No.99, Tuanjie Road, yanchuangyuan, Jiangbei new district, Nanjing, Jiangsu Province

Patentee after: Nanjing Xingyun Digital Technology Co.,Ltd.

Address before: Room 834, Yingying building, 99 Tuanjie Road, Nanjing, Jiangsu 210000

Patentee before: Suning financial technology (Nanjing) Co.,Ltd.

TR01 Transfer of patent right
TR01 Transfer of patent right

Effective date of registration: 20240703

Address after: The 7th, 8th, 9th, 27th, 28th, and 29th floors of Building 4, No. 248 Lushan Road, Jianye District, Nanjing City, Jiangsu Province, 210000, and the 1st and 2nd floors of the podium of Building 4

Patentee after: Jiangsu Sushang Bank Co.,Ltd.

Country or region after: China

Address before: Room 834, Yingying building, No.99, Tuanjie Road, yanchuangyuan, Jiangbei new district, Nanjing, Jiangsu Province

Patentee before: Nanjing Xingyun Digital Technology Co.,Ltd.

Country or region before: China