CN102253897A - 一种内存池管理方法及装置 - Google Patents

一种内存池管理方法及装置 Download PDF

Info

Publication number
CN102253897A
CN102253897A CN2011102104251A CN201110210425A CN102253897A CN 102253897 A CN102253897 A CN 102253897A CN 2011102104251 A CN2011102104251 A CN 2011102104251A CN 201110210425 A CN201110210425 A CN 201110210425A CN 102253897 A CN102253897 A CN 102253897A
Authority
CN
China
Prior art keywords
memory block
bit value
subpool
bitmap
index
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN2011102104251A
Other languages
English (en)
Other versions
CN102253897B (zh
Inventor
韩耕
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Datang Mobile Communications Equipment Co Ltd
Original Assignee
Datang Mobile Communications Equipment Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Datang Mobile Communications Equipment Co Ltd filed Critical Datang Mobile Communications Equipment Co Ltd
Priority to CN2011102104251A priority Critical patent/CN102253897B/zh
Publication of CN102253897A publication Critical patent/CN102253897A/zh
Application granted granted Critical
Publication of CN102253897B publication Critical patent/CN102253897B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Techniques For Improving Reliability Of Storages (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

本发明公开了一种内存池管理方法及装置,该方法包括:需要在内存池中分配内存时,确定上次被分配的内存块所在的子池内是否有空闲内存块;若有,则将所述子池内的空闲内存块进行分配;若无,则通过从上至下查找多级位图逐级缩小查找范围,查找一个空闲子池并分配内存块,其中每级位图包括多个比特值,最低级位图的每个比特值指示内存块的使用情况,上级位图的每个比特值,对应地指示下级位图中多个比特值所涉及的内存块的整体使用情况;根据所分配的内存块的位置,对应更新所述多级位图中的比特值。本发明内存管理免互斥锁,可以大大降低基站在多用户、大数据量场景下处理器的负荷,能够处理更多的用户。

Description

一种内存池管理方法及装置
技术领域
本发明涉及内存管理技术领域,尤其涉及一种内存池管理方法及装置。
背景技术
TD-LTE(Time Division-Long Term Evolution,时分长期演进)系统的基站和核心网之间目前均采用全IP化传输,即用户终端UE的上下行业务数据均封装在一个个IP报文中,在核心网和基站之间传输。对于单个小区,仅下行业务数据,速率就高达150MBits/S,远远大于3G的业务量,这就对基站处理器的处理能力提出了很高要求,具体原因为:
对于下行方向,基站用于处理基带数据的板卡(即基带板)的以太模块收到这些IP报文后,会在内存池中为用于携带该IP报文信息的消息分配内存,之后将消息递交给高层的PDCP(Packet Data Convergence Protocol,分组数据聚合协议)模块,高层PDCP模块处理完消息之后,再释放内存池中为该消息分配的内存,可见在高速的情况下,单位时间内的IP报文数量比较多,因此对需要处理器频繁分配和释放内存,对处理器的要求比较高。
目前的内存池管理方法导致分配和释放内存的周期比较大,因此增加了处理器的负荷,限制了每个基带板能够处理的用户。目前普通式链式内存池管理方法,主要采用如下机制:将空闲块按照尺寸的不同,分别挂接到了不同的空闲队列中。对空闲内存块链表的操作需要用互斥锁保护,以解决在多任务环境下,链表的一致性问题。在内存池管理中,引入了对象互斥锁的概念是为了保证内存资源操作的完整性。在任一时刻,只能有一个任务可以访问内存池,而其它任务则不能进行内存池的分配和释放。使用互斥锁本身是一个很耗时的操作,并且会增加任务间的耦合性。这样大大增加了分配和释放内存块耗时,并且耗时的不确定性大大增加。
举例来说,在一般业务模型下,IP报文的尺寸平均为500字节,则150MBits/S的速率模型下,每秒钟需要处理的IP报文个数为150M/(8*500)=37500。则每秒钟需要在内存池中为37500个消息分配和释放内存。目前普通链式内存池管理方法,分配和释放一个消息内存块的时间分别为2000和1000个处理器周期(cycle)。因此对主频为1G的嵌入式处理器而言,为37500个消息分配和释放内存的CPU负荷为:
37500*(2000+1000)/1000000000=11.25%。
因此目前的内存池管理方法增加了处理器的负荷,能够处理的用户有限,缺乏一种能够快速分配和释放内存,增加基站处理器能够处理的用户数量的有效的内存池管理方法。
发明内容
本发明提供一种内存池管理方法及装置,用以解决现有技术中内存池管理算法增加处理器的负荷和能够处理的用户数量有限的问题。
本发明提供一种内存池管理方法,包括:
需要在内存池中分配内存时,确定上次被分配的内存块所在的子池内是否有空闲内存块,其中内存池被划分为多个子池,各子池包括数量相等个内存块;
若有,则将所述子池内的空闲内存块进行分配;
若无,则通过从上至下查找多级位图逐级缩小查找范围,查找一个空闲子池并分配内存块,其中每级位图包括多个比特值,最低级位图的每个比特值指示内存块的使用情况,上级位图的每个比特值,对应地指示下级位图中多个比特值所涉及的内存块的整体使用情况;
根据所分配的内存块的位置,对应更新所述多级位图中的比特值。
本发明还提供一种内存池管理装置,包括:
子池空闲确定单元,用于需要在内存池中分配内存时,确定上次被分配的内存块所在的子池内是否有空闲内存块,其中内存池被划分为多个子池,各子池包括数量相等个内存块;
第一分配单元,用于在上次被分配的内存块所在的子池内有空闲内存块时,将所述子池内的空闲内存块进行分配;
第二分配单元,用于在上次被分配的内存块所在的子池内无空闲内存块时,通过从上至下查找多级位图逐级缩小查找范围,查找一个空闲子池并分配内存块,其中每级位图包括多个比特值,最低级位图的每个比特值指示内存块的使用情况,上级位图的每个比特值,对应地指示下级位图中多个比特值所涉及的内存块的整体使用情况;
第一位图更新单元,用于根据所分配的内存块的位置,对应更新所述多级位图中的比特值。
利用本发明提供的内存池管理方法及装置,具有以下有益效果:基于所提出的内存划分及管理方式,通过多级位图在内存分配时实现空闲内存的快速定位,如果应用到TD-LTE基站,则可以大大降低TD-LTE基站在多用户、大数据量场景下处理器的负荷,使得单基带板卡能够处理更多的用户。
附图说明
图1为本发明实施例中内存池管理方法流程图;
图2为本发明实施例中的三级BITMAP示意图;
图3为本发明实施例内存池管理方法中内存分配流程图;
图4为本发明实施例内存池管理方法中内存释放流程图;
图5为本发明实施例中内存池管理装置结构图。
具体实施方式
下面结合附图和实施例对本发明提供的内存池管理方法及装置进行更详细地说明。
目前普通链式内存池管理方法,分配和释放一个消息内存块的时间分别为2000和1000个处理器周期(cycle)。因此增加了处理器的负荷,能够处理的用户有限。本发明实施例提供一种能够快速进行内存分配的内存池管理方法,增加基站处理器能够处理的用户数量。本发明实施例提供的内存池管理方法,如图1所示,该方法包括:
步骤S101,需要在内存池中分配内存时,确定上次被分配的内存块所在的子池内是否有空闲内存块,其中内存池被划分为多个子池,各子池包括数量相等个内存块,若有,执行步骤S102,如无,执行步骤S103;
本发明实施例中内存池被划分为多个子池,子池中内存块数量是相等,对于一个子池来说,该子池中内存块的尺寸是相同的,各子池间的内存块大小也可以相同,当然,为了提升内存使用效率,可以规划各子池间的内存块大小不同,但优选地,一个子池中内存块的大小是相同的。
步骤S102,将所述子池内的空闲内存块进行分配;
即,如果上次使用的子池中内存块未使用完时,优选使用上次所使用子池中的内存块。
步骤S103,通过从上至下查找多级位图逐级缩小查找范围,查找一个空闲子池并分配内存块,其中每级位图包括多个比特值,最低级位图的每个比特值指示内存块的使用情况,上级位图的每个比特值,对应地指示下级位图中多个比特值所涉及的内存块的整体使用情况;
即,在上次使用的子池已用完时,再重新找一个空闲子池,本发明实施例所指的空闲子池,具体为子池内所有内存块未被使用的子池。
本发明实施例提供的多级位图,实现内存的层次化管理,由于上级位图的每个比特值,对应地指示下级位图中多个比特值所涉及的内存块的整体使用情况,因此,最低级位图的每个比特值指示内存块的使用情况,如果从上至下查找多级位图,可以逐渐缩小查找范围,快速定位空闲子池实现内存的分配。
步骤S104,根据所分配的内存块的位置,对应更新多级位图中的比特值。
如果内存块被分配,应更新多级位图中的比特值,使各级位图指示的内存占用情况与实际的占用情况一致。
本发明实施例所提供的内存池管理方法,给出了内存池的新的划分方法,并提出采用多级位图分层次实现内存的管理,如一级位图的每个比特值用于指示多个子池的占用情况,而下一级位图用于指示一个子池的占用情况等,最终采用快速定位方法迅速找到空闲子池,且如果上一个子池未用完时,不需要查找多级位图而直接进行内存分配。本发明实施例所提供的内存池管理方法,可以快速地进行内存分配,从而将为一个任务分配内存的周期大大降低,从而减轻了处理器的负荷,如果将该方法应用到TD-LTE系统基站,则可以使基站能够处理更多的用户。
关于基于本发明实施例提供的内存池管理方法,对于内存的释放,则可以在释放内存时,根据所释放的内存块的位置,对应更新多级位图中的比特值,使各级位图指示的内存占用情况与实际的占用情况一致。
优选地,为了进一步实现内存的管理,内存池中第一个内存块的索引为0并连续编号,定义一个全局索引Block_Index,通过Block_Index记录上次所分配的内存块在内存池中索引相关信息,根据该索引相关信息确定上次所分配的内存块所在的子池是否有空闲内存块。
优选地,采用如下方式:初始时Block_Index初始化为零;
则在进行内存分配时,确定Block_Index1索引的内存块不是子池的第一个内存块时,确定上次被分配的内存块所在的子池内有空闲内存块,并将Block_Index1索引的内存块进行分配,分配后将当前Block_Index加1;
确定Block_Index1索引的内存块为子池的第一个内存块时,通过从上至下查找多级位图逐级缩小查找范围,查找一个所有内存块为空闲的空闲子池,并将空闲子池内的第一个内存块进行分配,分配完内存块之后,将所分配的内存块在整个内存池中的索引加1并赋值给Block_Index。
上述Block_Index的作用是为了指示上次所分配的内存块是否为子池的最后一个内存块,当然,在内存池中内存块的索引编号方式发生改变时,如第一个内存块的索引为1,则相应地应将Block_Index初始化为1。每次分配后,将所分配的内存块在整个内存池中的索引加1并赋值给Block_Index,从而使Block_Index执向上次分配的内存块的下一个内存块,从而通过确定其是否执行子池的第一个内存块确定上次使用的子池是否使用完。当然,也可以不对Block_Index进行加1操作,而直接将所分配的内存块在整个内存池中的索引赋值给Block_Index,从而使Block_Index指向上次所分配的内存块,通过Block_Index是否指向子池的最后一个内存块,确定上次所分配的内存块所在的子池是否有空闲内存块。
为了进一步方便对内存的管理,提高内存分配和释放速度,优选地,所述各子池中内存块的数量等于内存池管理执行主体的处理机位数N。这样,对于上述第一种方式,在Block_Index1为N的整数倍时,确定Block_Index1索引的内存块为子池的第一个内存块,否则确定Block_Index1索引的内存块不是子池的第一个内存块。对于第二种方式,在Block_Index1为N的整数倍时,确定Block_Index1索引的内存块为子池的最后一个内存块,否则确定Block_Index1索引的内存块不是子池的最后一个内存块。
进一步优选地,同一上级位图的每个比特值,对应地指示下级位图中N个比特值所涉及的内存块的整体使用情况,当然,也可以是其它整数值。
进一步优选地,每一级位图中的比特值存储在长度为N的数组中,在数组长度大于位图中比特值个数时,将数组中除位图中比特值外的其余比特值设置为无效,如将其始终设置为指示占用。
本发明实施例中,需要释放所分配的内存块时,优选地,根据要释放的内存块在内存池中的索引及内存池的基地址,确定该内存块在每级位图中对应的比特值索引,如对于最低一级位图,确定指示该内存块占用情况的比特值索引,对于比特值支持一个子池占用情况的位图,确定指示该内存块所在子池占用情况的比特值索引;根据该内存块在每级位图中对应的比特值索引,从下至上对应更新所述多级位图中的比特值,从而使每级位图指示的内存占用情况与实际的占用情况一致。
本发明实施例中,在同一时刻,仅允许为一个任务分配内存,但允许释放为多个任务所分配的内存块。如果存在多个任务分配的需求,可以通过给每个任务规划一个内存池来解决。
本发明实施例在不使用互斥锁的情况下可以应用于多任务操作系统环境。由于不使用互斥锁操作,大大降低了分配释放内存块的耗时,并且降低了耗时的不确定性。本发明实施例巧妙的利用空间的隔离避免了任务同时访问内存池时可能的冲突。
在现有技术中,eNB使用以前的普通链式内存管理方法,在业务满负荷情况下,仅业务报文消息分配和释放一项,就耗掉了CPU 11.25%的时间片资源。使用本发明实施例的内存池管理方法后,将该值降低到了0.7%,大大节省了CPU的时间片资源。使得单板可以处理更多的用户,为公司节省了成本。同时本内存池分配算法,优先选择刚刚被释放的内存块,提高了cache的命中率。
本发明实施例中多级位图为三级位图,第一级位图BITMAP1的每个比特值指示内存块的使用情况,第二级位图BITMAP2的每个比特值指示每个子池的整体使用情况,第三级位图BITMAP3的每个比特值指示包括多个子池的子池群整体使用情况。
内存块被使用时,BITMAP1中对应的比特值指示占用,否则指示空闲;
子池中任一内存块在BITMAP1中对应的比特值指示占用时,该子池在BITMAP2中对应的比特值指示占用,否则指示空闲;
子池群中所有子池在BITMAP2对应的比特值指示占用时,则该子池群在BITMAP3中对应的比特值指示占用,否则指示空闲。
本发明实施例中各子池中内存块的数量等于内存池管理执行主体的处理机位数N,同一上级位图的每个比特值,对应地指示下级位图中N个比特值所涉及的内存块的整体使用情况;每一级位图中的比特值存储在长度为N的数组中,在数组长度大于位图中比特值个数时,将数组中除位图中比特值外的其余比特值设置为无效。
本发明实施例中确定Block_Index1索引的内存块为子池的第一个内存块时,查找一个空闲子池,具体包括:
查找BITMAP3中第一个指示空闲的比特值,根据查找到的比特值在BITMAP3中的索引A1,查找存储BITMAP2中比特值的第A1个数组;
查找第A1个数组中第一个指示空闲的比特值,根据查找到的比特值在BITMAP2中的索引A2,查找存储BITMAP1中比特值的第A2个数组;
在第A2个数组中的所有比特值指示空闲时,确定查找到空闲子池,将该空闲子池内的第一个内存块进行分配,并更新Block_Index的值。
优选地,本发明实施例中根据所分配的内存块的位置,对应更新所述多级位图中的比特值,具体包括:
仅在Block_Index1索引的内存块为子池的第一个内存块的情况下,分配第Block_Index个内存块后,将BITMAP1中指示该内存块使用的比特值设置为指示占用,将BITMAP2中第A2个比特值设置为指示占用,即根据本发明提供的更新机制下,在使用上次所有的子池中内存块,可以不进行位图更新;
进一步确定存储BITMAP2中比特值的第A1个数组中所有比特值指示占用时,将BITMAP3的第A1个比特值设置为指示占用,否则结束。
进一步地,若在第A1个数组中未找到第一个指示空闲的比特值,或者第A2个数组中不是所有比特值指示空闲时,返回重新查找BITMAP3中第一个指示空闲的比特值,重复上述查找空闲子池的过程。
在多级位图为三级位图,根据所述比特值索引从下至上对应更新所述多级位图中的比特值,具体包括:
根据该内存块在BITMAP1位图中对应的比特值索引,将BITMAP1中指示该内存块占用情况的比特值设置为指示空闲;
确定该内存块所在子池中不是所有内存块空闲时,确定释放内存成功,否则,根据该内存块在BITMAP2位图中对应的比特值索引,将BITMAP2中指示该内存块所在子池使用情况的比特值置为指示空闲;并
根据该内存块在BITMAP2位图中对应的比特值索引,将BITMAP3中该内存块所在子池群使用情况的比特值置为指示空闲。
本发明实施例提供的内存池管理方法,在内存池中能够快速的分配和释放内存块。分配和释放操作的耗时保证在处理器的100个cycle之内完成,以降低TD-LTE基站在多用户、大数据量场景下处理器的负荷,使得单基带板卡能够处理更多的用户。
实施例
现有基站多为32位处理机,下面以N为32为例,给出本发明实施例的优选方式。
本发明实施例中内存池管理原则如下:
1)整个内存池由M个子池组成,M为大于1的整数;每个子池又由32个等尺寸的内存块BLK组成;
2)整个内存池的管理通过三级BITMAP组成,记做BITMA1、BITMAP2、BITMAP3,每级BITMAP中比特值存储在double word类型的数组表示,该数组包括32个比特值;
3)如图2所示,BITMAP1中的每个double word成员,用于记录double word对应子池的使用情况,double word成员中的每个比特值BIT分别对应该子池中每个内存块BLK的分配使用情况。优先地,每个BIT置1表示BLK空闲,BIT清0表示BLK正在被使用;因此BITMAP1是由N个double word组成;
4)如图2所示,BITMAP2中的每个BIT对应一个子池,用于记录整个子池的可用状态,置1表示整个子池可用,清0表示整个子池正在被使用;子池只有当其中的32个BLK全部为空闲状态时,子池才会被标记为可用状态;因此BITMAP2是由M’个double word组成,其中,在M/32为整数时,M’=M,在M/32不为整数,将M/32取整并加1得到M’,对于后一种情况,最后一个double word的某些BIT可能不会被使用到,初始化清0即可;
5)如图2所示,BITMAP3由一个double word表示,其中的每个bit对应BITMAP2中的一个double word成员,置1表示其对应BITMAP2中的doubleword成员中至少有一个bit为1;清0表示其对应BITMAP2中的double word成员中的所有bit均为0。
可见,BITMAP2和BITMAP3中BIT为1或者0的含义是不同的,BITMAP2中BIT为1代表整个子池可用,而BITMAP3中BIT为1代表子池群中至少有一个子池可用。
内存池中拥有BLK的最大个数为:32*32*32=32768,已能够满足目前处理器的需求,当然,如果内存池中内存块个数超过该数值时,还可以再增加一级位图,该位图中每个BIT可以指示32个子池群的使用情况等。
本发明实施例Block_Index用于记录内存分配过程中正在分配的BLK的全局索引。
本发明实施例中,在进行内存初始化时,执行如下操作:
1)BITMAP3、BITMAP2、BITMAP1中的有效BIT全部置1,将无效BIT全部清零,如上所述,BITMAP2中的最后一个double word成员中某些BIT可能无用;
2)将Block_Index清0;
3)所有的BLK在内存中是连续存放的,可以用一个全局数组来表示或者动态分配。
为了保证操作的原子性,本发明实施例需要处理机支持原子操作一个BIT的机制;及在一个字节word中查找第一个为1的bit的指令。
如图3所示,本发明实施例中内存管理方法中,采用如下流程实现内存分配,具体包括:
步骤S301,需要进行内存分配时,确定Block_Index是否为32的整数倍,如果不是,则跳转到步骤S314,若是,执行步骤S302;
步骤S302,确定是否能够查找到BITMAP3中第一个置1的BIT,若是,执行步骤S303,否则执行步骤S315;
步骤S303,将该BIT在BITMAP3中的BIT索引记做:BITMAP3_BIT_INDEX;
步骤S304,用BITMAP3_BIT_INDEX作为索引在BITMAP2的double word数组中,索引到一个double word成员;
步骤S305,判断在该double word中是否查找第一个置1的BIT,若是,执行步骤S306,若未查到,说明BITMAP3指示有误,将BITMAP3中的第BITMAP3_BIT_INDEX个bit清0,则返回步骤S302重新查找;
步骤S306,将查到的BIT在BITMAP2中的BIT索引记做BITMAP2_BIT_INDEX;
步骤S307,将BITMAP2_BIT_INDEX记做BITMAP1_WORD_INDEX,找到BITMAP1中的第BITMAP1_WORD_INDEX个double word;
步骤S308,判断该double word是否等于0xFFFFFFFF,若不等于,则说明BITMAP2指示有误,将BITMAP2中的第BITMAP2_BIT_INDEX个bit清0,跳转到步骤S302重新查找;若等于,执行步骤S309;
步骤S309,说明该子池空闲,Block_Index=BITMAP1_WORD_INDEX*32,从而索引到该空闲子池内的第一个内存块;
步骤S310,清空BITMAP2中的第BITMAP2_BIT_INDEX个BIT,用于标示该子池为不可用状态;
步骤S311,判断BITMAP2中的第BITMAP3_BIT_INDEX个double word是否等于0,若不是0,则跳转到步骤S213;若是,则执行步骤S212;
步骤S312,清空BITMAP3中的第BITMAP3_BIT_INDEX个BIT;
步骤S313,将BITMAP1中的第BITMAP1_WORD_INDEX个double word置为0,用于标示该子池为不可用状态;
步骤S314,查找结束,返回第Block_Index个内存块进行分配,并将Block_Index加1;
步骤S315,内存池耗尽,分配失败。
本发明实施例中整个内存池仅支持一个任务进行分配,不能多任务分配,但支持多个任务的内存释放。
本发明实施例中的内存池的释放过程,如图4所示,包括:
步骤S401,由要释放内存块的索引和内存池的基地址,可以快速算出需要操作的BITMAP中每一级位图的BIT索引,记做:BITMAP3_BIT_INDEX、BITMAP2_BIT_INDEX、BITMAP1_BIT_INDEX
步骤S402,将BITMAP1中的第BITMAP1_BIT_INDEX个BIT位置1;
步骤S403,判断该BLK所在子池的内存块是否均已被释放,如果不是,则内存块被成功释放,结束,如果是,执行步骤S404;
步骤S404,将BITMAP2中的第BITMAP2_BIT_INDEX个BIT位置1;
步骤S405,将BITMAP3中的第BITMAP3_BIT_INDEX个BIT位置1,内存块被成功释放,结束。
本发明实施例允许多个任务释放内存块,且只有当整个子池中的所有BLK全部被释放后,整个子池才能被标记为可用。
本发明实施例中整个内存的释放和分配过程无需使用互斥锁;由于每个内存块都唯一的对应BITMAP1中的一个BIT,因此只要保证设置和清除BIT时是原子操作,即可保证BITMAP1的一致性;通过嵌入式汇编,并使用处理器的原子操作机制,可以保证这一点。
虽然对BITMAP2和BITMAP3中的BIT置位和清零操作也是原子的,但是每个分配过程和每个释放过程既会操作BITMAP2,也会操作BITMAP3;仅仅保证对单个BIT的原子操作不能同时保证BITMAP2和BITMAP3的一致性。当不使用互斥锁时,就要求分配任务不能完全相信BITMAP2和BITMAP3中的BIT指示,需要检查BITMAP2和BITMAP3的一致性,如果发现不一致需要修正之后重新查找。
使用本发明实施例提供的内存池管理方法,可以保证分配和释放内存块在200个处理器周期(cycle)内完成,可以将处理器负荷降低到0.7%,使每个基带板能够处理更多的用户,相对于普通链式内存管理方法占用3000个处理器周期(cycle)的耗时而言,处理周期大大降低。本发明实施例方法使用前后数据对比如下:
Figure BDA0000078632540000131
基于同一发明构思,本发明实施例中还提供了一种内存池管理装置,由于这些装置解决问题的原理与一种内存池管理方法相似,因此这些装置的实施可以参见方法的实施,重复之处不再赘述。
本发明实施例提供的内存池管理装置,如图5所示,包括:
子池空闲确定单元501,用于需要在内存池中分配内存时,确定上次被分配的内存块所在的子池内是否有空闲内存块,其中内存池被划分为多个子池,各子池包括数量相等个内存块;
第一分配单元502,用于在上次被分配的内存块所在的子池内有空闲内存块时,将所述子池内的空闲内存块进行分配;
第二分配单元503,用于在上次被分配的内存块所在的子池内无空闲内存块时,通过从上至下查找多级位图逐级缩小查找范围,查找一个空闲子池并分配内存块,其中每级位图包括多个比特值,最低级位图的每个比特值指示内存块的使用情况,上级位图的每个比特值,对应地指示下级位图中多个比特值所涉及的内存块的整体使用情况;
第一位图更新单元504,用于根据所分配的内存块的位置,对应更新所述多级位图中的比特值。
优选地,内存池中第一个内存块的索引为0并连续编号,初始时Block_Index初始化为零;
第一分配单元502,内存分配时,确定Block_Index1索引的内存块不是子池的第一个内存块时,确定上次被分配的内存块所在的子池内有空闲内存块,并将Block_Index1索引的内存块进行分配,分配后将当前Block_Index加1;
第二分配单元503,确定Block_Index1索引的内存块为子池的第一个内存块时,通过从上至下查找多级位图逐级缩小查找范围,查找一个所有内存块为空闲的空闲子池,并将空闲子池内的第一个内存块进行分配,分配完内存块之后,将所分配的内存块在整个内存池中的索引加1并赋值给Block_Index。
优选地,该装置还包括:
索引确定单元505,用于需要释放所分配的内存块时,根据要释放的内存块在内存池中的索引及内存池的基地址,确定该内存块在每级位图中对应的比特值索引;
第二位图更新单元506,用于根据该内存块在每级位图中对应的比特值索引,从下至上对应更新所述多级位图中的比特值。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

