G06F12/06
1.一种中间件内存管理的方法,其特征在于包括以下步骤:
1)中间件应用系统启动,根据配 获取一块内存区域,并初始化所述内 存区域;初始化过程包括首先 所述内存区域分为结构化区和扩展区,再 结构化区分为多个固定容量大小的存储单元,并设有结构化区总体头部信息, 保存该区的存储单元信息,而在扩展区设有扩展区总体头部信息,在所述扩 展区总体头部信息中包括空闲单元链表和已用单元链表;
2)运行时,当有模块根据需要在所述内存区域内申请一定大小的内存时, 需要进行内存分配,内存分配过程包括:
判断的步骤,即首先判断所申请大小是否超过结构化区存储单元最大单 元临界值,
分配的步骤,即判断后如大小没有超过,则在结构化区中,按照申请内 存的大小查空闲的存储单元,如到则分配成功,如没有到或所申请大 小超过结构化区存储单元最大单元临界值,则在扩展区中查,从空闲单元 链表中到一个大小足够的单元,并 到的单元拆分成两个,一个按照申 请的大小响应这次申请,放入已用单元链表,另一个保留在空闲单元链表, 而如果到的这个单元大小等于申请内存的大小,则不用拆分, 接放入已 用单元链表,如从空闲单元链表中没有到大小足够的单元,则分配失败,
响应的步骤,即如果分配成功,则返回可用的存储单元的地址,如分配 失败,则返回空值;
3)步骤2中所述可用的存储单元使用完毕后,需要释放,内存释放的过 程包括:
判断的步骤,根据传入的地址判断属于结构化区还是扩展区,
释放的步骤,如属于结构化区,则更新结构化区的头部信息, 该存储 单元 为空闲状态,如属于扩展区,则 该存储单元移出已用单元链表,并 查看该存储单元是否有相邻的空闲单元,如有相邻的空闲单元,则 该存储 单元和相邻的空闲单元合并为一个单元,并修改空闲单元链表,更新扩展区 的头部信息。
4)当应用系统停止,清除所述内存区域的内容。
2.如权利要求1所述的中间件内存管理的方法,其特征在于:所述结构 化区的多个固定容量大小的存储单元分别包括多种不同的容量大小,每种容 量大小的存储单元有多个。
3.如权利要求2所述的中间件内存管理的方法,其特征在于:所述多种 容量大小的存储单元中,相同容量大小的多个存储单元位于同一存储区域, 并设有区域头部信息。
5.如权利要求3所述的中间件内存管理的方法,其特征在于:所述区域 头部信息保存有该区域的存储单元信息和锁信息。
6.如权利要求3所述的中间件内存管理的方法,其特征在于:所述区域 头部信息保存有区域内各单元的使用者ID信息和使用时间信息。
8.如权利要求6或7所述的中间件内存管理的方法,其特征在于:所述 中间件包括管理模块,所述管理模块定时检查存储单元的使用者ID信息和使 用时间信息,判断该单元是否超出使用期限, 长时间不释放并且使用者模 块已经异常退出的存储单元进行释放。
4.如权利要求2或3所述的中间件内存管理的方法,其特征在于:所述 多种容量大小的存储单元的容量大小为按照倍数递增。
7.如权利要求1所述的中间件内存管理的方法,其特征在于:所述扩展 区的存储单元生成时设有单元头部信息,所述单元头部信息或包括该单元的 使用者ID信息和使用时间信息。
本发明涉及系统开发工作中的内存管理方法,尤其涉及在产品开发尤其是中间件的开发过程中的内存管理方法。
内存管理是很多系统开发工作需要考虑的问题,能够高效稳定的管理内存是一个系统可靠运行的前提条件。
而目前已有的内存管理系统的实现方案中,主要考虑了内存管理的以下几个方面:
1、建立内存物理地址和逻辑地址的映射关系,对内存物理页面信息的维护等。这种管理系统涉及到硬件层面,主要用于嵌入式系统的开发。
2、对内存访问的保护措施,主要是考虑对越界访问内存时需要采取的措施,防止缓冲区溢出的漏洞。
3、对大量小块内存分配的管理方案,防止产生大量的内存碎片。
4、针对特定领域的内存管理方案,如音频视频解码过程、图象处理过程、打印过程、网络通信等领域。
但是在中间件的开发过程中,多个模块之间需要频繁的共享数据,且对性能有较高的要求,没有一种现有的内存管理的方案,能为中间件的开发提供一种高效稳定的访问内存的方式,并能完成并发访问数据时所需的同步数据的工作。
本发明所要解决的技术问题是提供一种中间件内存管理的方法,解决现在内存管理的方法不能满足中间件内存管理高效稳定需要的缺陷。
技术方案
一种中间件内存管理的方法,其特征在于包括以下步骤:
1)中间件应用系统启动,根据配 获取一块内存区域,并初始化所述内存区域;初始化过程包括首先 所述内存区域分为结构化区和扩展区,再 结构化区分为多个固定容量大小的存储单元,并设有结构化区总体头部信息,保存该区的存储单元信息,而在扩展区设有扩展区总体头部信息,在所述扩展区总体头部信息中包括空闲单元链表和已用单元链表;
2)运行时,当有模块根据需要在所述内存区域内申请一定大小的内存时,需要进行内存分配,分配过程包括:
判断的步骤,即首先判断所申请大小是否超过结构化区存储单元最大单 元临界值,
分配的步骤,即判断后如大小没有超过,则在结构化区中,按照申请内存的大小查空闲的存储单元,如到则分配成功,如没有到或所申请大小超过结构化区存储单元最大单元临界值,则在扩展区中查,从空闲单元链表中到一个大小足够的单元,并 到的单元拆分成两个,一个按照申请的大小响应这次申请,放入已用单元链表,另一个保留在空闲单元链表,而如果到的这个单元大小等于申请内存的大小,则不用拆分, 接放入已用单元链表,如从空闲单元链表中没有到大小足够的单元,则分配失败,
响应的步骤,即如果分配成功,则返回可用的存储单元的地址,如分配失败,则返回空值;
3)步骤2中所述可用的存储单元使用完毕后,需要释放,内存释放的过程包括:
判断的步骤,根据传入的地址判断属于结构化区还是扩展区,
释放的步骤,如属于结构化区,则更新结构化区的头部信息, 该存储单元 为空闲状态,如属于扩展区,则 该存储单元移出已用单元链表,并查看该存储单元是否有相邻的空闲单元,如有相邻的空闲单元,则 该存储单元和相邻的空闲单元合并为一个单元,并修改空闲单元链表,更新扩展区的头部信息。
4)当应用系统停止,清除所述内存区域的内容。
进一步,所述结构化区的多个固定容量大小的存储单元分别包括多种不同的容量大小,每种容量大小的存储单元有多个。
所述多种容量大小的存储单元中,相同容量大小的多个存储单元位于同一存储区域,并设有区域头部信息。
所述多种容量大小的存储单元的容量大小为按照倍数递增。
所述区域头部信息保存有该区域的存储单元信息和锁信息。
所述区域头部信息保存有区域内各单元的使用者ID信息和使用时间信息。
进一步,所述扩展区的存储单元生成时设有单元头部信息,所述单元头部信息或包括该单元的使用者ID信息和使用时间信息。
进一步,所述中间件包括管理模块,所述管理模块定时检查存储单元的使用者ID信息和使用时间信息,判断该单元是否超出使用期限, 长时间不释放并且使用者模块已经异常退出的存储单元进行释放。
有益效果
本发明实现了内存高效稳定的并发访问,为应用系统开发时存在的内存管理的问题提供了一种通用的解决办法,简化了开发工作。而且通过结合内 存区域的结构化区和扩展区的方式,解决了小块内存申请时的性能问题,同时支持大块内存的申请,并减少了内存碎片的产生。同时,通过共享内存及定时检查的方式,解决了内存使用的高效可靠性问题。
图1为本发明中内存分配过程示意框图;
图2为本发明中内存释放过程示意框图;
图3为本发明中结构化区存储单元示意图;
图4为本发明中扩展区存储单元示意图;
图5为本发明中扩展区存储单元拆分示意图;
图6为本发明中扩展区存储单元合并示意图。
下面结合具体实施例和附图,进一步阐述本发明。
本发明主要是为了针对中间件开发过程中,多个模块之间需要频繁的共享数据,并且对性能有较高要求的情况下,提供一种内存管理的通用方案,为中间件的开发提供一种高效稳定的访问内存的方式;而且能完成并发访问 数据时所需的同步数据的工作,提供应用编程接口以简化并发访问共享内存时的开发工作。
因此在结构化区中,可以按照存储单元的大小划分成不同的存储区域,存储单元的大小还可以按照1k、2k、4k...等字节数依次递增。每个存储区域都设有各自的区域头部信息,来保存该区域的存储单元信息和锁信息,同时对整个结构化区维护一个结构化区总体头部信息,来反映结构化区的整体情况。如附图3结构化区存储单元示意图所示。
当需要分配一块内存时,按照所需内存的大小 接到满足要求的空闲存储单元,在头部信息中 该单元 成已用状态;释放内存时,则在头部信息中 该单元 成空闲状态。
这样设 的结构化区主要有以下特点:
1)存储单元在应用系统启动阶段就已经分配好,在使用过程中存储单元只有使用状态(已用或空闲)会发生变化,因此减少了动态分配内存的开销,提高性能;
2)存储单元的大小按照倍数递增,存储区域的数目和每个区域内的存储单元的数目是静态的,因此比较适合存储小块的数据;
3)每个存储区域维护一个锁,在不同的存储区域之间并发访问时互不影响,提高了吞吐量。
而在扩展区中,存储单元的大小是在运行时动态变化的,因此可以为大块的数据提供存储空间。扩展区设有一个扩展区总体头部信息来维护扩展区的总体信息,并通过链表的方式 空闲的存储单元和已用的存储单元组织起来。如附图4扩展区存储单元示意图所示。
当需要分配一块内存时,在空闲单元链表中到一个大小合适的存储单元,如果这个单元大小正好等于或略大于请求,则 接 这个单元移动到已用单元的链表中,供请求者使用;否则就 这个单元拆分成两部分,第一部分大小等于请求,并移动到已用单元的链表,供调用者使用,第二部分仍然保留在空闲单元链表之中。过程中每个单元都设 单元头部信息。如附图5所示拆分示意图。当释放内存时,则根据情况 被释放存储单元与周围的空闲单元合并,组成一个大的空闲存储单元,并 它移动到空闲单元链表。如附图6为一种情况下的合并示意图,即释放的存储单元周围都是空闲单元时,合并为一个大的空闲单元的情况。实际上释放的存储单元周围只要有一边相邻的存储单元是空闲的,就可以合并在一起,组成一个大的空闲单元。
设 的扩展区主要有以下特点:
1)存储单元的大小可以动态变化,适合存储大块的数据;
2)当已用的存储单元被释放时,可以和临近的空闲存储单元合并,结合内存管理的可靠性保证措施,可以有效的减少内存碎片的产生。
由于应用系统各模块需要频繁访问在共享内存数据存储区内的数据,因此需要保证能够稳定可靠的存取共享内存中的信息。可在中间件设 管理模块对存储区进行定时检查,在上述的存储单元的头部信息中,还可以包含该单元的使用者ID和使用时间等信息,管理模块可以根据这些信息来判断该单元是否超出了使用期限,并根据使用者的状态进行相应的处理;对于那些长时间不释放并且使用者模块已经异常退出的存储单元进行释放。还可以通过控制信号量来同步各模块对共享内存的并发访问,从而保证数据存取的正确完成。
附图1和附图2分别为中间件的内存管理的内存分配和内存释放的过程示意框图。整个内存管理的步骤主要是包括:先依照上述结构化区和扩展区的要求对内存区域进行初始化,结构化区的初始数据包括存储区域的个数以及每个区域内的存储单元个数等,这些信息是静态的,运行中不会变化,而在扩展区中初始化时只有一整块的存储单元,处于空闲状态,头部信息中的空闲单元链表只有这一个元素,而已用单元链表是空的;当有模块申请内存时,根据申请的要求进行内存分配,分配给内存区域中具体的存储单元,该存储单元使用完毕后,进行内存释放,随着运行时的内存申请和释放,会 原有的存储单元拆分和合并,并且生成的单元放到空闲单元链表或者已用单元链表中;当应用系统停止时,清除所述内存区域的内容。
本方案从功能上已实现了内存高效稳定的并发访问,适用于具有以下要求的应用系统的开发:
1)部署于同一台主机上的多个模块之间需要频繁共享数据,并且对性能和可靠性有较高的要求;
2)模块需要共享数据块的大小在较大范围内变动。
本发明公布的内存管理的方案,为应用系统开发时存在的内存管理的问题提供了一种通用的解决办法,简化了开发工作。而且通过结合内存区域的结构化区和扩展区的方式,解决了小块内存申请时的性能问题,同时支持大块内存的申请,并减少了内存碎片的产生。同时,通过共享内存及定时检查的方式,解决了内存使用的高效可靠性问题。
本文发布于:2023-04-14 02:56:26,感谢您对本站的认可!
本文链接:https://patent.en369.cn/patent/1/86896.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |