一种内存操作的管理方法及系统技术方案

技术编号:3775441 阅读:181 留言:0更新日期:2012-04-11 18:40
本发明专利技术公开了一种内存操作的管理方法,设置由线程维护的线程级内存池,该方法还包括:业务模块需要使用内存块时向线程申请,线程计算应分配的内存块的大小后,查找自身的线程级内存池中是否存在所需大小的内存块,如果存在,则线程从线程级内存池中分配相应大小的内存块给业务模块,并结束内存申请流程;否则,加锁并向进程申请一定数量所需大小的内存块;或者分配比所需大小大一级的内存块给业务模块,并结束内存申请流程。本发明专利技术还公开了一种内存操作的管理系统,包括一级内存管理单元、二级内存管理单元及三级内存管理单元。采用本发明专利技术可以提高程序的运行效率。

【技术实现步骤摘要】

本专利技术涉及内存管理
,尤其涉及一种内存操作的管理方法及系统
技术介绍
目前,为了避免直接使用操作系统分配内存带来的内存碎片化问题,现有 技术一般都采用二级内存管理模式来管理内存。该二级内存管理模式的架构是 第一级由操作系统维护内存,第二级由进程维护内存。其中,进程通过内存池的方式来对操作系统分配给它的内存进行维护。这里,将操作系统维护的内存 称为操作系统级内存,将进程维护的内存称为进程级内存池。图l为现有内存池组织方式的示意图,如图1所示,内存池中内存块的大小一般为2n,大小相 同的内存块通过同一内存队列指针构成一个列表,内存池指针又将这些列表通 过各内存队列指针联系起来构成内存池。当运用二级内存管理模式管理内存时,由于业务模块通过线程运行,而线程本身没有内存块但可以享用其所属的进程的内存块,因此业务模块使用内存块时需通过自身所属的线程向进程申请内存块;同样,当业务模块使用完内存 块后,也通过其所属的线程向进程释放内存块。众所周知,当线程向进程申请 或释放内存块时均需加锁,以保证在申请或释放时,只有该线程能访问该进程, 且只有当该线程访问完该进程进行解锁后,其它线程才能访问该进程。随着科技的进步,如今计算机的硬件都在向多CPU方向发展,软件也在向 多进程、多线程方向发展,现有二级内存管理;漠式已不适用于这种应用环境。 因为在多线程运行的情况下,若每个线程都高频度地申请或释放内存块,则需 要频繁地进行加锁和解锁操作,这会造成线程之间相互等待,从而影响程序的 运行效率,也就不能充分利用多CPU这样的硬件条件。
技术实现思路
有鉴于此,本专利技术的主要目的在于提供一种内存操作的管理方法和系统, 以避免频繁地进行加锁和解锁操作,从而提高程序运行效率。 为达到上述目的,本专利技术的技术方案是这样实现的一种内存操作的管理方法,设置由线程维护的线程级内存池,该方法还包括业务模块需要使用内存块时向线程申请,线程计算应分配的内存块的大小 后,查找自身的线程级内存池中是否存在所需大小的内存块,如果存在,则线程从线程级内存池中分配相应大小的内存块给业务模块, 并结束内存申请流程;否则,加锁并向进程申请一定数量所需大小的内存块;或者分配比所需大 小大一级的内存块给业务模块,并结束内存申请流程。其中,所述相应大小的内存块为大小为2n的内存块,所述2。等于业务模 块申请的内存的大小,或2"为大于业务模块申请的内存大小的最小的2n。其中,该方法进一步包括所述业务模块首次向线程申请内存块时,线程 向进程申请得到一定数量所需大小的内存块之后,开始生成自身的线程级内存 池。其中,所述线程级内存池由线程局部存储技术、或者线程级内存管理对象 管理。其中,所述线程向进程申请一定数量所需大小的内存块之后,该方法还包括进程查找自身的进程级内存池中是否存在所需数量所需大小的内存块,如 果存在,则进程分配相应凄t量相应大小的内存块给线程级内存池;否则,向操 作系统申请内存,所申请内存的大小大于等于线程向进程申请的所有内存块的 大小。其中,所述进程向操作系统申请内存之后,该方法还包括5操作系统查找自身是否存在进程所需大小的内存,如果不存在,则内存申请失败,结束内存块申请流程;否则,为进程分配相应大小的内存,之后进程 将分配得到的内存划分成线程所需大小的内存块存入自身的进程级内存池中。其中,所述进程将分配得到的内存划分成线程所需大小的内存块存入自身 的进程级内存池中之后,该方法还包括进程分配相应数量相应大小的内存块给线程级内存池。其中,所述进程分配相应数量相应大小的内存块给线程级内存池之后,该 方法还包括解锁;然后从线程级内存池中分配相应大小的内存块给业务模块,并结束 内存块申请流程。其中,该方法进一步包括 业务模块向线程释放一定大小的内存块; 将释放的内存块存入线程的线程级内存池;判断线程级内存池中该大小的内存块是否超过指定数目,如果未超过指定 数目,则结束内存块释放流程;否则,加锁并向进程释放一定数目的该大小的 内存块,然后解锁,并结束内存块释放流程。一种内存操作的管理系统,包括一级内存管理单元、二级内存管理单元及 三级内存管理单元;其中,一级内存管理单元,用于由操作系统维护内存,当进程向操作系统申请内 存时由操作系统为进程分配内存;二级内存管理单元,用于由进程以进程级内存池的方式维护内存,当线程池;三级内存管理单元,用于由线程以线程级内存池的方式维护内存。 由以上技术方案可以看出,采用本专利技术的三级内存管理模式,若业务模块 需使用内存块,则可以直接向业务模块所属的线程申请,如果该线程的线程级 内存池中存在大小合适的内存块,则可以直接向业务模块分配内存块而不需要进行加锁操作,只有当线程级内存池中没有大小合适的内存块时,才需加锁向进程申请内存块;同样,当业务模块释放内存块时,也直接向线程的线程级内存池中释放而不需要进行加解锁操作,因此,与现有二级内存管理模式相比, 本专利技术能明显减少加锁和解锁操作,从而提高程序的运行效率。附图说明图1为现有内存池组织方式的示意图2为本专利技术三级内存管理模式的原理示意图3为本专利技术三级内存管理模式下内存块申请的流程示意图4为本专利技术三级内存管理模式下内存块释放的流程示意图。具体实施例方式为使本专利技术的目的、技术方案及优点更加清楚明了,以下对本专利技术作进一 步i羊细iJl明。本专利技术的基本思想是在现有二级内存管理模式的基础上,增加一级线程 级内存池,业务模块需要使用内存块时直接向线程申请,线程调用自身的线程 级内存池为业务模块分配内存块;由于线程同时只运行一个业务模块,因此业 务模块向线程申请内存块时不需要加锁,如此能减少业务模块申请或释放内存 块时的加锁和解锁操作,从而提高程序的运行效率。其中,线程级内存池为由 线程维护的内存。本专利技术内存操作的管理方法是设置三级内存管理模式,第一级由操作系 统维护内存,第二级由进程以进程级内存池的方式维护内存,第三级由线程以 线程级内存池的方式维护内存。图2显示的为包含多线程的三级内存管理模式,每个线程各具有一个线程 级内存池。其中,线程级内存池及进程级内存池均采用如图l所示的方式组织。虽然线程级内存池可以在创建线程时生成,但通常是在业务模块首次向线 程申请内存块时才开始生成的。具体地说,在最初阶段,各线程均没有线程级7内存池,只有当业务模块首次向其所属的线程申请内存块时,该线程向进程申 请得到一定数量所需大小的内存块后,才开始生成自身的线程级内存池,此时 的线程级内存池是由相同大小的内存块构成。之后,随着申请的次数增多,线 程级内存池逐渐包括不同大小的内存块。线程级内存池的生成可以由线程局部存储技术或专门的线程级内存管理对 象来实现。其中,专门的线程级内存管理对象为用户编写的一段代码。此外, 对各线程的线程级内存池的统一管理也是由线程局部存储技术或专门的线程级 内存管理对象来实现。如何通过线程局部存储技术或线程级内存管理对象来管 理线程级内存池为现有技术,在此不再赘述。但是,优选线程局部存储技术来 管理各线程级内存池,可以简化管理的复杂度。为实现内存操作的管理方法,本专利技术相应提供一种内存操作的管理系统,该系统包括一级内存管理单元、二级内存管理单元及三级内存管理单元;其中,一级内存管理单元本文档来自技高网...

【技术保护点】
一种内存操作的管理方法,其特征在于,设置由线程维护的线程级内存池,该方法还包括: 业务模块需要使用内存块时向线程申请,线程计算应分配的内存块的大小后,查找自身的线程级内存池中是否存在所需大小的内存块, 如果存在,则线程从线程级内 存池中分配相应大小的内存块给业务模块,并结束内存申请流程; 否则,加锁并向进程申请一定数量所需大小的内存块;或者分配比所需大小大一级的内存块给业务模块,并结束内存申请流程。

【技术特征摘要】

【专利技术属性】
技术研发人员:汪步江
申请(专利权)人:中兴通讯股份有限公司
类型:发明
国别省市:94[中国|深圳]

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1