Claims (28)

1.一种内存池管理方法,其特征在于,包括:
需要在内存池中分配内存时,确定上次被分配的内存块所在的子池内是否有空闲内存块,其中内存池被划分为多个子池,各子池包括数量相等个内存块;
若有,则将所述子池内的空闲内存块进行分配;
若无,则通过从上至下查找多级位图逐级缩小查找范围,查找一个空闲子池并分配内存块,其中每级位图包括多个比特值,最低级位图的每个比特值指示内存块的使用情况,上级位图的每个比特值,对应地指示下级位图中多个比特值所涉及的内存块的整体使用情况;
根据所分配的内存块的位置,对应更新所述多级位图中的比特值。
2.如权利要求1所述的方法,其特征在于,内存池中内存块的索引连续编号,定义一个全局索引Block_Index,通过Block_Index记录上次所分配的内存块在内存池中索引相关信息,根据Block_Index确定上次所分配的内存块所在的子池是否有空闲内存块。
3.如权利要求2所述的方法,其特征在于,内存池中第一个内存块的索引为0,初始时,Block_Index初始化为零;
内存分配时,确定Block_Index1索引的内存块不是子池的第一个内存块时,确定上次被分配的内存块所在的子池内有空闲内存块,并将Block_Index1索引的内存块进行分配,分配后将当前Block_Index加1;
确定Block_Index1索引的内存块为子池的第一个内存块时,通过从上至下查找多级位图逐级缩小查找范围,查找一个所有内存块为空闲的空闲子池,并将空闲子池内的第一个内存块进行分配,分配完内存块之后,将所分配的内存块在整个内存池中的索引加1并赋值给Block_Index。
4.如权利要求2所述的方法,其特征在于,所述各子池中内存块的数量等于内存池管理执行主体的处理机位数N,同一上级位图的每个比特值,对应地指示下级位图中N个比特值所涉及的内存块的整体使用情况。
5.如权利要求4所述的方法,其特征在于,每一级位图中的比特值存储在长度为N的数组中,在数组长度大于位图中比特值个数时,将数组中除位图中比特值外的其余比特值设置为无效。
6.如权利要求5所述的方法,其特征在于,所述N为32。
7.如权利要求5所述的方法,其特征在于,所述多级位图为三级位图,第一级位图BITMAP1的每个比特值指示内存块的使用情况,第二级位图BITMAP2的每个比特值指示每个子池的整体使用情况,第三级位图BITMAP3的每个比特值指示包括多个子池的子池群整体使用情况。
8.如权利要求7所述的方法,其特征在于,
内存块被使用时,BITMAP1中对应的比特值指示占用,否则指示空闲;
子池中任一内存块在BITMAP1中对应的比特值指示占用时,该子池在BITMAP2中对应的比特值指示占用,否则指示空闲;
子池群中所有子池在BITMAP2对应的比特值指示占用时,则该子池群在BITMAP3中对应的比特值指示占用,否则指示空闲。
9.如权利要求8所述的方法,其特征在于,确定上次被分配的内存块所在的子池内没有空闲内存块,查找一个空闲子池,具体包括:
查找BITMAP3中第一个指示空闲的比特值,根据查找到的比特值在BITMAP3中的索引A1,查找存储BITMAP2中比特值的第A1个数组;
查找第A1个数组中第一个指示空闲的比特值,根据查找到的比特值在BITMAP2中的索引A2,查找存储BITMAP1中比特值的第A2个数组;
在第A2个数组中的所有比特值指示空闲时,确定找到空闲子池,将该子池的第一个空闲块进行分配,并更新Block_Index的值。
10.如权利要求8所述的方法,其特征在于,根据所分配的内存块的位置,对应更新所述多级位图中的比特值,具体包括:
在确定上次被分配的内存块所在的子池内没有空闲内存块的情况下,分配内存块后,将存储BITMAP1中第A2个数组中所有比特值设置为指示占用,将BITMAP2中第A2个比特值设置为指示占用;
进一步确定存储BITMAP2中比特值的第A1个数组中所有比特值指示占用时,将BITMAP3的第A1个比特值设置为指示占用,否则结束;
在确定上次被分配的内存块所在的子池内有空闲内存块的情况下,分配第内存块后不进行多级位图更新。
11.如权利要求9所述的方法,其特征在于,若在第A1个数组中未找到第一个指示空闲的比特值,或者第A2个数组中不是所有比特值指示空闲时,返回重新查找BITMAP3中第一个指示空闲的比特值。
12.如权利要求1~11任一所述的方法,其特征在于,进一步包括:
需要释放所分配的内存块时,根据要释放的内存块在内存池中的索引及内存池的基地址,确定该内存块在每级位图中对应的比特值索引;
根据该内存块在每级位图中对应的比特值索引,从下至上对应更新所述多级位图中的比特值。
13.如权利要求12所述的方法,其特征在于,所述多级位图为三级位图,根据所述比特值索引从下至上对应更新所述多级位图中的比特值,具体包括:
根据该内存块在BITMAP1位图中对应的比特值索引,将BITMAP1中指示该内存块占用情况的比特值设置为指示空闲;
确定该内存块所在子池中不是所有内存块空闲时,确定释放内存成功,否则,根据该内存块在BITMAP2位图中对应的比特值索引,将BITMAP2中指示该内存块所在子池使用情况的比特值置为指示空闲;并
根据该内存块在BITMAP2位图中对应的比特值索引,将BITMAP3中该内存块所在子池群使用情况的比特值置为指示空闲。
14.如权利要求12所述的方法,其特征在于,
在同一时刻,仅允许为一个任务分配内存,但允许释放为多个任务所分配的内存块。
15.一种内存池管理装置,其特征在于,包括:
子池空闲确定单元,用于需要在内存池中分配内存时,确定上次被分配的内存块所在的子池内是否有空闲内存块,其中内存池被划分为多个子池,各子池包括数量相等个内存块;
第一分配单元,用于在上次被分配的内存块所在的子池内有空闲内存块时,将所述子池内的空闲内存块进行分配;
第二分配单元,用于在上次被分配的内存块所在的子池内无空闲内存块时,通过从上至下查找多级位图逐级缩小查找范围,查找一个空闲子池并分配内存块,其中每级位图包括多个比特值,最低级位图的每个比特值指示内存块的使用情况,上级位图的每个比特值,对应地指示下级位图中多个比特值所涉及的内存块的整体使用情况;
第一位图更新单元,用于根据所分配的内存块的位置,对应更新所述多级位图中的比特值。
16.如权利要求15所述的装置,其特征在于,内存池中内存块的索引连续编号,定义一个全局索引Block_Index,通过Block_Index记录上次所分配的内存块在内存池中索引相关信息,第一分配单元和第二分配单元根据Block_Index确定上次所分配的内存块所在的子池是否有空闲内存块。
17.如权利要求16所述的装置,其特征在于,内存池中第一个内存块的索引为0,初始时,Block_Index初始化为零;
第一分配单元,内存分配时,确定Block_Index1索引的内存块不是子池的第一个内存块时,确定上次被分配的内存块所在的子池内有空闲内存块,并将Block_Index1索引的内存块进行分配,分配后将当前Block_Index加1;
第二分配单元,确定Block_Index1索引的内存块为子池的第一个内存块时,通过从上至下查找多级位图逐级缩小查找范围,查找一个所有内存块为空闲的空闲子池,并将空闲子池内的第一个内存块进行分配,分配完内存块之后,将所分配的内存块在整个内存池中的索引加1并赋值给Block_Index。
18.如权利要求16所述的装置,其特征在于,所述各子池中内存块的数量等于内存池管理装置的处理机位数N,同一上级位图的每个比特值,对应地指示下级位图中N个比特值所涉及的内存块的整体使用情况。
19.如权利要求18所述的装置,其特征在于,每一级位图中的比特值存储在长度为N的数组中,在数组长度大于位图中比特值个数时,将数组中除位图中比特值外的其余比特值设置为无效。
20.如权利要求19所述的装置,其特征在于,所述多级位图为三级位图,第一级位图BITMAP1的每个比特值指示内存块的使用情况,第二级位图BITMAP2的每个比特值指示每个子池的整体使用情况,第三级位图BITMAP3的每个比特值指示包括多个子池的子池群整体使用情况。
21.如权利要求20所述的装置,其特征在于,
内存块被使用时,BITMAP1中对应的比特值指示占用,否则指示空闲;
子池中任一内存块在BITMAP1中对应的比特值指示占用时,该子池在BITMAP2中对应的比特值指示占用,否则指示空闲;
子池群中所有子池在BITMAP2对应的比特值指示占用时,则该子池群在BITMAP3中对应的比特值指示占用,否则指示空闲。
22.如权利要求21所述的装置,其特征在于,第二分配单元具体用于:
查找BITMAP3中第一个指示空闲的比特值,根据查找到的比特值在BITMAP3中的索引A1,查找存储BITMAP2中比特值的第A1个数组;
查找第A1个数组中第一个指示空闲的比特值,根据查找到的比特值在BITMAP2中的索引A2,查找存储BITMAP1中比特值的第A2个数组;
在第A2个数组中的所有比特值指示空闲时,确定找到空闲子池,将该子池的第一个空闲块进行分配,并更新Block_Index的值。
23.如权利要求21所述的装置,其特征在于,第一位图更新单元用于:
在确定上次被分配的内存块所在的子池内没有空闲内存块的情况下,分配内存块后,将存储BITMAP1中第A2个数组中所有比特值设置为指示占用,将BITMAP2中第A2个比特值设置为指示占用;
进一步确定存储BITMAP2中比特值的第A1个数组中所有比特值指示占用时,将BITMAP3的第A1个比特值设置为指示占用,否则结束;
在确定上次被分配的内存块所在的子池内有空闲内存块的情况下,分配第内存块后不进行多级位图更新。
24.如权利要求22所述的装置,其特征在于,第二分配单元,若在第A1个数组中未找到第一个指示空闲的比特值,或者第A2个数组中不是所有比特值指示空闲时,返回重新查找BITMAP3中第一个指示空闲的比特值。
25.如权利要求15~24任一所述的装置,其特征在于,还包括:
索引确定单元,用于需要释放所分配的内存块时,根据要释放的内存块在内存池中的索引及内存池的基地址,确定该内存块在每级位图中对应的比特值索引;
第二位图更新单元,用于根据该内存块在每级位图中对应的比特值索引,从下至上对应更新所述多级位图中的比特值。
26.如权利要求25所述的装置,其特征在于,所述多级位图为三级位图,第二位图更新单元,具体用于:
根据该内存块在BITMAP1位图中对应的比特值索引,将BITMAP1中指示该内存块占用情况的比特值设置为指示空闲;
确定该内存块所在子池中不是所有内存块空闲时,确定释放内存成功,否则,根据该内存块在BITMAP2位图中对应的比特值索引,将BITMAP2中指示该内存块所在子池使用情况的比特值置为指示空闲;并
根据该内存块在BITMAP2位图中对应的比特值索引,将BITMAP3中该内存块所在子池群使用情况的比特值置为指示空闲。
27.如权利要求25所述的装置,其特征在于,在同一时刻,仅允许为一个任务分配内存,但允许释放为多个任务所分配的内存块。
28.如权利要求15所述的装置,其特征在于,所述内存池管理装置为基站。
CN2011102104251A 2011-07-26 2011-07-26 一种内存池管理方法及装置 Active CN102253897B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN2011102104251A CN102253897B (zh) 2011-07-26 2011-07-26 一种内存池管理方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN2011102104251A CN102253897B (zh) 2011-07-26 2011-07-26 一种内存池管理方法及装置

