G06F12/02 G06F9/44
1.一种多进程系统中的内存管理方法,其特征在于,包括:
在初始配置阶段,创建共享内存池,并按照预设的内存配置信息在所述共 享内存池中进行内存块规划;
接收到内存调用指令时,选取一进程,并通过所述一进程在所述共享内存 池中申请符合内存调用指令的相应规格的内存块,以及对应所述相应规格的内 存块记录所述一进程的标识信息和互斥信号量,其中,所述互斥信号量用于表 示某一规格的内存块当前已被占用且不能再被其他进程申请。
2.如权利要求1所述的方法,其特征在于,创建共享内存池,并按照预 设的内存配置信息在所述共享内存池中进行内存块规划,包括:
向操作系统申请大小为M-N的内存,其中,M为操作系统管理的物理内 存的大小,N为操作系统正常运行所需内存的大小;
将大小为M-N的内存列入共享内存池中,并按照预设的内存配置信息在 共享内存池中设置每一类内存块规格以及每一类内存块规格对应的内存块数 量。
3.如权利要求1所述的方法,其特征在于,进一步包括:
通过所述一进程在所述共享内存池中申请符合内存调用指令的相应规格 的内存块后,在使用所述内存块的过程中,若确定读写的内存长度超过设定的 内存区域,则终止当前操作并直接向操作界面返回失败提示。
4.如权利要求1所述的方法,其特征在于,进一步包括:
接收到所述一进程对应的内存释放指令时,通过所述一进程释放对应所述 相应规格的内存块记录的所述一进程的标识信息和互斥信号量。
5.如权利要求1-4任一项所述的方法,其特征在于,进一步包括:
通过规划的基准进程创建所述共享内存池。
6.如权利要求5所述的方法,其特征在于,接收到内存调用指令时,选 取一进程,并通过所述一进程在所述共享内存池中申请符合内存调用指令的相 应规格的内存块,包括:
接收到内存调用指令后,启动所述一进程;
若所述一进程为基准进程,则判断共享内存池是否已建立,若是,则释放 已被申请使用且对应记录的进程的标识信息为基准进程的标识信息的内存块, 以及通过所述一进程在所述共享内存池中申请符合内存调用指令的相应规格 的内存块;否则,建立共享内存池,并通过所述一进程在所述共享内存池中申 请符合内存调用指令的相应规格的内存块;
若所述一进程为非基准进程,则判断共享内存池是否已建立,若是,则通 过所述一进程在所述共享内存池中申请符合内存调用指令的相应规格的内存 块;否则,待共享内存池建立完成后,再通过所述一进程在所述共享内存池中 申请符合内存调用指令的相应规格的内存块。
7.如权利要求5所述的方法,其特征在于,进一步包括:
对应所述相应规格的内存块记录所述一进程的标识信息和互斥信号量后, 若所述一进程发生故障,则释放对应所述相应规格的内存块记录的所述一进程 的标识信息和互斥信号量。
8.如权利要求7所述的方法,其特征在于,若所述一进程发生故障,则 释放对应所述相应规格的内存块记录的所述一进程的标识信息和互斥信号量, 包括:
若所述一进程为基准进程,则在确定所述一进程发生故障时重启所述一进 程,以及在重启后,且确定已经建立共享内存池时,通过所述一进程释放对应 所述相应规格的内存块记录的所述一进程的标识信息和互斥信号量;
若所述一进程为非基准进程,则在确定所述一进程发生故障时重启所述一 进程,以及在重启后,通过基准进程释放对应所述相应规格的内存块记录的所 述一进程的标识信息和互斥信号量。
9.一种多进程系统中的内存管理装置,其特征在于,包括:
配置单元,用于在初始配置阶段,创建共享内存池,并按照预设的内存配 置信息在所述共享内存池中进行内存块规划;
处理单元,用于在接收到内存调用指令时,选取一进程,并通过所述一进 程在所述共享内存池中申请符合内存调用指令的相应规格的内存块,以及对应 所述相应规格的内存块记录所述一进程的标识信息和互斥信号量,其中,所述 互斥信号量用于表示某一规格的内存块当前已被占用且不能再被其他进程申 请。
10.如权利要求9所述的装置,其特征在于,所述配置单元创建共享内存 池,并按照预设的内存配置信息在所述共享内存池中进行内存块规划,包括:
所述配置单元向操作系统申请大小为M-N的内存,其中,M为操作系统 管理的物理内存的大小,N为操作系统正常运行所需内存的大小;
所述配置单元将大小为M-N的内存列入共享内存池中,并按照预设的内 存配置信息在共享内存池中设置每一类内存块规格以及每一类内存块规格对 应的内存块数量。
11.如权利要求9所述的装置,其特征在于,所述处理单元进一步用于:
所述处理单元通过所述一进程在所述共享内存池中申请符合内存调用指 令的相应规格的内存块后,在使用所述内存块的过程中,若确定读写的内存长 度超过设定的内存区域,则终止当前操作并直接向操作界面返回失败提示。
12.如权利要求9所述的装置,其特征在于,所述处理单元进一步用于:
所述处理单元接收到所述一进程对应的内存释放指令时,通过所述一进程 释放对应所述相应规格的内存块记录的所述一进程的标识信息和互斥信号量。
13.如权利要求9-12任一项所述的装置,其特征在于,所述配置单元具 体用于:
所述配置单元通过规划的基准进程创建所述共享内存池。
14.如权利要求13所述的装置,其特征在于,所述处理单元接收到内存 调用指令时,选取所述一进程,并通过所述一进程在所述共享内存池中申请符 合内存调用指令的相应规格的内存块,包括:
所述处理单元接收到内存调用指令后,启动所述一进程;
若所述一进程为基准进程,则所述处理单元判断共享内存池是否已建立, 若是,则释放已被申请使用且对应记录的进程的标识信息为基准进程的标识信 息的内存块,以及通过所述一进程在所述共享内存池中申请符合内存调用指令 的相应规格的内存块;否则,建立共享内存池,并通过所述一进程在所述共享 内存池中申请符合内存调用指令的相应规格的内存块
若所述一进程为非基准进程,则所述处理单元判断共享内存池是否已建 立,若是,则通过所述一进程在所述共享内存池中申请符合内存调用指令的相 应规格的内存块;否则,待共享内存池建立完成后,再通过所述一进程在所述 共享内存池中申请符合内存调用指令的相应规格的内存块。
15.如权利要求13所述的装置,其特征在于,所述处理单元进一步用于:
所述处理单元对应所述相应规格的内存块记录所述一进程的标识信息和 互斥信号量后,若所述一进程发生故障,则释放对应所述相应规格的内存块记 录的所述一进程的标识信息和互斥信号量。
16.如权利要求15所述的装置,其特征在于,若所述一进程发生故障, 则所述处理单元释放对应所述相应规格的内存块记录的所述一进程的标识信 息和互斥信号量,包括:
若所述一进程为基准进程,则所述处理单元在确定所述一进程发生故障时 重启所述一进程,以及在重启后,且确定已经建立共享内存池时,通过所述一 进程释放对应所述相应规格的内存块记录的所述一进程的标识信息和互斥信 号量;
若所述一进程为非基准进程,则所述处理单元在确定所述一进程发生故障 时重启所述一进程,以及在重启后,通过基准进程释放对应所述相应规格的内 存块记录的所述一进程的标识信息和互斥信号量。
本发明涉及内存管理技术,特别涉及一种多进程系统中的内存管理方法及 装置。
在操作系统中,当运行软件产品时,通常会涉及对内存的操作。早期的操 作系统中,由软件模块直接对操作系统进行内存的申请和释放,这样长期运行 会在操作系统内产生内存碎片从而导致后续申请内存失败。为了避免这种情 况,添加了内存管理模块,内存管理模块在操作系统之上封装一层内存管理, 内存管理模块初始化时根据配置的内存块规格、内存块数量从操作系统申请内 存创建内存池(即内存块的管理集合)。软件模块申请内存时直接从内存池申 请,软件模块释放内存时将内存释放到内存池。
采用内存池方式,是通过预先配置一定数目的内存块,并对这些内存块进 行管理,解决了频繁向系统申请、释放内存的问题。具体实现方式如下。
参阅图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、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产 品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和 /或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/ 或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入 式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算 机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一 个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设 备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中 的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个 流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使 得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处 理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个 流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基 本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要 求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
显然,本领域的技术人员可以对本发明实施例进行各种改动和变型而不脱 离本发明实施例的精神和范围。这样,倘若本发明实施例的这些修改和变型属 于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和 变型在内。
本文发布于:2023-04-14 14:13:07,感谢您对本站的认可!
本文链接:https://patent.en369.cn/patent/3/86658.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |