CN103425592B - 一种多进程系统中的内存管理方法及装置 - Google Patents
一种多进程系统中的内存管理方法及装置 Download PDFInfo
- Publication number
- CN103425592B CN103425592B CN201310338075.6A CN201310338075A CN103425592B CN 103425592 B CN103425592 B CN 103425592B CN 201310338075 A CN201310338075 A CN 201310338075A CN 103425592 B CN103425592 B CN 103425592B
- Authority
- CN
- China
- Prior art keywords
- memory
- memory block
- shared drive
- drive pond
- dimension
- 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.)
- Active
Links
Landscapes
- Debugging And Monitoring (AREA)
- Techniques For Improving Reliability Of Storages (AREA)
Abstract
本发明公开了一种多进程系统中的内存管理方法及装置,用以优化系统内的内存管理方式,提高内存利用率以及提高内存分配成功率。该方法为:内存管理装置采用共享内存池进行内存块的统一规划,并通过进程的标识信息和互斥信号量,区分多进程对内存池中内存块的申请和释放,令多个进程对同一规格的内存块的访问互不干扰,这样,便可以实现内存的优化管理,既可以避免由于内存不足而反复向操作系统申请所带来的资源消耗,同时也能避免在操作系统产生大量的内存碎片,进而有效地提高了系统的内存利用率以及内存分配成功率。
Description
技术领域
本发明涉及内存管理技术,特别涉及一种多进程系统中的内存管理方法及装置。
背景技术
在操作系统中,当运行软件产品时,通常会涉及对内存的操作。早期的操作系统中,由软件模块直接对操作系统进行内存的申请和释放,这样长期运行会在操作系统内产生内存碎片从而导致后续申请内存失败。为了避免这种情况,添加了内存管理模块,内存管理模块在操作系统之上封装一层内存管理,内存管理模块初始化时根据配置的内存块规格、内存块数量从操作系统申请内存创建内存池(即内存块的管理集合)。软件模块申请内存时直接从内存池申请,软件模块释放内存时将内存释放到内存池。
采用内存池方式,是通过预先配置一定数目的内存块,并对这些内存块进行管理,解决了频繁向系统申请、释放内存的问题。具体实现方式如下。
参阅图1所示,图1中介绍的是通用的内存管理模式,每个单板部署多个进程,每个进程部署一个内存管理模块,每一个内存管理模块均会针对自身管理的进程建立相应的内存池。
参阅图2所示,以任意一个内存管理模块为例,内存管理模块根据配置的内存块的规格以及内存块的数量从操作系统申请内存,创建内存空间形成内存池,每种内存块在内存池中的结构如图2所示,其实现方式如下:
如图2所示,每个内存块分为管理区,内存区(即buffer区)和隔离区,其中,内存区为有效的内存存放空间。内存管理模块可以通过空闲链表和忙链表对内存块进行管理,例如,内存管理模块在初始化时将内存块插入空闲链表中,应用模块申请内存时,将分配的内存块从空闲链表中删除,插入忙链表中;相应的,当应用模块释放内存时,将释放的内存块从忙链表中删除,并插入空闲链表中。
然而,现有技术下,采用上述方式进行内存管理却会存在以下问题:
(1)每一个内存管理模块均会根据初始配置的内存块的规格和内存块的数量创建相应的内存池,但是,由于系统整体内存有限,因此,在每一个内存池中,内存块的规格不能穷举,那么,在某一个内存池中,如果没有配置某个内存块的规格,那么软件模块在申请内存时会申请失败。
(2)由于系统内存是在多个内存池之间分配,因此,每一个内存池中分配到的内存块的规格和数量均有限,而当内存池中的内存块数量不足时,还需要继续从操作系统中申请内存,而从操作系统中申请内存还需调用相应的函数,此过程更为复杂和费时。
(3)软件模块在内存块使用完成后会将内存块释放,释放后的内存块存在于内存池中并不会释放到操作系统中。这样,若某一软件模块申请了很多内存块,并在使用完成后将这些内存块均释放到自身的内存池中,那么,会令操作系统可使用的内存变少,从而令其他进程无内存块可使用,进而造成各进程之间忙闲不均的问题。
(4)对于支持多进程的操作系统(如Linux,Unix等等),每个进程都有一套内存管理机制,即每个进程均对应一个内存管理模块,每一个内存管理针对自身管理的进程分别建立和维护相应的内存池;而每个进程的功能不同,每个进程使用内存块的规格、内存块的数量不尽相同,各个内存管理模块需要针对相应进程分别在对应的内存池中配置内存块,这一过程非常繁琐,需要分别考虑每一个进程需要使用哪种规格的内存块,并分别进行申请,还需要考虑配置的内存总量不能超过系统总的物理内存。
(5)某一个进程申请的内存块被释放后,如果释放的内存块在这个进程的空闲链表中长期不使用,那么,其他进程便无法使用此内存块,这将会造成空闲内存块的浪费。
(6)某一个进程出现故障并重启后,如果按照内存配置信息申请内存块,可能存在其他进程申请内存块过多从而导致本进程申请内存块失败的情况。
发明内容
本发明实施例提供一种多进程系统中的内存管理方法及装置,用以优化系统内的内存管理方式,提高内存利用率以及提高内存分配成功率。
本发明实施例提供的具体技术方案如下:
一种多进程系统中的内存管理方法,包括:
在初始配置阶段,创建共享内存池,并按照预设的内存配置信息在所述共享内存池中进行内存块规划;
接收到内存调用指令时,选取一进程,并通过所述一进程在所述共享内存池中申请符合内存调用指令的相应规格的内存块,以及对应所述相应规格的内存块记录所述一进程的标识信息和互斥信号量,其中,所述互斥信号量用于表示某一规格的内存块当前已被占用且不能再被其他进程申请。
优选的,创建共享内存池,并按照预设的内存配置信息在所述共享内存池中进行内存块规划,包括:
向操作系统申请大小为M-N的内存,其中,M为操作系统管理的物理内存的大小,N为操作系统正常运行所需内存的大小;
将大小为M-N的内存列入共享内存池中,并按照预设的内存配置信息在共享内存池中设置每一类内存块规格以及每一类内存块规格对应的内存块数量。
这样,当软件模块通过所述一进程申请内存块时,可以根据软件模块的需要调用符合使用需求的内存,不会存在调用不到合适的内存块的情况;并且,内存池中的内存块数量已进行了最大化设置,因而内存管理装置无需频繁从操作系统中申请内存,从而减少了不必要的操作,节省了系统资源。
优选的,进一步包括:
通过所述一进程在所述共享内存池中申请符合内存调用指令的相应规格的内存块后,在使用所述内存块的过程中,若确定读写的内存长度超过设定的内存区域,则终止当前操作并直接向操作界面返回失败提示。
这样,可以有效避免内存块使用出现错误,从而造成后续内存块无法继续使用的情况。
优选的,进一步包括:
接收到所述一进程对应的内存释放指令时,通过所述一进程释放对应所述相应规格的内存块记录的所述一进程的标识信息和互斥信号量。
这样,软件模块在内存块使用完成后会通过所述一进程将内存块释放至共享内存池中,令其他进程可以继续使用这些内存块,不会降低操作系统中的可使用内存,从而避免出现各进程之间忙闲不均的问题。
优选的,进一步包括:
通过规划的基准进程创建所述共享内存池。
优选的,接收到内存调用指令时,选取所述一进程,并通过所述一进程在所述共享内存池中申请符合内存调用指令的相应规格的内存块,包括:
接收到内存调用指令后,启动所述一进程;
若所述一进程为基准进程,则判断共享内存池是否已建立,若是,则释放已被申请使用且对应记录的进程的标识信息为基准进程的标识信息的内存块,以及通过所述一进程在所述共享内存池中申请符合内存调用指令的相应规格的内存块;否则,建立共享内存池,并通过所述一进程在所述共享内存池中申请符合内存调用指令的相应规格的内存块
若所述一进程为非基准进程,则判断共享内存池是否已建立,若是,则通过所述一进程在所述共享内存池中申请符合内存调用指令的相应规格的内存块;否则,待共享内存池建立完成后,再通过所述一进程在所述共享内存池中申请符合内存调用指令的相应规格的内存块。
优选的,进一步包括:
对应所述相应规格的内存块记录所述一进程的标识信息和互斥信号量后,若所述一进程发生故障,则释放对应所述相应规格的内存块记录的所述一进程的标识信息和互斥信号量。
优选的,若所述一进程发生故障,则释放对应所述相应规格的内存块记录的所述一进程的标识信息和互斥信号量,包括:
若所述一进程为基准进程,则在确定所述一进程发生故障时重启所述一进程,以及在重启后,且确定已经建立共享内存池时,通过所述一进程释放对应所述相应规格的内存块记录的所述一进程的标识信息和互斥信号量;
若所述一进程为非基准进程,则在确定所述一进程发生故障时重启所述一进程,以及在重启后,通过基准进程释放对应所述相应规格的内存块记录的所述一进程的标识信息和互斥信号量。
这样,某一个进程出现故障并重启后,仍是从共享内存池中申请内存块,由于共享内存池中的内存块规格和内存块数量是预先配置好的,因此,不会出现其他进程申请内存块过多从而导致上述某所述一进程申请内存块失败的情况。
一种多进程系统中的内存管理装置,包括:
配置单元,用于在初始配置阶段,创建共享内存池,并按照预设的内存配置信息在所述共享内存池中进行内存块规划;
处理单元,用于在接收到内存调用指令时,选取一进程,并通过所述一进程在所述共享内存池中申请符合内存调用指令的相应规格的内存块,以及对应所述相应规格的内存块记录所述一进程的标识信息和互斥信号量,其中,所述互斥信号量用于表示某一规格的内存块当前已被占用且不能再被其他进程申请。
优选的,所述配置单元创建共享内存池,并按照预设的内存配置信息在所述共享内存池中进行内存块规划,包括:
所述配置单元向操作系统申请大小为M-N的内存,其中,M为操作系统管理的物理内存的大小,N为操作系统正常运行所需内存的大小;
所述配置单元将大小为M-N的内存列入共享内存池中,并按照预设的内存配置信息在共享内存池中设置每一类内存块规格以及每一类内存块规格对应的内存块数量。
这样,当软件模块通过所述一进程申请内存块时,内存管理装置可以根据软件模块的需要调用符合使用需求的内存,不会存在调用不到合适的内存块的情况;并且,内存池中的内存块数量已进行了最大化设置,因而内存管理装置无需频繁从操作系统中申请内存,从而减少了不必要的操作,节省了系统资源。
优选的,所述处理单元进一步用于:
所述处理单元通过所述一进程在所述共享内存池中申请符合内存调用指令的相应规格的内存块后,在使用所述内存块的过程中,若确定读写的内存长度超过设定的内存区域,则终止当前操作并直接向操作界面返回失败提示。
这样,可以有效避免内存块使用出现错误,从而造成后续内存块无法继续使用的情况。
优选的,所述处理单元进一步用于:
所述处理单元接收到所述一进程对应的内存释放指令时,通过所述一进程释放对应所述相应规格的内存块记录的所述一进程的标识信息和互斥信号量。
这样,软件模块在内存块使用完成后会通过所述一进程将内存块释放至共享内存池中,令其他进程可以继续使用这些内存块,不会降低操作系统中的可使用内存,从而避免出现各进程之间忙闲不均的问题。
优选的,所述配置单元具体用于:
所述配置单元通过规划的基准进程创建所述共享内存池。
优选的,所述处理单元接收到内存调用指令时,选取所述一进程,并通过所述一进程在所述共享内存池中申请符合内存调用指令的相应规格的内存块,包括:
所述处理单元接收到内存调用指令后,启动所述一进程;
若所述一进程为基准进程,则所述处理单元判断共享内存池是否已建立,若是,则释放已被申请使用且对应记录的进程的标识信息为基准进程的标识信息的内存块,以及通过所述一进程在所述共享内存池中申请符合内存调用指令的相应规格的内存块;否则,建立共享内存池,并通过所述一进程在所述共享内存池中申请符合内存调用指令的相应规格的内存块
若所述一进程为非基准进程,则所述处理单元判断共享内存池是否已建立,若是,则通过所述一进程在所述共享内存池中申请符合内存调用指令的相应规格的内存块;否则,待共享内存池建立完成后,再通过所述一进程在所述共享内存池中申请符合内存调用指令的相应规格的内存块。
优选的,所述处理单元进一步用于:
所述处理单元对应所述相应规格的内存块记录所述一进程的标识信息和互斥信号量后,若所述一进程发生故障,则释放对应所述相应规格的内存块记录的所述一进程的标识信息和互斥信号量。
优选的,若所述一进程发生故障,则所述处理单元释放对应所述相应规格的内存块记录的所述一进程的标识信息和互斥信号量,包括:
若所述一进程为基准进程,则所述处理单元在确定所述一进程发生故障时重启所述一进程,以及在重启后,且确定已经建立共享内存池时,通过所述一进程释放对应所述相应规格的内存块记录的所述一进程的标识信息和互斥信号量;
若所述一进程为非基准进程,则所述处理单元在确定所述一进程发生故障时重启所述一进程,以及在重启后,通过基准进程释放对应所述相应规格的内存块记录的所述一进程的标识信息和互斥信号量。
这样,某一个进程出现故障并重启后,仍是从共享内存池中申请内存块,由于共享内存池中的内存块规格和内存块数量是预先配置好的,因此,不会出现其他进程申请内存块过多从而导致上述某所述一进程申请内存块失败的情况。
本发明实施例中,内存管理装置采用共享内存池进行内存块的统一规划,并通过进程的标识信息和互斥信号量,区分多进程对内存池中内存块的申请和释放,令多个进程对同一规格的内存块的访问互不干扰,这样,便可以实现内存的优化管理,既可以避免由于内存不足而反复向操作系统申请所带来的资源消耗,同时也能避免在操作系统产生大量的内存碎片,进而有效地提高了系统的内存利用率以及内存分配成功率。
附图说明
图1为现有技术下通用内存管理模式示意图;
图2为现有技术下内存池结构示意图
图3为本发明实施例中进行内存管理流程图;
图4为本发明实施例中内存管理装置内部逻辑结构示意图;
图5为本发明实施例中内存管理装置创建共享内存池流程图;
图6为本发明实施例中内存管理装置启动一进程响应内存调用指令流程图;
图7为本发明实施例中内存管理装置功能结构示意图。
具体实施方式
针对背景技术中描述的内存池存在的缺陷,本发明实施例中,提出了一种基于多进程系统的内存管理方法,该方法以整个操作系统(如linux操作系统)为单位(而不是以进程为单位进行内存管理),每个进程都通过这种内存管理方法统一申请和释放内存,达到内存的高效使用目的。
下面结合附图对本发明优选的实施方式进行详细说明。
参阅图3所示,本发明实施例中,内存管理装置进行内存管理的详细流程如下:
步骤300:在初始配置阶段,内存管理装置创建共享内存池,并按照预设的内存配置信息在该共享内存池中进行内存块规划。
本实施例中,在执行步骤300时,内存管理装置在初始配置阶段(如,初次启动、每次重启等等)时以整个操作系统为单位进行内存块的划分以创建共享内存池。例如,假设整个操作系统管理的物理内存的大小为M,那么内存管理装置将大小为M-N的内存划分为可分配内存(即将大小为M-N的内存归入共享内存池),其中,大小为N的内存是操作系统正常运行所需要的内存,接着,内存管理装置按照预设的内存配置信息(如,软件运行经验值)在共享内存池中设置每一类内存块规格以及每一类内存块规格对应的内存块数量,即对共享内存池中的内存块规格和内存块数量进行规划,从而可以对内存块数量作出最大化配置,以避免出现内存块不足时频繁向操作系统申请内存的情况,即可以避免发生对每个进程进行内存块规划时需要考虑系统余额不足的情况,以及避免需频繁考虑为每个进程划分多少内存块的问题,共享内存池的具体结构如图2所示。
当然,内存管理装置可以在初次启动时进行一次内存规划,并在后续重启阶段不再重新规划,除非接收到用户的规划指令,或者,内存管理装置也可以在初始启动时进行一次内存规划,并在后续每次重启时均进行一次内存规划,在此不再赘述。
步骤310:内存管理装置接收到内存调用指令时,选取一进程,并通过所述一进程在共享内存池中申请符合内存调用指令的相应规格的内存块,以及对应所述相应规格的内存块记录所述一进程的标识信息和互斥信号量,其中,互斥信号量用于表示某一规格的内存块当前已被占用且不能再被其他进程申请。
实际应用中,软件在运行过程中往往需要调用一定数量的内存,因此,软件启动后,应用的软件模块会向底层发送内存调用指令,该内存调用指令中携带应用类型标识,内存管理装置会根据内存调用指令,调用所述一进程选取所述相应规格的内存块,并对应选取的内存块记录所述一进程的标识信息互斥信号量。
本实施例中,所述一进程的标识信息采用进程端口号表示,具体如下:
参阅图4所示,本发明实施例中,操作系统内运行有多个进程,每个进程对应一个内存管理模块,本实施例中,称为“统一内存管理模块”,统一内存管理模块需要对应规划的内存块标记各内存块具体由哪个进程使用。较佳的,可以对内存块管理结构进行扩充,增加进程端口号(即进程的标识信息),具体实现方式如下:
另一方面,在共享内存池中也同样配置了互斥信号量,用于令多进程对内存块规格的申请和释放互不影响,即若某一规格的内存块被标记了互斥信号量,则说明此种规格的内存块当前已被一进程占用,那么其他进程则不能再申请此种规格的内存块直至互斥信号量被释放,从而令各个内存块规格的申请和释放互不影响。其具体实现方式如下:
基于上述实施例,相应的,内存管理装置在接收到所述一进程对应的内存释放指令时,会通过所述一进程释放所述相应规格的内存块,即释放对应所述相应规格的内存块记录所述一进程的标识信息和互斥信号量。
在上述实施例中,内存管理装置采用共享内存方式建立共享内存池,而统一内存管理模块以共享内存方式(如,linux操作系统的mmap函数处理)创建共享内存池,每个进程之间通过互斥方式进行内存块的申请和释放。
仍以上述所述一进程为例,实际应用中,若内存管理装置对应所述相应规格的内存块记录所述一进程的标识信息和互斥信号量后,在申请或释放指定数量的所述相应规格的内存块的过程中(即内存使用过程中)所述一进程发生故障,则在捕获系统的异常信号后,内存管理装置会采用信号处理函数将记录的所述一进程的标识信息和互斥信号量释放,从而避免了由于所述一进程故障而互斥信号量没有释放所导致的内存块管理被锁住的问题。
例如,内存管理装置检测到所述一进程发生故障后,会判断共享内存池中是否存在通过所述一进程申请但没有释放的互斥信号量,若有,则主动释放互斥信号量及所述一进程的进程端口号,从而确定所述一进程故障后其他进程仍能够进行所述相应规格的内存块的申请;否则,可以不执行释放操作。
实际应用中,多个进程或单个进程对共享内存池进行操作时,可能会因为代码读写问题导致内存使用越界,严重时会影响共享内存池中其他内存块,造成共享内存池管理混乱。例如,参阅图2所示,在规格为64字节的存储空间内,若某个buffer区中写入的代码量过多,则代码会写入buffer区之后的隔离区中,从而影响下一个buffer区的使用。为了避免出现这种情况,需要增加共享内存池的保护措施,内存管理装置若发现任意内存块的访问发生内存越界问题时,则拒绝本次访问操作并通过错误码返回失败提示。
例如:内存管理装置内部针对共享内存池管理提供内存使用函数(如,内存清0函数、内存拷贝函数、内存赋值函数……),内存管理装置对共享内存池中的内存块进行操作时必须使用这些函数处理,内存管理装置通过某所述一进程申请相应的内存块规格和内存块数量时,会采用上述这些函数判断每次读写的内存长度是否越界(即超过内存的buffer区域),并在确定越界时,终止读写内存的操作并直接向操作界面返回失败提示,以便向应用层的软件模块提醒内存的使用有问题。
需强调的是,本发明实施例中,互斥信号量的保护设计针对的是多个进程对同一规格的内存块的访问,而不同规格的内存块之间的访问则不受互斥信号量的约束。
例如:若内存管理装置通过进程A对规格为64字节的内存块进行申请,则内存管理装置在对应64字节的内存块记录进程A的进程端口号和互斥信号量后,其他进程便不能再申请使用规格为64的内存块,但可以申请使用其他规格(如、128字节、256字节……)的内存块。即多个进程之间,针对不同内存块规格的申请互不影响,而针对同一内存规格的申请则存在互斥,这样,可以令多个进程对内存块规格的访问效率,和现有的单个进程对内存块规格的访问效率相当。
下面通过几个具体的应用场景对上述实施例作出进一步详细说明。
本实施例中,内存管理装置以整个操作系统为单位进行共享内存池规划,规划出内存块的规格以及内存块的数量,假设具体的内存块规格示例如表1所示,
表1
内存块规格(字节) | 内存块数量(个) |
64 | 5000 |
128 | 10000 |
256 | 4000 |
… | … |
1024*1024 | 1000 |
… | … |
实际应用中,在多进程的操作系统内,内存管理装置会首先规划一个基准进程(basemng),并在该基准进程对应的统一内存管理模块初始化时进行整个系统的共享内存池的创建。具体参阅图5所示:
步骤500:内存管理装置确定对应基准进程的统一内存管理模块启动。
步骤510:内存管理装置通过基准进程对应的统一内存管理模块获取预设的内存配置信息。
实际应用中,内存管理装置获取的内存配置信息包含预设的能够用于创建共享内存池的的内存块规格、内存块数量等等。
步骤520:内存管理装置通过基准进程对应的统一内存管理模块,按照获得的内存配置信息所表征内存块规格和内存块数量从操作系统申请内存,创建共享内存池。
步骤530:内存管理装置将共享内存池中的各内存块列入空闲链表中。
本发明实施例中,内存管理装置创建共享内存池后,会将还未被进程获取的内存块列入空闲链表中(即内存块状态为空闲),而当内存块被进程申请后,内存管理装置将被进程占用的内存块列入忙链表(即内存块状态为忙),待内存块被进程释放后,再将内存块重新列入空闲链表。
本发明实施例中,在通过基准进程创建共享内存池后,内存管理装置在接收应用层的软件模块发送的内存调用指令时,会选取一进程进行响应,即选取所述一进程在共享内存池中申请符合内存调用指令的所述相应规格的内存块。其具体实现方式为:在启动所述一进程后,较佳的,内存管理装置会首先判断共享内存池是否已建立,若建立完成,则可以直接调用所述一进程响应响应应用层的软件模块发送的内存调用指令,若未创建完成,则等待共享内存池创建完成再调用所述一进程响应应用层的软件模块发送的内存调用指令。参阅图6所示,内存管理装置选取所述一进程响应内存调用指令的详细流程如下:
步骤600:内存管理装置启动所述一进程以响应内存调用指令。
步骤610:内存管理装置判断所述一进程是否为基准进程?若是,则者步骤620;否则,进行步骤650。
步骤620:内存管理装置判断共享内存池是否已建立?若是,则进行步骤630;否则,进行步骤640。
步骤630:内存管理装置释放进程端口号为基准流程的端口号且当前状态为忙的内存块。
内存管理装置在启动基准进程后,若获知共享内存池已建立,则说明基准进程可能为重新启动,那么在之前的流程中有可能内存管理装置已经通过基准进程在共享内存池中申请使用了部分内存块,为了避免这部分内存块被锁定,内存管理装置应当首先释放进程端口号为基准流程的端口号且当前状态为忙(即被列入忙链表)的内存块,较佳的,其释放操作具体为,在忙链表中获取进程端口号为基准进程端口号的内存块,将对应这部分内存块记录的基准进程的端口号和互斥信号号释放,并将这部分内存块列入空闲列表中。
步骤640;内存管理装置通过基准进程开始创建共享内存池,接着,执行步骤670。
步骤650:内存管理装置判断共享内存池是否已建立?若是,则进行步骤670;否则,进行步骤660。
步骤660:内存管理装置等待共享内存池创建完成,接着,执行步骤670。
步骤670:内存管理装置执行后续流程,即调用所述一进程在共享内存池中申请符合内存调用指令的所述相应规格的内存块。
基于上述各实施例,在实际应用中,无论所述一进程是基准进程还是非基准进程,在使用过程中均可能会发生故障,所述一进程发生故障后便需要释放掉通过该所述一进程申请使用的内存块,即释放对应所述相应规格的内存块记录的所述一进程的标识信息和互斥信号量。本实施例中,其具体的实现方式包含但不限于以下两种:
第一种方式为:若所述一进程为基准进程,则内存管理装置在所述一进程发生故障时重启所述一进程,以及在重启后,且确定已经建立共享内存池时,通过所述一进程释放对应所述相应规格的内存块记录的所述一进程的标识信息和互斥信号量、
例如,内存管理装置在确定作为基准进程的所述一进程故障后,通过所述一进程对应的统一内存管理模块将其重启,并在重启后判断共享内存池是否已经创建,以及在确定共享内存池已建立时,通过所述一进程对应的统一内存管理模块释放进程端口号为基准进程的端口号的内存块及相应的互斥信号量,以防止内存泄露。
第二种方式为:若所述一进程为非基准进程,则内存管理装置在所述一进程发生故障时重启所述一进程,以及在重启后,通过基准进程释放对应所述相应规格的内存块记录的所述一进程的标识信息和互斥信号量。
例如,内存管理装置在确定作为非基准进程的所述一进程故障后,通过基准进程对应的统一内存管理模块对所述一进程进行重启,并在重启后通过基准进程对应的统一内存管理模块释放进程端口号为基准进程的端口号的内存块及相应的互斥信号量,以防止内存泄露。
参阅图7所示,本发明实施例中,内存管理装置包括配置单元70和处理单元71,实际应用中,内存管理装置可以是独立网元,也可以是系统服务器或服务器集群或智能终端上的某一功能模块,其中,包括:
配置单元70,用于在初始配置阶段,创建共享内存池,并按照预设的内存配置信息在共享内存池中进行内存块规划;
实际应用中,配置单元70的功能可以由基准进程对应的统一内存管理模块完成。
处理单元71,用于在接收到内存调用指令时,选取一进程,并通过所述一进程在共享内存池中申请符合内存调用指令的所述相应规格的内存块,以及对应所述相应规格的内存块记录所述一进程的标识信息和互斥信号量,其中,互斥信号量用于表示某一规格的内存块当前已被占用且不能再被其他进程申请。
实际应用中,处理单元71的功能可以由基准进程对应的统一内存管理模块和非基准进程对应的统一内存管理模块共同完成。
优选的,配置单元70创建共享内存池,并按照预设的内存配置信息在共享内存池中进行内存块规划,包括:
配置单元70向操作系统申请大小为M-N的内存,其中,M为操作系统管理的物理内存的大小,N为操作系统正常运行所需内存的大小;
配置单元70将大小为M-N的内存列入共享内存池中,并按照预设的内存配置信息在共享内存池中设置每一类内存块规格以及每一类内存块规格对应的内存块数量。
优选的,处理单元71进一步用于:
处理单元71通过所述一进程在共享内存池中申请符合内存调用指令的所述相应规格的内存块后,在使用内存块的过程中,若确定读写的内存长度超过设定的内存区域,则终止当前操作并直接向操作界面返回失败提示。
优选的,处理单元71进一步用于:
处理单元71接收到所述一进程对应的内存释放指令时,通过所述一进程释放对应所述相应规格的内存块记录的所述一进程的标识信息和互斥信号量。
优选的,配置单元70具体用于:
配置单元70通过规划的基准进程创建共享内存池。
优选的,处理单元71接收到内存调用指令时,选取所述一进程,并通过所述一进程在共享内存池中申请符合内存调用指令的所述相应规格的内存块,包括:
处理单元71接收到内存调用指令后,启动所述一进程;
若所述一进程为基准进程,则处理单元71判断共享内存池是否已建立,若是,则释放已被申请使用且对应记录的进程的标识信息为基准进程的标识信息的内存块,以及通过所述一进程在共享内存池中申请符合内存调用指令的所述相应规格的内存块;否则,建立共享内存池,并通过所述一进程在共享内存池中申请符合内存调用指令的所述相应规格的内存块
若所述一进程为非基准进程,则处理单元71判断共享内存池是否已建立,若是,则通过所述一进程在共享内存池中申请符合内存调用指令的所述相应规格的内存块;否则,待共享内存池建立完成后,再通过所述一进程在共享内存池中申请符合内存调用指令的所述相应规格的内存块。
优选的,处理单元71进一步用于:
处理单元71对应所述相应规格的内存块记录所述一进程的标识信息和互斥信号量后,若所述一进程发生故障,则释放对应所述相应规格的内存块记录的所述一进程的标识信息和互斥信号量。
优选的,若所述一进程发生故障,则处理单元71释放对应所述相应规格的内存块记录的所述一进程的标识信息和互斥信号量,包括:
若所述一进程为基准进程,则处理单元71在确定所述一进程发生故障时重启所述一进程,以及在重启后,且确定已经建立共享内存池时,通过所述一进程释放对应所述相应规格的内存块记录的所述一进程的标识信息和互斥信号量;
若所述一进程为非基准进程,则处理单元71在确定所述一进程发生故障时重启所述一进程,以及在重启后,通过基准进程释放对应所述相应规格的内存块记录的所述一进程的标识信息和互斥信号量。
综上所述,本发明实施例中,内存管理装置采用共享内存池进行内存块的统一规划,并通过进程的标识信息和互斥信号量,区分多进程对内存池中内存块的申请和释放,令多个进程对同一规格的内存块的访问互不干扰,这样,便可以实现内存的优化管理,既可以避免由于内存不足而反复向操作系统申请所带来的资源消耗,同时也能避免在操作系统产生大量的内存碎片,进而有效地提高了系统的内存利用率以及内存分配成功率。
具体的,
本发明实施例中,在初始配置阶段,内存管理装置可以基于申请到的全部系统内存在创建的共享内存池中列举了各类内存块规格,这样,当软件模块通过所述一进程申请内存块时,内存管理装置可以根据软件模块的需要调用符合使用需求的内存,不会存在调用不到合适的内存块的情况。
进一步地,内存池中的内存块数量已进行了最大化设置,因而内存管理装置无需频繁从操作系统中申请内存,从而减少了不必要的操作,节省了系统资源。
进一步地,软件模块在内存块使用完成后会通过相应进程将内存块释放至共享内存池中,这样,其他进程可以继续使用这些内存块,不会降低操作系统中的可使用内存,从而避免出现各进程之间忙闲不均的问题。
进一步地,对于支持多进程的操作系统(如Linux,Unix等等),通过进程的标识信息和互斥信号量,区分多进程对内存池中内存块的申请和释放,令多个进程对同一规格的内存块的访问互不干扰
进一步地,各个内存块在共享内存池中进行统一管理和统一调度,不会存在长期不使用的状况,避免了内存块的浪费。
进一步地,某一个进程出现故障并重启后,仍是从共享内存池中申请内存块,由于共享内存池中的内存块规格和内存块数量是预先配置好的,因此,不会出现其他进程申请内存块过多从而导致上述某一进程申请内存块失败的情况。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
显然,本领域的技术人员可以对本发明实施例进行各种改动和变型而不脱离本发明实施例的精神和范围。这样,倘若本发明实施例的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
Claims (14)
1.一种多进程系统中的内存管理方法,其特征在于,包括:
在初始配置阶段,创建共享内存池,并按照预设的内存配置信息在所述共享内存池中进行内存块规划;
接收到内存调用指令时,选取一进程,并通过所述一进程在所述共享内存池中申请符合内存调用指令的相应规格的内存块,包括:接收到内存调用指令后,启动所述一进程;若所述一进程为基准进程,则判断共享内存池是否已建立,若是,则释放已被申请使用且对应记录的进程的标识信息为基准进程的标识信息的内存块,以及通过所述一进程在所述共享内存池中申请符合内存调用指令的相应规格的内存块;否则,建立共享内存池,并通过所述一进程在所述共享内存池中申请符合内存调用指令的相应规格的内存块;若所述一进程为非基准进程,则判断共享内存池是否已建立,若是,则通过所述一进程在所述共享内存池中申请符合内存调用指令的相应规格的内存块;否则,待共享内存池建立完成后,再通过所述一进程在所述共享内存池中申请符合内存调用指令的相应规格的内存块;以及
对应所述相应规格的内存块记录所述一进程的标识信息和互斥信号量,其中,所述互斥信号量用于表示某一规格的内存块当前已被占用且不能再被其他进程申请。
2.如权利要求1所述的方法,其特征在于,创建共享内存池,并按照预设的内存配置信息在所述共享内存池中进行内存块规划,包括:
向操作系统申请大小为M-N的内存,其中,M为操作系统管理的物理内存的大小,N为操作系统正常运行所需内存的大小;
将大小为M-N的内存列入共享内存池中,并按照预设的内存配置信息在共享内存池中设置每一类内存块规格以及每一类内存块规格对应的内存块数量。
3.如权利要求1所述的方法,其特征在于,进一步包括:
通过所述一进程在所述共享内存池中申请符合内存调用指令的相应规格的内存块后,在使用所述内存块的过程中,若确定读写的内存长度超过设定的内存区域,则终止当前操作并直接向操作界面返回失败提示。
4.如权利要求1所述的方法,其特征在于,进一步包括:
接收到所述一进程对应的内存释放指令时,通过所述一进程释放对应所述相应规格的内存块记录的所述一进程的标识信息和互斥信号量。
5.如权利要求1-4任一项所述的方法,其特征在于,进一步包括:
通过规划的基准进程创建所述共享内存池。
6.如权利要求5所述的方法,其特征在于,进一步包括:
对应所述相应规格的内存块记录所述一进程的标识信息和互斥信号量后,若所述一进程发生故障,则释放对应所述相应规格的内存块记录的所述一进程的标识信息和互斥信号量。
7.如权利要求6所述的方法,其特征在于,若所述一进程发生故障,则释放对应所述相应规格的内存块记录的所述一进程的标识信息和互斥信号量,包括:
若所述一进程为基准进程,则在确定所述一进程发生故障时重启所述一进程,以及在重启后,且确定已经建立共享内存池时,通过所述一进程释放对应所述相应规格的内存块记录的所述一进程的标识信息和互斥信号量;
若所述一进程为非基准进程,则在确定所述一进程发生故障时重启所述一进程,以及在重启后,通过基准进程释放对应所述相应规格的内存块记录的所述一进程的标识信息和互斥信号量。
8.一种多进程系统中的内存管理装置,其特征在于,包括:
配置单元,用于在初始配置阶段,创建共享内存池,并按照预设的内存配置信息在所述共享内存池中进行内存块规划;
处理单元,用于在接收到内存调用指令时,选取一进程,并通过所述一进程在所述共享内存池中申请符合内存调用指令的相应规格的内存块,以及对应所述相应规格的内存块记录所述一进程的标识信息和互斥信号量,其中,所述互斥信号量用于表示某一规格的内存块当前已被占用且不能再被其他进程申请;
其中,所述处理单元接收到内存调用指令时,选取所述一进程,并通过所述一进程在所述共享内存池中申请符合内存调用指令的相应规格的内存块,包括:
所述处理单元接收到内存调用指令后,启动所述一进程;若所述一进程为基准进程,则所述处理单元判断共享内存池是否已建立,若是,则释放已被申请使用且对应记录的进程的标识信息为基准进程的标识信息的内存块,以及通过所述一进程在所述共享内存池中申请符合内存调用指令的相应规格的内存块;否则,建立共享内存池,并通过所述一进程在所述共享内存池中申请符合内存调用指令的相应规格的内存块若所述一进程为非基准进程,则所述处理单元判断共享内存池是否已建立,若是,则通过所述一进程在所述共享内存池中申请符合内存调用指令的相应规格的内存块;否则,待共享内存池建立完成后,再通过所述一进程在所述共享内存池中申请符合内存调用指令的相应规格的内存块。
9.如权利要求8所述的装置,其特征在于,所述配置单元创建共享内存池,并按照预设的内存配置信息在所述共享内存池中进行内存块规划,包括:
所述配置单元向操作系统申请大小为M-N的内存,其中,M为操作系统管理的物理内存的大小,N为操作系统正常运行所需内存的大小;
所述配置单元将大小为M-N的内存列入共享内存池中,并按照预设的内存配置信息在共享内存池中设置每一类内存块规格以及每一类内存块规格对应的内存块数量。
10.如权利要求9所述的装置,其特征在于,所述处理单元进一步用于:
所述处理单元通过所述一进程在所述共享内存池中申请符合内存调用指令的相应规格的内存块后,在使用所述内存块的过程中,若确定读写的内存长度超过设定的内存区域,则终止当前操作并直接向操作界面返回失败提示。
11.如权利要求8所述的装置,其特征在于,所述处理单元进一步用于:
所述处理单元接收到所述一进程对应的内存释放指令时,通过所述一进程释放对应所述相应规格的内存块记录的所述一进程的标识信息和互斥信号量。
12.如权利要求8-11任一项所述的装置,其特征在于,所述配置单元具体用于:
所述配置单元通过规划的基准进程创建所述共享内存池。
13.如权利要求12所述的装置,其特征在于,所述处理单元进一步用于:
所述处理单元对应所述相应规格的内存块记录所述一进程的标识信息和互斥信号量后,若所述一进程发生故障,则释放对应所述相应规格的内存块记录的所述一进程的标识信息和互斥信号量。
14.如权利要求13所述的装置,其特征在于,若所述一进程发生故障,则所述处理单元释放对应所述相应规格的内存块记录的所述一进程的标识信息和互斥信号量,包括:
若所述一进程为基准进程,则所述处理单元在确定所述一进程发生故障时重启所述一进程,以及在重启后,且确定已经建立共享内存池时,通过所述一进程释放对应所述相应规格的内存块记录的所述一进程的标识信息和互斥信号量;
若所述一进程为非基准进程,则所述处理单元在确定所述一进程发生故障时重启所述一进程,以及在重启后,通过基准进程释放对应所述相应规格的内存块记录的所述一进程的标识信息和互斥信号量。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310338075.6A CN103425592B (zh) | 2013-08-05 | 2013-08-05 | 一种多进程系统中的内存管理方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310338075.6A CN103425592B (zh) | 2013-08-05 | 2013-08-05 | 一种多进程系统中的内存管理方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103425592A CN103425592A (zh) | 2013-12-04 |
CN103425592B true CN103425592B (zh) | 2016-08-10 |
Family
ID=49650371
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310338075.6A Active CN103425592B (zh) | 2013-08-05 | 2013-08-05 | 一种多进程系统中的内存管理方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103425592B (zh) |
Families Citing this family (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103744736B (zh) * | 2014-01-09 | 2018-10-02 | 深圳Tcl新技术有限公司 | 内存管理的方法及Linux终端 |
EP2963558A1 (en) * | 2014-06-26 | 2016-01-06 | Wipro Limited | Systems and methods for performing memory management in a distributed environment |
CN104571953B (zh) * | 2014-12-25 | 2017-10-17 | 珠海金山网络游戏科技有限公司 | 一种扩展进程中内存地址控制的方法 |
CN107209716B (zh) * | 2015-02-09 | 2020-04-21 | 华为技术有限公司 | 内存管理装置和方法 |
CN104951370B (zh) * | 2015-06-02 | 2018-08-21 | 大唐移动通信设备有限公司 | 一种内存管理方法及装置 |
CN106294059A (zh) * | 2015-06-26 | 2017-01-04 | 中兴通讯股份有限公司 | 网管系统中进程的恢复方法及装置 |
CN105975341A (zh) * | 2016-04-12 | 2016-09-28 | 苏州万特锐仪器有限公司 | 面向多核处理器的内存管理系统 |
CN106294731B (zh) * | 2016-08-09 | 2019-05-28 | 四川网达科技有限公司 | 入库数据的管理方法及装置 |
CN107133103B (zh) * | 2017-05-05 | 2019-01-01 | 第四范式(北京)技术有限公司 | 用于数据流式计算的内存管理系统及其方法 |
CN107766153A (zh) * | 2017-10-17 | 2018-03-06 | 华为技术有限公司 | 一种内存管理方法及装置 |
CN110858162B (zh) * | 2018-08-24 | 2022-09-23 | 华为技术有限公司 | 内存管理方法及装置、服务器 |
CN110231989A (zh) * | 2019-05-14 | 2019-09-13 | 深圳市亿联智能有限公司 | 一种嵌入式智能终端动态内存优化方法 |
CN111857852B (zh) * | 2020-07-28 | 2022-05-27 | Oppo广东移动通信有限公司 | 驱动系统、信息处理方法、电子设备及存储介质 |
CN112214313B (zh) * | 2020-09-22 | 2024-09-27 | 深圳云天励飞技术股份有限公司 | 内存分配方法及相关设备 |
CN113076194A (zh) * | 2021-03-29 | 2021-07-06 | Oppo广东移动通信有限公司 | 内存资源分配方法、装置、终端和存储介质 |
CN113467930B (zh) * | 2021-05-31 | 2023-04-14 | 翱捷科技股份有限公司 | 一种硬件管理共享内存的处理方法及装置 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1722106A (zh) * | 2004-07-13 | 2006-01-18 | 中兴通讯股份有限公司 | 一种嵌入式实时操作系统中内存分配的方法 |
CN101430655A (zh) * | 2008-11-19 | 2009-05-13 | 北京飞天诚信科技有限公司 | 模拟全局共享内存的方法和装置 |
CN102915276A (zh) * | 2012-09-25 | 2013-02-06 | 武汉邮电科学研究院 | 一种用于嵌入式系统的内存控制方法 |
CN103136110A (zh) * | 2013-02-18 | 2013-06-05 | 华为技术有限公司 | 内存管理方法、内存管理装置及numa系统 |
US8473692B2 (en) * | 2010-10-27 | 2013-06-25 | International Business Machines Corporation | Operating system image management |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8898385B2 (en) * | 2011-09-09 | 2014-11-25 | Lsi Corporation | Methods and structure for load balancing of background tasks between storage controllers in a clustered storage environment |
-
2013
- 2013-08-05 CN CN201310338075.6A patent/CN103425592B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1722106A (zh) * | 2004-07-13 | 2006-01-18 | 中兴通讯股份有限公司 | 一种嵌入式实时操作系统中内存分配的方法 |
CN101430655A (zh) * | 2008-11-19 | 2009-05-13 | 北京飞天诚信科技有限公司 | 模拟全局共享内存的方法和装置 |
US8473692B2 (en) * | 2010-10-27 | 2013-06-25 | International Business Machines Corporation | Operating system image management |
CN102915276A (zh) * | 2012-09-25 | 2013-02-06 | 武汉邮电科学研究院 | 一种用于嵌入式系统的内存控制方法 |
CN103136110A (zh) * | 2013-02-18 | 2013-06-05 | 华为技术有限公司 | 内存管理方法、内存管理装置及numa系统 |
Also Published As
Publication number | Publication date |
---|---|
CN103425592A (zh) | 2013-12-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103425592B (zh) | 一种多进程系统中的内存管理方法及装置 | |
US9032180B2 (en) | Managing CPU resources for high availability micro-partitions | |
CN101702138A (zh) | 一种内存管理方法、系统及服务器 | |
CN108334396A (zh) | 一种数据处理方法和装置、资源组的创建方法和装置 | |
CN105975327A (zh) | 在虚拟环境下减小虚拟机的抢占的方法和计算机系统 | |
CN112579251B (zh) | 虚拟机内存管理的方法及设备 | |
US20140281289A1 (en) | Managing cpu resources for high availability micro-partitions | |
WO2017050064A1 (zh) | 共享内存数据库的内存管理方法及装置 | |
US9158470B2 (en) | Managing CPU resources for high availability micro-partitions | |
CN106550014A (zh) | 服务器集群中的节点升级方法及装置 | |
CN109213429B (zh) | 存储管理方法和设备 | |
CN104881241A (zh) | 交换操作的实现方法和装置 | |
CN104461705B (zh) | 一种业务访问的方法及存储控制器、集群存储系统 | |
CN110806942B (zh) | 数据处理的方法和装置 | |
CN116501259A (zh) | 磁盘组双活同步方法、装置、计算机设备及存储介质 | |
CN103544069A (zh) | 一区多用创建容错型多启系统盘 | |
CN103246545A (zh) | 面向多虚拟域可定制的PICe外设设备树生成方法 | |
CN105119765B (zh) | 一种智能处理故障体系架构 | |
CN104615383A (zh) | 一种基于虚拟磁盘的软件运行方法及装置 | |
CN105512091A (zh) | 一种内存分配方法及装置 | |
CN109002286A (zh) | 基于同步编程的数据异步处理方法及装置 | |
CN103631831A (zh) | 一种数据备份方法及装置 | |
CN104407806A (zh) | 独立磁盘冗余阵列组硬盘信息的修改方法和装置 | |
CN102541743B (zh) | 用于存储管理的方法、设备和系统 | |
CN111176559A (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 |