一种内存管理方法及装置制造方法及图纸

技术编号:4033698 阅读:174 留言:0更新日期:2012-04-11 18:40
本发明专利技术公开了一种内存管理方法及装置,其中方法包括:记录缓存池中当前可用内存对象的数量;当缓存池中当前可用内存对象的数量低于预设的第一阈值时,为缓存池分配新的缓冲块;访问新的缓冲块,为新的缓冲块中的内存对象分配对应的物理页。本发明专利技术提供的上述内存管理方法及装置,能够在缓存池中可用内存对象数量不足时就预先触发为其分配新的缓冲块的流程,并且为新的缓冲块直接分配对应的物理页,避免了现有的内存管理方法中,当应用程序申请缓存池中的内存对象时,出现分配给应用程序的可用内存对象的总和大于可用的物理内存的情况导致的应用程序线程阻塞的问题。

【技术实现步骤摘要】

本专利技术涉及内存管理
,尤其涉及一种内存管理方法及装置
技术介绍
现有的内存管理方法中,有一种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,由该线程为缓存池中添加新的缓冲块。第二水线的作用在于当缓存池中可用对象数量进一步地低于第二水线时,仅满 足高优先级的应用程序申请内存的需求,对于低优先级的应用程序申请内存的需求,则不 予分配,直接返回空指针,或者调用线程阻塞,直到可用对象高于第二水线。应用程序的高优先级和低优先级是预先设定的,在设定时,可以通过对应用程序 的可执行文件进行扩展,在扩展后的可执行文件中增加自定义的高优先级或低优先级的属 性段。在本专利技术实施例在具体实施时,也可以将设置为多级优先级,将部分较高的优先级级 别作为高优先级,其他优先级级别作为低优先级,在可用对象数量低于第二水线时,根据应 用程序携带的优先级级别属性段,判断其是高优先级还是低优先级并作相应本文档来自技高网...

【技术保护点】
一种内存管理方法,其特征在于,包括:记录缓存池中当前可用内存对象的数量;当缓存池中当前可用内存对象的数量低于预设的第一阈值时,为所述缓存池分配新的缓冲块;所述新的缓冲块所占用的物理页的大小与所述缓存池中已有内存对象所占用的物理页的大小的总和小于为该缓存池预留的物理内存的大小;访问所述新的缓冲块,为所述新的缓冲块中的内存对象分配对应的物理页。

【技术特征摘要】

【专利技术属性】
技术研发人员:马晓靖
申请(专利权)人:福建星网锐捷网络有限公司
类型:发明
国别省市:35[中国|福建]

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

1