Publications (2)

Publication Number Publication Date
CN102253897A true CN102253897A (zh) 2011-11-23
CN102253897B CN102253897B (zh) 2013-09-11

Family

ID=44981172

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2011102104251A Active CN102253897B (zh) 2011-07-26 2011-07-26 一种内存池管理方法及装置

Country Status (1)

Country Link
CN (1) CN102253897B (zh)

Cited By (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102662761A (zh) * 2012-03-27 2012-09-12 福建星网锐捷网络有限公司 一种多核中央处理器系统中内存池的调度方法以及装置
CN102968382A (zh) * 2012-12-06 2013-03-13 华为技术有限公司 一种空闲存储单元的查找方法及装置
CN103530322A (zh) * 2013-09-18 2014-01-22 深圳市华为技术软件有限公司 数据处理方法和装置
CN103873389A (zh) * 2012-12-12 2014-06-18 北京百度网讯科技有限公司 一种标识资源分配方法及系统
WO2016138839A1 (zh) * 2015-03-05 2016-09-09 长沙新弘软件有限公司 基于位图的存储空间管理系统及其方法
CN106919454A (zh) * 2017-01-25 2017-07-04 福建三元达网络技术有限公司 基于lte协议栈的内存池问题定位方法及其系统
CN107515785A (zh) * 2016-06-16 2017-12-26 大唐移动通信设备有限公司 一种内存管理方法及装置
CN107656703A (zh) * 2017-09-28 2018-02-02 郑州云海信息技术有限公司 一种空闲block查询的方法及系统
CN108093003A (zh) * 2016-11-21 2018-05-29 深圳市优朋普乐传媒发展有限公司 一种基于位图的数据交互方法、装置及系统
CN110825521A (zh) * 2019-10-21 2020-02-21 新华三信息安全技术有限公司 一种内存使用管理方法、装置及存储介质
CN110928680A (zh) * 2019-11-09 2020-03-27 上交所技术有限责任公司 一种适用于证券交易系统的订单内存分配方法
CN112685188A (zh) * 2021-03-22 2021-04-20 四川九洲电器集团有限责任公司 一种基于全局字节数组的嵌入式内存管理方法及装置
CN117806988A (zh) * 2024-02-29 2024-04-02 山东云海国创云计算装备产业创新中心有限公司 任务执行方法、任务配置方法、板卡、服务器

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1950802A (zh) * 2004-02-13 2007-04-18 扎鲁纳股份有限公司 存储器分配
CN102063385A (zh) * 2010-12-23 2011-05-18 深圳市金宏威实业发展有限公司 一种内存管理方法和系统
US20120096233A1 (en) * 2005-12-05 2012-04-19 Tianlong Chen Apparatus and Method for On-Demand In-Memory Database Management Platform

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1950802A (zh) * 2004-02-13 2007-04-18 扎鲁纳股份有限公司 存储器分配
US20120096233A1 (en) * 2005-12-05 2012-04-19 Tianlong Chen Apparatus and Method for On-Demand In-Memory Database Management Platform
CN102063385A (zh) * 2010-12-23 2011-05-18 深圳市金宏威实业发展有限公司 一种内存管理方法和系统

Cited By (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102662761A (zh) * 2012-03-27 2012-09-12 福建星网锐捷网络有限公司 一种多核中央处理器系统中内存池的调度方法以及装置
CN102968382A (zh) * 2012-12-06 2013-03-13 华为技术有限公司 一种空闲存储单元的查找方法及装置
CN103873389B (zh) * 2012-12-12 2018-05-04 北京百度网讯科技有限公司 一种标识资源分配方法及系统
CN103873389A (zh) * 2012-12-12 2014-06-18 北京百度网讯科技有限公司 一种标识资源分配方法及系统
CN103530322A (zh) * 2013-09-18 2014-01-22 深圳市华为技术软件有限公司 数据处理方法和装置
CN103530322B (zh) * 2013-09-18 2017-11-17 华为技术有限公司 数据处理方法和装置
WO2016138839A1 (zh) * 2015-03-05 2016-09-09 长沙新弘软件有限公司 基于位图的存储空间管理系统及其方法
CN107515785A (zh) * 2016-06-16 2017-12-26 大唐移动通信设备有限公司 一种内存管理方法及装置
CN108093003A (zh) * 2016-11-21 2018-05-29 深圳市优朋普乐传媒发展有限公司 一种基于位图的数据交互方法、装置及系统
CN106919454A (zh) * 2017-01-25 2017-07-04 福建三元达网络技术有限公司 基于lte协议栈的内存池问题定位方法及其系统
CN106919454B (zh) * 2017-01-25 2020-02-21 安科讯(福建)科技有限公司 基于lte协议栈的内存池问题定位方法及其系统
CN111324450A (zh) * 2017-01-25 2020-06-23 安科讯(福建)科技有限公司 一种基于lte协议栈的内存池泄露的方法及其系统
CN111324451A (zh) * 2017-01-25 2020-06-23 安科讯(福建)科技有限公司 一种基于lte协议栈的内存块越界的定位方法及其系统
CN111324450B (zh) * 2017-01-25 2023-04-28 安科讯(福建)科技有限公司 一种基于lte协议栈的内存池泄露的方法及其系统
CN107656703A (zh) * 2017-09-28 2018-02-02 郑州云海信息技术有限公司 一种空闲block查询的方法及系统
CN110825521A (zh) * 2019-10-21 2020-02-21 新华三信息安全技术有限公司 一种内存使用管理方法、装置及存储介质
CN110825521B (zh) * 2019-10-21 2022-11-25 新华三信息安全技术有限公司 一种内存使用管理方法、装置及存储介质
CN110928680A (zh) * 2019-11-09 2020-03-27 上交所技术有限责任公司 一种适用于证券交易系统的订单内存分配方法
CN110928680B (zh) * 2019-11-09 2023-09-12 上交所技术有限责任公司 一种适用于证券交易系统的订单内存分配方法
CN112685188A (zh) * 2021-03-22 2021-04-20 四川九洲电器集团有限责任公司 一种基于全局字节数组的嵌入式内存管理方法及装置
CN117806988A (zh) * 2024-02-29 2024-04-02 山东云海国创云计算装备产业创新中心有限公司 任务执行方法、任务配置方法、板卡、服务器
CN117806988B (zh) * 2024-02-29 2024-05-24 山东云海国创云计算装备产业创新中心有限公司 任务执行方法、任务配置方法、板卡、服务器

Also Published As

Publication number Publication date
CN102253897B (zh) 2013-09-11

Similar Documents

Publication Publication Date Title
CN102253897B (zh) 一种内存池管理方法及装置
US6757802B2 (en) Method for memory heap and buddy system management for service aware networks
CN108268317B (zh) 一种资源分配方法及装置
CN104731799B (zh) 内存数据库管理装置
CN102014169B (zh) 分布式服务系统、分布式服务系统的任务执行方法和装置
CN107357661A (zh) 一种针对混合负载的细粒度gpu资源管理方法
US20130339977A1 (en) Managing task load in a multiprocessing environment
CN105843748B (zh) 一种对内存中内存页的处理方法及装置
CN102929707A (zh) 并行任务动态分配方法
CN104717517A (zh) 一种视频转码任务调度方法及装置
US20190102154A1 (en) Method of distributed graph loading for minimal communication and good balance via lazy materialization and directory indirection using indexed tabular representation
CN102209123A (zh) Mac地址管理方法、系统、mac地址服务器及客户机
CN102508717B (zh) 一种应用于多核处理器的内存调度方法及装置
CN106844050A (zh) 一种内存分配方法及装置
CN105991478A (zh) 服务器资源分配方法及其系统
CN101226553A (zh) 一种嵌入式数据库变长字段存储的实现方法及装置
CN102790698A (zh) 一种基于节能树的大规模计算集群任务调度方法
CN108647092A (zh) 云存储方法、云平台及计算机可读存储介质
CN107133182A (zh) 一种内存管理方法及装置
CN103793332B (zh) 基于内存的数据存储方法、装置、处理器和电子设备
CN108897601A (zh) 一种基于虚拟化的fpga使用方法、系统及相关装置
CN106998340B (zh) 一种板卡资源的负载均衡方法及装置
CN100395712C (zh) 软件系统的资源管理方法
CN113674131A (zh) 硬件加速器设备管理方法、装置及电子设备和存储介质
CN114138488A (zh) 一种基于弹性高性能计算的云原生实现方法及系统

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant