一种内存管理系统及其分配方法

文档序号:6569770阅读:218来源:国知局
专利名称:一种内存管理系统及其分配方法
技术领域
本发明涉及一种内存管理系统及其分配方法。
(二)现有技术通常,操作系统提供的动态使用内存的管理方法是根据一般情况制作的内存管理,即为内存的申请和释放,该方法一般来说可以用链表或堆栈来实现。链表方法把空闲块以链表形式排列,如果有申请内存的情况出现,就从链表的头部开始搜索空闲的内存块,若此内存块小于申请内存所需大小,则延着链表继续搜索,直到找到足够大小的内存块,并分配使用;如果有释放内存的情况出现,就将内存块放到空闲队列的尾部。堆栈方法在申请内存时同队列方法类似,只不过是从栈顶取出空闲内存块;释放时把内存块放到栈顶。这两种方法都存在一个共同的特征,即分配内存时从较大的内存块中分出申请所需大小的内存块,并将剩余部分作为一个空闲内存块继续保存在空闲内存链表中。
在很多应用场合,操作系统动态使用内存的频率很高,每次申请的内存大小又不固定,并且需要不间断执行很长时间。如果使用这种操作系统提供的内存管理方法,由于长时间不间断地申请和释放内存,到最后,必然会产生大量的很小的空闲块。这时如果通过某种工具来看内存情况,会发现总的可以使用的内存量还有很多,但要申请一块比较大的内存块时,系统却回答没有足够的内存。
如图1,使用操作系统提供的内存管理方式,当申请内存时,首先从空闲内存链表的头部开始寻找大小足够的内存块,第一空闲内存1和第二空闲内存2的大小不够,第三空闲内存3的大小超过申请内存要求的大小,故从空闲内存3中分配内存(代表本次内存申请分配的内存)后,第三空闲内存3的剩余部分是一块很小的内存块,成为内存碎片4。当应用系统长时间运行后,内存中存在大量的内存碎片4,不仅影响申请内存所需时间,也将最终导致内存耗尽,没有足够大的空闲内存用于较大的内存分配。
通常上述情况的解决方式是通过某个程序实现内存空闲块合并,但是当执行该程序时,系统的性能会大幅度下降。而应用系统是一直在运行的,因此带来的系统性能的下降是不可接受的。尤其某些对内存管理、系统性能有较高要求的应用系统,如频繁要求动态使用内存的信令系统等,这种内存管理办法显然是无法满足系统要求的。

发明内容本发明的目的在于提供一种内存管理系统及其分配方法,以适用于需要频繁动态使用内存的应用系统,从而大大减少系统运行中产生的内存碎片,提高内存使用的效率,提高应用系统的性能,同时也提高了内存管理的速度和内存使用时的安全性。
本发明所提供的一种内存管理系统,包括内存管理模块接口、与内存管理模块接口相连的若干个内存块管理模块、以及与各内存块管理模块相连的若干个内存块管理单元,其中内存管理模块接口,由一组函数组成,完成结构的初始化、内存申请、内存释放功能,是应用程序访问内存的接口;内存块管理单元,是内存管理的基本单元,每个内存块管理单元对应于一个被管理的内存块,保存这个内存块的相关信息;内存块管理模块,通过链表维护和管理一组内存块管理单元,这组内存块管理单元所对应的内存块大小相同。
上述的内存管理系统,其中,内存块管理模块所处理的信息包括内存块的大小;内存块的总块数;空闲内存块的块数;内存块的使用峰值;第一个空闲块的标号;最后一个空闲块的标号;第一个内存单元的指针;第一个内存块管理单元的指针;以及内存块的信号灯。
上述的内存管理系统,其中,内存块管理单元所处理的信息包括内存块空闲标志位;下一空闲块标号;内存块实际使用长度;内存块申请者标识;内存块释放者标识。
本发明所提供的一种内存分配方法,根据内存申请要求进入内存分配过程,包括下列步骤1)根据所申请的内存大小,由小到大选择最适合的内存块管理模块;2)判断该内存管理模块中是否存在空闲的内存块(1)若存在,则从该内存块管理模块中提取第一个空闲内存块,其步骤包括a)选定该组中第一个空闲内存块;b)将该内存块从空闲链表中删除;c)对该内存块管理模块的空闲内存块链表进行操作,并更新所对应的内存块管理单元的信息;d)将该内存块地址返回,本次内存申请成功;(2)若不存在,判断是否有更大的内存块管理模块a)若存在,则选择下一个内存块管理模块,并返回至步骤2);b)若不存在,则本次内存申请失败。
本发明采用了上述技术解决方案,用内存块管理数组与内存块链表相结合的方式实现内存管理,并采用内存预分配和分类管理的机制,以达到高实时性和消除内存碎片的目的,因而大大地改善了应用系统的性能。本发明是对现有内存管理机制的一个很好的补充与完善。


