一种内存管理方法及装置的制作方法

文档序号:6604995阅读:60来源:国知局
专利名称:一种内存管理方法及装置的制作方法
技术领域
本发明涉及内存管理技术领域,尤其涉及一种内存管理方法及装置。
背景技术
现有的内存管理方法中,有一种Slab算法,Slab算法的模型,如图1所示,在Slab 算法中,针对某一种类型对象的逻辑内存的管理分为了多级第一级、缓存池(cache),存放内存对象及管理缓存池自身所需的数据结构,每种 对象类型都有其对应的缓存池;第二级、缓冲块(buffer),多个缓冲块构成一个缓存池,每个缓冲块容纳固定个数 的内存对象。缓冲块是整个缓存池向系统申请内存时的基本单位。缓冲块按照其中包含的空闲的内存对象的数目,可以分为全满(即其所有的内存 对象都未被申请使用)、部分满(即其包含的内存对象中部分已被申请使用)和全空(即其 包含的内存对象中已全部被申请使用)三种类型。第三级、内存对象(object),每个缓冲块中包含固定个数的内存对象,是应用程序 申请内存的基本单位。现有采用虚拟内存技术、请求页调度技术和Slab算法的内存管理方法,存在下述 不足在应用程序申请缓存池中的内存对象时,内核中采用上述Slab算法的内存管理 模块返回给应用程序一个指向内存对象的指针,并没有真正为这个内存对象分配对应的物 理页(物理页是物理内存的基本单元),如果某个时刻应用程序申请内存对象时,出现了分 配给应用程序的逻辑内存大小(实际就是已分配内存对象的大小总和)大于实际可用的物 理内存的情况,按照现有的上述内存管理方法,可能会出现没有可用的物理内存,从而导致 应用程序的线程阻塞,直到有物理页可用为止。

发明内容
本发明实施例提供一种内存管理方法及装置,用以解决现有内存管理方法存在的 在物理内存不足情况下导致应用程序线程出现阻塞的问题。本发明实施例提供的一种内存的管理方法,包括记录缓存池中当前可用内存对象的数量;当缓存池中当前可用内存对象的数量低于预设的第一阈值时,为所述缓存池分配 新的缓冲块;所述新的缓冲块所占用的物理页的大小与所述缓存池中已有内存对象所占用 的物理页的大小的总和小于为该缓存池预留的物理内存的大小;访问所述新的缓冲块,为所述新的缓冲块中的内存对象分配对应的物理页。本发明实施例提供的一种内存管理装置,包括记录模块,用于记录缓存池中当前可用内存对象的数量;缓冲块分配模块,用于当缓存池中当前可用内存对象的数量低于预设的第一阈值时,为所述缓冲池分配新的缓冲块;所述新的缓冲块所占用的物理页的大小与所述缓存池 中已有内存对象所占用的物理页的大小的总和小于为该缓存池预留的物理内存的大小;物理页分配模块,用于为所述新的缓冲块中的内存对象分配对应的物理页。本发明实施例的有益效果包括本发明实施例提供的内存管理方法及装置,对缓存池中当前可用的内存对象的数 量进行监控,当出现当前可用内存对象的数量低于预先设置的第一阈值时,启动为缓存池 分配缓冲块的步骤,并且访问新的缓冲块,为新的缓冲块中的内存对象分配对应的物理页, 本发明能够在缓存池中可用内存对象数量不足时就预先触发为其分配新的缓冲块的流程, 并且为新的缓冲块中的内存对象直接分配对应的物理页,避免了现有的内存管理方法中, 当应用程序申请缓存池中的内存对象时,可能出现的分配给应用程序的可用内存对象的总 和大于可用的物理内存的情况导致的应用程序线程在运行过程中出现阻塞的问题。


图1为现有内存管理算法中Slab算法的模型示意图;图2为本发明实施例提供的内存管理方法的流程图;图3为本发明实施例提供的内存管理算法的实例的示意图;图4为本发明实施例提供的内存管理装置的结构示意图。
具体实施例方式下面结合附图,对本发明实施例提供的一种内存管理方法及装置进行详细地说 明。本发明实施例提供的内存管理方法及装置,对现有的采用Slab算法的内存管理 方法做出了改进。本发明实施例提供的内存管理方法,如图2所示,包括下述步骤S201、记录缓存池中当前的可用内存对象的数量;S202、当缓存池中当前的可用内存对象的数量低于第一阈值时,为缓冲池分配新 的缓冲块;新的缓冲块所占用的物理页的大小与该缓存池中已有内存对象所占用的物理页 的大小的总和小于为该缓存池预留的物理内存的大小;S203、逐一访问新的缓冲块,为新的缓冲块的内存对象分配对应的物理页。上述步骤S202中,第一阈值的大小可以根据为该缓存池预留的可用物理内存大 小的预设的比例值来确定;例如,可以将该比例设置为百分之十,也就是将为该缓存池预留 的物理内存大小的百分之十除以每个内存对象的大小,得到第一阈值。如果当前预留的可 用物理内存空间较大,而应用程序申请的内存对象的数量不多,那么可以通过将预设的比 例值设置的较低一些,使得预设的第一阈值的大小也相应稍低一些,反之,可以通过将预设 的比例值设置的稍大一些,使得预设的第一阈值的大小也相应的稍高一些。本发明实施例提供的内存管理方法,当缓存池中当前可用内存对象的数量低于第 二阈值时,还包括下述步骤对于预先设定的高优先级的应用程序的内存申请的要求,分配缓存池中的可用内 存对象;
对于预先设定的低优先级的应用程序的内存申请的要求,停止分配缓存池中的内 存对象。本发明实施例中,第二阈值的大小可以小于第一阈值,也可以大于等于第一阈值。较佳地,在具体实施时,上述为缓冲池分配新的缓冲块的步骤可以由一个专门的线程负责完成,该线程与申请内存的应用程序之间相互独立,这种做法的好处在于能够有 效避免下述情况如果将该线程运行于应用程序之中,而该应用程序在分配物理页的过程 中由于物理页不足导致被阻塞时无法完成为缓冲池分配新的缓冲块的步骤。本发明提供的上述内存管理方法,在具体实现时,可以通过如图3的实例来实 现,在该实例中,在应用程序中增加相应的内存管理功能,并且新增了内存监控线程(用 thread_mem_monitor 表不)。在该实例中,应用程序包括四个例程,缓存创建例程(用xmem_CaChe_Create表 示)、缓存分配例程(xmem_cache_alloc表示)、缓存释放例程(xmem_cache_free表示)和 缓存池销毁例程(xmem_cache_destroy表示)。改进后的Slab的数据结构在现有Slab的数据结构上增加了两个阈值指标,第一 水线(即前述的第一阈值,用WATER_MARK_1表示)和第二水线(即前述的第二阈值,用 WATER_MARK_2表示)。其中,第一水线高于第二水线。第一水线的作用在于当缓存池中可用对象低于第一水线时,激活内存监控线程 thread_mem_monitor,由该线程为缓存池中添加新的缓冲块。第二水线的作用在于当缓存池中可用对象数量进一步地低于第二水线时,仅满 足高优先级的应用程序申请内存的需求,对于低优先级的应用程序申请内存的需求,则不 予分配,直接返回空指针,或者调用线程阻塞,直到可用对象高于第二水线。应用程序的高优先级和低优先级是预先设定的,在设定时,可以通过对应用程序 的可执行文件进行扩展,在扩展后的可执行文件中增加自定义的高优先级或低优先级的属 性段。在本发明实施例在具体实施时,也可以将设置为多级优先级,将部分较高的优先级级 别作为高优先级,其他优先级级别作为低优先级,在可用对象数量低于第二水线时,根据应 用程序携带的优先级级别属性段,判断其是高优先级还是低优先级并作相应的处理。下面简单说明这个实例的运行原理。首先Xmem_CaChe_Create例程创建缓存池。通常这个例程只在程序初始化时进行调用。应用程序申请内存对象之前,必须先建立起放置内存对象的缓存池。因为可能涉 及多种类型的对象,例如MAC地址、路由表等等,因此,可以为每一种类型的对象都分别创 建其对应的缓存池,本实例中仅以一种类型的对象的创建过程为例进行说明。创建缓存池的过程,包括与现有技术中相同的步骤即初始化FULL_BUFFER链表 (缓存池中所包含的全满缓冲块标识组成的列表)、PARTILA_BUFFER链表(缓存池中所包 含的部分满缓冲块标识组成的列表)和EMPTY_BUFFER链表(缓存池中已没有可用对象的 缓冲块标识组成的列表)的步骤,以及确定每个内存对象的大小(0BJ_SIZE)和每个缓冲块 中包含内存对象的数目(OBJ-NUM)的步骤和创建用于记录缓存池中部分满和全满缓冲块 中可用对象数量的总和的参数(FREE_NUM)的步骤。上述部分满的缓冲块为所包含的内存对象部分已被分配的缓冲块;
上述全满缓冲块为所包含的所有内存对象都未被申请使用的缓冲块。在缓存池创建过程中以及创建完成正常运行过程中,上述FREE_NUM的参数会不断根据可用内存对象的总数的变化情况而发生相应的变化。本实例中创建缓存池的过程,与现有技术不同之处在于还包括确定第一水线和第 二水线的具体大小的过程,例如,可以将第一水线的大小设置等于每缓冲块所包含内存对 象的个数的3倍,将第二水线的大小设置等于每缓冲块所包含内存对象的个数。在创建缓存池的步骤完成之前,由于缓存池中没有缓存块也就没有可用的内存对 象,参数(FREE_NUM)的初始值为零,满足了缓存池中当前可用内存对象的数量低于第一 水线的这一条件,此时应用程序的xmem_cache_create例程给内存监控线程thread_mem_ monitor发送消息。内存监控线程threacLmemjiionitor收到消息后,为新创建的缓存池分配缓冲块, 并逐一访问新分配的缓冲块,触发请求页调度,也就是触发操作系统为新分配的缓冲块分 配对应的物理页,这样就可以避免后续应用程序访问缓存池中的内存对象时,如果物理页 不足导致的应用程序运行被阻塞。xmem_cache_alloc例程负责当应用程序需要申请内存对象时,从缓存池中获取可 用内存对象分配给应用程序。具体来说,就是监控缓存池中可用内存对象的总数量(FREE_ NUM)的大小,如果可用内存对象的总数低于第一水线,那么给内存监控线程thread_mem_ monitor发送消息,触发其向缓存池中分配缓冲块,并给每个新分配的缓冲块分配对应的物理页。现有的内存管理方法中,平等对待所有应用程序的内存申请请求,而实际上,应用 程序申请内存的用途不同,当缓存池中可用内存对象数目不足时,某些应用程序应当比其 他应用程序优先获得内存,例如用于出错处理的应用程序的内存需求往往比其他内存需求 更紧急,在现有的内存管理方法中无法对这样的应用程序优先满足其内存需求,为了解决 上述问题,本发明实施例提供了下述技术方案当缓存池中的可用内存对象的总数低于第二水线时,对于预先设定的高优先级的 应用程序的内存申请的要求,从部分满和/或全满的缓冲块中获取可用内存对象进行分 配;对于预先设定的低优先级的应用程序的内存申请的要求,停止分配缓存池中的内 存对象。当应用程序不再需要使用内存对象时,xmem_cache_free例程将该内存对象释放 回缓存池中。当不再需要使用缓存池时,可以使用Xmem_CaChe_deStr0y例程完成释放整个缓 存池的过程即释放缓存池中每个缓冲块的内存对象;进一步地释放每个缓冲块;进而释 放整个缓存池。上述实例是以第一水线高于第二水线为例进行说明的,在上述实例中,第二水线 也可以高于或者等于第二水线。基于同一发明构思,本发明实施例还提供了一种内存管理装置,由于该装置解决 问题的原理与前述一种内存管理方法相似,因此该装置的实施可以参见方法的实施,重复 之处不在赘述。
本发明实施例提供的一种内存管理装置401,如图4所示,包括记录模块4011、缓 冲块分配模块4012和物理页分配模块4013 ;其中记录模块4011,用于记录缓存池402中当前的可用内存对象的数量;缓冲块分配模块4012,用于当缓存池402中当前可用内存对象的数量低于预设的 第一阈值时,为缓冲池402分配新的缓冲块;新的缓冲块所占用的物理页的大小与所述缓 存池中已有内存对象所占用的物理页的大小的总和小于为该缓存池预留的物理内存的大 小;物理页分配模块4013,用于为新的缓冲块中的内存对象分配对应的物理页。较佳地,本发明实施例中,上述缓冲块分配模块4012的功能可以由一个专门的线 程实现,该线程与申请内存的应用程序之间相互独立。这种做法的好处在于能够有效避免 下述情况如果将该线程运行于应用程序之中,而该应用程序在分配物理页的过程中由于 物理页不足导致被阻塞时无法完成为缓冲池分配新的缓冲块的步骤。进一步地,上述内存管理装置,如图4所示,还可以包括 内存对象分配模块4014,用于当缓存池402中当前可用内存对象的数量低于第二 阈值时,对于预先设定的高优先级的应用程序的内存申请的要求,分配缓存池402中的可 用内存对象;以及当缓存池402中当前可用内存对象的数量低于第二阈值时,对于预先设 定的低优先级的应用程序的内存申请的要求,停止分配缓存池中的内存对象;该第二阈值的大小可以小于第一阈值,或者大于等于第一阈值。上述内存管理装置中的记录模块4011,进一步用于记录缓存池402中,部分满和 全满的缓冲块中可用内存对象数量的总和;部分满的缓冲块为所包含的内存对象部分已被 分配的缓冲块;全满的缓冲块为所包含的内存对象都未被分配的缓冲块;上述内存管理装置中的内存对象分配模块4014,进一步用于从缓存池402中,部 分满和/或全满的缓冲块中获取可用内存对象进行分配。进一步地,上述内存管理装置,如图4所示,还可以包括释放模块4015,用于当不 再需要使用缓存池402时,释放缓存池402中每个缓冲块的内存对象,释放每个缓冲块,然 后释放整个缓存池402。本发明实施例提供的内存管理方法及装置,对缓存池中当前可用的内存对象的数 量进行监控,当出现当前可用内存对象的数量低于预先设置的第一阈值时,启动为缓存池 分配缓冲块的步骤,并且访问新的缓冲块,为新的缓冲块中的内存对象分配对应的物理页, 本发明能够在缓存池中可用内存对象数量不足时就预先触发为其分配新的缓冲块的流程, 并且为新的缓冲块中的内存对象直接分配对应的物理页,避免了现有的内存管理方法中, 当应用程序申请缓存池中的内存对象时,可能出现的分配给应用程序的可用内存对象的总 和大于可用的物理内存的情况导致的应用程序线程在运行过程中出现阻塞的问题。进一步地,本发明实施例提供的内存管理方法及装置,当缓冲池中的可用内存对 象降低达到第二阈值时,对于预先设定的高优先级的应用程序的内存申请的要求,分配缓 存池中的可用内存对象;而对低优先级的应用程序的内存申请的要求,则不予满足。本发明 实施例在可用内存对象不足的情况下,根据实际内存需求的紧急程度优先满足高优先级的 应用程序的内存申请需求,提高了内存分配的灵活度和内存的使用效率。显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
权利要求
一种内存管理方法,其特征在于,包括记录缓存池中当前可用内存对象的数量;当缓存池中当前可用内存对象的数量低于预设的第一阈值时,为所述缓存池分配新的缓冲块;所述新的缓冲块所占用的物理页的大小与所述缓存池中已有内存对象所占用的物理页的大小的总和小于为该缓存池预留的物理内存的大小;访问所述新的缓冲块,为所述新的缓冲块中的内存对象分配对应的物理页。
2.如权利要求1所述的方法,其特征在于,第一阈值的大小根据为该缓存池预留的物 理内存大小设定的比例值来确定。
3.如权利要求1或2所述的方法,其特征在于,当缓存池中当前可用内存对象的数量低 于预设的第二阈值时,还包括对于预先设定的高优先级的应用程序的内存申请的要求,分配缓存池中的可用内存对象;对于预先设定的低优先级的应用程序的内存申请的要求,停止分配缓存池中的内存对象。
4.如权利要求3所述的方法,其特征在于,所述应用程序预先设定的优先级通过下述 方式实现对应用程序的可执行文件进行扩展,在扩展后的可执行文件中增加自定义的高优先级 或低优先级的属性段。
5.如权利要求3所述的方法,其特征在于,所述记录缓存池中当前的可用内存对象的 数量,包括记录缓存池中,部分满和全满的缓冲块中可用内存对象数量的总和;所述部分满的缓 冲块为所包含的内存对象部分已被分配的缓冲块,所述全满的缓冲块为所包含的内存对象 都未被分配的缓冲块。
6.如权利要求5所述的方法,其特征在于,分配缓存池中的可用内存对象,包括 从缓存池中,部分满和/或全满的缓冲块中获取可用内存对象进行分配。
7.如权利要求1或2所述的方法,其特征在于,当不再需要使用缓存池时,还包括 释放缓存池中每个缓冲块的内存对象;释放每个缓冲块; 释放整个缓存池。
8.—种内存管理装置,其特征在于,包括记录模块,用于记录缓存池中当前可用内存对象的数量;缓冲块分配模块,用于当缓存池中当前可用内存对象的数量低于预设的第一阈值时, 为所述缓冲池分配新的缓冲块;所述新的缓冲块所占用的物理页的大小与所述缓存池中已 有内存对象所占用的物理页的大小的总和小于为该缓存池预留的物理内存的大小; 物理页分配模块,用于为所述新的缓冲块中的内存对象分配对应的物理页。
9.如权利要求8所述的装置,其特征在于,进一步还包括内存对象分配模块,用于当缓存池中当前可用内存对象的数量低于预设的第二阈值 时,对于预先设定的高优先级的应用程序的内存申请的要求,分配缓存池中的可用内存对 象;以及当缓存池中当前可用内存对象的数量低于第二阈值时,对于预先设定的低优先级的应用程序的内存申请的要求,停止分配缓存池中的内存对象。
10.如权利要求9所述的装置,其特征在于,所述记录模块,进一步用于记录缓存池中, 部分满和全满的缓冲块中可用内存对象数量的总和;所述部分满的缓冲块为所包含的内存 对象部分已被分配的缓冲块;所述全满的缓冲块为所包含的内存对象都未被分配的缓冲 块。
11.如权利要求10所述的装置,其特征在于,所述内存对象分配模块,进一步用于从缓 存池中,部分满和/或全满的缓冲块中获取可用内存对象进行分配。
12.如权利要求8-11任一项所述的装置,其特征在于,进一步还包括释放模块,用于当不再需要使用缓存池时,释放缓存池中每个缓冲块的内存对象,释放 每个缓冲块,释放整个缓存池。
全文摘要
本发明公开了一种内存管理方法及装置,其中方法包括记录缓存池中当前可用内存对象的数量;当缓存池中当前可用内存对象的数量低于预设的第一阈值时,为缓存池分配新的缓冲块;访问新的缓冲块,为新的缓冲块中的内存对象分配对应的物理页。本发明提供的上述内存管理方法及装置,能够在缓存池中可用内存对象数量不足时就预先触发为其分配新的缓冲块的流程,并且为新的缓冲块直接分配对应的物理页,避免了现有的内存管理方法中,当应用程序申请缓存池中的内存对象时,出现分配给应用程序的可用内存对象的总和大于可用的物理内存的情况导致的应用程序线程阻塞的问题。
文档编号G06F12/08GK101847127SQ201010213298
公开日2010年9月29日 申请日期2010年6月18日 优先权日2010年6月18日
发明者马晓靖 申请人:福建星网锐捷网络有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1