一种扩展进程中内存地址控制的方法

文档序号:8257833阅读:427来源:国知局
一种扩展进程中内存地址控制的方法
【技术领域】
[0001]本发明涉及计算机内存分配的方法、特别是一种扩展进程中内存地址控制的方法。
【背景技术】
[0002]目前32位X86架构中CPU、内存控制器、操作系统都是按32位地址总线设计。32位地址总线可以支持的内存地址代码是4096MB,也就是有4GB的地址代码。这4GB的地址码在操作系统层面对应叫做4GB的虚拟地址空间。这4GB的地址空间正好可以分配给4GB内存。因此,因此一个在32位系统下运行的进程,最多只能使用4GB以下的内存。
[0003]在32位系统地址空间不足这种限制条件下。即便是在一台拥有更高物理内存的电脑上(如8GB内存),一个进程也仅仅能申请出不到4GB的内存,这相当的不划算。
[0004]虽然χ64架构的系统和电脑可以解决上述问题。但是在一些老的机器(如32位硬件的电脑)或是正在运营的软件产品上做这种升级成本相当之高。

【发明内容】

[0005]为解决上述问题,本发明的目的在于提供一种能通过软件的方式在32位系统使用4GB以上内存的扩展进程中内存地址控制的方法。
[0006]本发明解决其问题所采用的技术方案是:
一种扩展进程中内存地址控制的方法,包括主进程和由主进程创建的一个或以上的扩展进程,所述主进程包括原程序业务组件和第一扩展内存地址空间组件,所述第一扩展内存地址空间组件包括内存-进程映射模块和主分配器模块,所述扩展进程包括第二扩展内存地址空间组件和所扩展的内存地址空间,所述第二扩展内存地址空间组件包括内存-区块映射模块和次分配器模块,所述扩展进程通过扩展进程ID号唯一进行识别,内存地址空间内的内存通过内存ID号进行识别,每一段独立的内存对应一个独立的内存ID号,所述主分配器模块根据内存-进程映射模块维护内存ID与扩展进程ID的关系,所述次分配器模块通过内存-区块映射模块维护内存ID及其对应的内存区块的关系。
[0007]进一步,主进程中的内存-进程映射模块中维护了一个内存ID到扩展进程ID的映射表。其输入为内存ID,其输出为扩展进程的ID。
[0008]进一步,扩展进程中的内存-区块映射模块中维护了一个内存ID到区块的映射表。其输入为内存ID,其输出为区块信息。一个区块信息由地址、大小这样一个二兀组组成,所述区块为内存ID对应的内存在本进程中地址空间的位置。
[0009]进一步,主进程中的主分配器模块以管道方式与扩展进程中的次分配器模块通讯,主分配器模块和次分配器模块配合完成内存分配、内存释放、内存读取、内存写入4个不同功能的操作。
[0010]具体地,内存分配的步骤为,主分配器模块接受业务逻辑发送过来的内存分配请求,并将请求的内存大小逐一发给各个扩展进程中的次分配器模块,若扩展进程可以分配出内存,则主分配器模块将内存ID,扩展进程ID的对应关系记录到内存-进程映射表中,若所有扩展进程都无法分配出内存,则主分配器模块将启动一个全新的扩展进程,并将分配请求传给这个全新的扩展进程的次分配器;接到主分配器发送过来的内存分配请求后:扩展进程中的次分配器模块如果可以分配出足量的内存,则会给这个内存块分配一个系统中的全局ID值,同时将内存ID、地址、大小记录到本扩展进程的内存-区块映射模块中,最后将内存ID传回给主分配器模块,若扩展进程中的次分配器模块无法分配出足量的内存,则会返回一个分配失败的返回值给主分配器模块。
[0011]具体地,内存释放的步骤为:业务逻辑将需要释放的内存ID发给主分配器模块,主分配器模块在内存-进程映射表中查找得到内存ID对应的扩展进程,主分配器模块将内存ID发送给扩展进程ID所对应的次分配器模块,次分配器模块在内存-区块映射模块中查找内存ID所对应的具体区块,即地址、大小这个二元组,删除地址所对应的扩展内存地址空间的内存块,并在内存-区域映射模块中删除内存ID及其所对应的区块信息。
[0012]具体地,内存读取的步骤为:业务逻辑将需要读取的内存、偏移值、读取大小发给主分配器模块,主分配器模块在内存-进程映射表中查找得到内存ID对应的扩展进程ID,主分配器模块将内存ID、偏移值、读取大小发送给扩展进程ID所对应的次分配器模块,次分配器模块在内存-区块映射模块中查找内存ID所对应的具体区块,即地址、大小这个二元组,次分配器模块将读取扩展进程中实际地址为地址+偏移值大小为读取大小的内存块返回给主分配器模块,主分配器模块将所读取的内存传回给业务逻辑,完成读取。
[0013]具体地,内存写入的步骤为:业务逻辑将需要写入的内存ID、偏移值、写入数据发给主分配器模块,主分配器模块在内存-进程映射表中查找得到内存ID对应的扩展进程ID,主分配器模块将内存ID、偏移值、写入数据发送给扩展进程ID所对应的次分配器模块,次分配器模块在内存-区块映射模块中查找内存ID所对应的具体区块,即地址、大小这个二元组,次分配器模块将写入数据写入到扩展进程中实际地址为地址+偏移值的内存,完成写入。
[0014]本发明的有益效果是:本发明采用的一种扩展进程中内存地址控制的方法,主进程通过主分配器模块创建多个扩展进程,并由扩展进程中的次分配器模块分配实际的内存。所有内存不通过内存地址标识,而是通过一个全局唯一的内存ID标识。其中内存ID、扩展进程、扩展进程内的内存区块三者之间的关系则通过内存-进程映射模块和内存-区域映射模块来维护。如此一来,虽然32位环境下每个进程仍然只有4GB的地址空间。但是由于可以动态的增长多个进程,且内存ID不像内存地址一样受到4GB地址空间的约束。因此可以不受限制的最大化物理内存的使用。
[0015]本发明在无需升级机器硬件和系统的前提下,仅通过改进软件即可充分的利用电脑的物理内存。且本方法通过扩展进程方式实现,使得单个进程所使用的物理内存总量没有上限。即便是在64位系统中,运用此方法的系统仍然可以正常运行。即通过此方法扩展内存不会产生兼容性问题。同时此方法的系统也能扩展64位系统的内存最大使用量。
【附图说明】
[0016]下面结合附图和实例对本发明作进一步说明。
[0017]图1是本发明中主进程和扩展进程的示意图; 图2是本发明内存-进程映射模块的示意图;
图3是本发明内存-区域映射模块的示意图;
图4是本发明内存分配的流程图;
图5是本发明内存释放过程的流程图;
图6是本发明内存读取过程的流程图;
图7是本发明内存写入过程的流程图。
【具体实施方式】
[0018]参照图1-图3,本发明的一种扩展进程中内存地址控制的方法,包括主进程和由主进程创建的一个或以上的扩展进程,所述主进程包括原程序业务组件和第一扩展内存地址空间组件,所述第一扩展内存地址空间组件包括内存-进程映射模块和主分配器模块,所述扩展进程包括第二扩展内存地址空间组件和所扩展的内存地址空间,所述第二扩展内存地址空间组件包括内存-区块映射模块和次分配器模块,所述扩展进程通过扩展进程ID号唯一进行识别,内存地址空间内的内存通过内存ID号进行识别,每一段独立的内存对应一个独立的内存ID号,所述主分配器模块根据内存-进程映射模块维护内存ID与扩展进程ID的关系,所述次分配器模块通过内存-区块映射模块维护内存ID及其对应的内存区块的关系。
[0019]参照图2所示,主进程中的内存-进程映射模块中维护了一个内存ID到扩展进程ID的映射表。其输入为内存ID,其输出为扩展进程的I
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1