图1是现有操作系统提供的内存管理方式示意2是本发明内存管理系统结构示意3是内存分配方法流程图具体实施方式
如图2所示,本发明,即一种内存管理系统,包括内存管理模块接口5、与内存管理模块接口5相连的若干个内存块管理模块6、以及与各内存块管理模块6相连的若干个内存块管理单元7。
内存管理模块接口5,由一组函数组成,完成结构的初始化、内存申请、内存释放功能,是应用程序访问内存的接口。
内存块管理单元7,是内存管理的基本单元,每个内存块管理单元对应于一个被管理的内存块,保存这个内存块的相关信息。所处理的信息包括内存块空闲标志位;下一空闲块标号;内存块实际使用长度;内存块申请者标识;内存块释放者标识。
内存块管理模块6,通过链表维护和管理一组内存块管理单元7,这组内存块管理单元7所对应的内存块大小相同。所处理的信息包括内存块的大小;内存块的总块数;空闲内存块的块数;内存块的使用峰值;第一个空闲块的标号;最后一个空闲块的标号;第一个内存单元的指针;第一个内存块管理单元的指针;以及内存块的信号灯。
本发明应用于通信系统的内存管理中,假定有两个内存块管理模块,分别管理大小为16个字节数量为1000的一组内存块和大小为32个字节数量为2000的另一组内存块,每个16字节或32字节的内存块都对应有自己的内存块管理单元。内存管理模块接口是管理公共内存块的入口。
内存块管理模块中的第一个空闲块的标识、最后一个空闲块的标识、以及内存块管理单元中的下一空闲块标识分别将大小为16和32的两组内存空闲块链接起来,成为链表。
如图3所示,本发明的内存分配方法,包括下列步骤1)根据所申请的内存大小,由小到大选择最适合的内存块管理模块;2)判断该内存管理模块中是否存在空闲的内存块(1)若存在,则从该内存块管理模块中提取第一个空闲内存块,其步骤包括a)选定该组中第一个空闲内存块;b)将该内存块从空闲链表中删除;c)对该内存块管理模块的空闲内存块链表进行操作,并更新所对应的内存块管理单元的信息;d)将该内存块地址返回,本次内存申请成功;(2)若不存在,判断是否有更大的内存块管理模块a)若存在,则选择下一个内存块管理模块,并返回至步骤2);b)若不存在,则本次内存申请失败。
当应用程序申请内存时,内存管理模块接口中的内存申请部分首先根据申请内存的大小,由小到大选择最适合的内存块管理模块。再从该内存块管理模块中的空闲内存块管理单元链表中取出空闲内存块管理单元,将此内存块管理单元对应的内存块即为本次内存申请分配的内存。如果该内存块管理模块中没有空闲内存块,则依次申请更大的内存块。如果更大的内存块管理模块中均无空闲内存块,则申请失败。
权利要求
1.一种内存管理系统,包括内存管理模块接口、与内存管理模块接口相连的若干个内存块管理模块、以及与各内存块管理模块相连的若干个内存块管理单元,其中内存管理模块接口,由一组函数组成,完成结构的初始化、内存申请、内存释放功能,是应用程序访问内存的接口;内存块管理单元,是内存管理的基本单元,每个内存块管理单元对应于一个被管理的内存块,保存这个内存块的相关信息;内存块管理模块,通过链表维护和管理一组内存块管理单元,这组内存块管理单元所对应的内存块大小相同。
2.根据权利要求1所述的内存管理系统,其特征在于,所述的内存块管理模块所处理的信息包括内存块的大小;内存块的总块数;空闲内存块的块数;内存块的使用峰值;第一个空闲块的标号;最后一个空闲块的标号;第一个内存单元的指针;第一个内存块管理单元的指针;以及内存块的信号灯。
3.根据权利要求1所述的内存管理系统,其特征在于,所述的内存块管理单元所处理的信息包括内存块空闲标志位;下一空闲块标号;内存块实际使用长度;内存块申请者标识;内存块释放者标识。
4.一种内存分配方法,根据内存申请要求进入内存分配过程,包括下列步骤1)根据所申请的内存大小,由小到大选择最适合的内存块管理模块;2)判断该内存管理模块中是否存在空闲的内存块(1)若存在,则从该内存块管理模块中提取第一个空闲内存块,其步骤包括a)选定该组中第一个空闲内存块;b)将该内存块从空闲链表中删除;c)对该内存块管理模块的空闲内存块链表进行操作,并更新所对应的内存块管理单元的信息;d)将该内存块地址返回,本次内存申请成功;(2)若不存在,判断是否有更大的内存块管理模块a)若存在,则选择下一个内存块管理模块,并返回至步骤2);b)若不存在,则本次内存申请失败。
全文摘要
一种内存管理系统及其分配方法,其内存管理系统包括内存管理模块接口、若干个内存块管理模块、以及与各内存块管理模块相连的若干个内存块管理单元,其中内存管理模块接口,由一组函数组成,完成结构的初始化、内存申请、内存释放功能,是应用程序访问内存的接口;内存块管理单元,是内存管理的基本单元,每个内存块管理单元对应于一个被管理的内存块,保存这个内存块的相关信息;内存块管理模块,通过链表维护和管理一组内存块管理单元,这组内存块管理单元所对应的内存块大小相同。本发明用内存块管理数组与内存块链表相结合的方式实现内存管理,并采用内存预分配和分类管理的机制,以达到高实时性和消除内存碎片,因而大大地改善了应用系统的性能。
文档编号G06F12/08GK1427342SQ01139150
公开日2003年7月2日 申请日期2001年12月21日 优先权日2001年12月21日
发明者陈力军, 魏永军, 迮超 申请人:上海贝尔有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1