一种微内存系统的内存管理方法

文档序号:6481920阅读:204来源:国知局
专利名称:一种微内存系统的内存管理方法
技术领域
本发明涉及一种内存管理方法,尤其涉及一种微内存系统的内存管理方法。

背景技术
现有技术中,LINUX和WINDOWS CE内存管理方法都是基于内存边界识别法来实现的。
内存边界标识法是一种传统的动态存储分配算法,在每个内存区的头部和底部两个边界上分别设有标识,以识别该区域为占有块或空闲块,使得在回收用户释放的空闲块时容易判别在物理位置上与其相邻的内存区域是否为空闲块,以便将所有地址连续的空闲存储区组合成一个尽可能大的空闲块。
内存块的结构如图1所示,每个内存区的头部四个变量和底部两个变量记录内存块的信息。头部四个变量的信息包括前驱内存块的地址(*llink),内存块空闲占用标志(tag),内存块的大小(size),后继内存块的地址(*rlink)。底部两个变量的信息包括本内存块的地址(*uplink),内存块空闲占用标志(tag)。在头部和底部之间的空间为供用户使用的空间。所有的空闲内存块链接起来形成双重循环链表结构。
每个内存区中记录内存块的信息的标识的大量数据信息都要常驻在物理内存中。由于微内存系统,内存极其紧张,这种方法是不可取的,会影响微内存系统的运行速度和性能。而且该方法分配内存需要遍历整个内存链,而链中节点分布在多个零散的内存页(以4K为单位)中,这意味着分配一个内存需要导换多个页面在物理内存和nand flash中进出,内存分配是非常频繁的动作,此时频繁导换的效率微内存系统自然无法接受。


发明内容
本发明目的在于提供一种适合微内存系统的内存管理方法,减少常驻内存的数据,而且分配释放内存无需遍历导换页数据,大大提高系统的性能和速度。
本发明的目的可以通过以下方案实现一种微内存系统的内存管理方法,其特征在于,只将内存块包含的部分信息常驻在内存中,将所述的部分信息组成该内存块的索引表;当内存块小于256K时,将内存块状态、内存块类型和内存块大小三个信息常驻在内存中,组成该小内存块的索引表;当内存块大于256K而小于4M时,将内存块状态、内存块类型、内存块大小和内存块ID索引号四个信息常驻在内存中,组成该大内存块的索引表;利用小内存的索引表和大内存的扩展索引表进行内存管理。
所述内存块小于256K时的索引表结构依次划分为一个1位二进制数字记录该内存块状态,一个1位二进制数字记录该内存块类型,一个14位二进制数字记录该内存块大小。所述的索引表设定为占用两个字节空间,8位二进制为一个字节。
所述内存块大于256K而小于4M时的索引表结构依次划分为一个1位二进制数字记录该内存块状态,一个1位二进制数字记录该内块存类型,一个4位二进制数字记录该内存块ID索引号,一个10位二进制数字记录该内存块大小的前10位数据;还需要扩展一个8位的二进制变量记录内存大小的后8位数据,将该扩展变量与所述的该内存块索引表组成扩展索引表常驻在内存中。所述的索引表设定为占用三个字节空间,8位二进制为一个字节。
所述的小于256K的内存块,该索引表中记录的类型为“小”。
所述的大于256K而小于4M的内存块,该索引表中记录的类型为“大”。
本发明相对现有技术优点在于利用了小内存的索引表和大内存的扩展索引表进行内存管理的方法,大大减少了常驻内存数据;分配释放内存不需要遍历导换页数据,提高了系统的速度和效率。



图1是现有技术中内存边界识别法的内存边界表示图; 图2是本发明实施例的内存空间分布示意图; 图3是本发明的内存块地址偏移示意图; 图4是本发明的内存分配、释放示意图。

具体实施例方式 首先分配内存空间假定一个堆容量为10个分配块,每个分配块长度为32字节,如图2所示,每个编号行代表一个状态。一个连续内存空间,分为空闲空间和分配空间两种 分配空间如编号5里的以(2,-4)开头的连续4个块空间,逗号前的2表示前面一个已分配空间的偏移地址,逗号后的-4表示从本块开始连续4个块为分配空间。
空闲空间如编号5里的以(0,+3)开头的连续3个块空间,逗号前的0表示前面一个已分配空间的偏移地址,逗号后的+3表示从本块开始连续3个块为空闲空间。
然后提取内存块的索引表把每个内存块信息内容用一个双字节整数(shortint类型)来表示,记录了代表的一个内存块的大小等相关信息 第一个数字1位,表示该内存块状态(“使用”或者“空闲”); 第二个数字1位,表示该内存块类型(“大”或者“小”); 第三个数字14个位,表示内存块类型是“小”时,该内存块大小≤(214-1)×16=256K。
该双字节变量就作为对应内存块的索引表,同时双字节变量也限定了小内存块的大小为256K。
如果内存块大小大于256K时,也就是内存块类型是“大”,那么上面的小内存块就不能满足要求,需要把索引表的第三个数字14位分成两个部分4位和10位 第一个数字1位,表示该内存块状态(“使用”或者“空闲”); 第二个数字1位,表示该内存块类型(“大”或者“小”); 第三个数字4位,用来表示关联的内存块ID索引号,内存块个数为7个; 第四个数字10位,用来表示该内存块大小的前10位数据; 大内存块需要的额外的大小可由一个字符变量(char类型)来表示,字符变量用来表示该内存块大小的后8位数据,这样,内存块类型是“大”时,该内存块大小≤(218-1)×16=4096K=4M。
该扩展字符变量与上述的索引表组成了大内存块的扩展索引表。即双字节与字符变量组成的扩展索引表所表示的内存块大小在256K~4M之间。
系统内存块个数小内存块个数为503,大内存块个数为6。所以常驻所有索引表需要的最大内存为sizeof(GMEMInfo)=503*2+6*3=1024字节=1K,该1K大小的数据常驻内存。因此采用双字节变量作为索引表可以大大减少内存空间。此时分配释放内存无需遍历导换页数据。
如图3、4所示,由于每个内存块只有一个双字节整数变量,只纪录了代表的一个内存块的大小等相关信息,而没有记录该内存块的起始地址信息。因此所有的内存块也必须是物理相连的。
只需要把内存开始地址顺序的加上所有某个内存块之前大小,就得到了每个内存块的起始地址。从而为每个内存块节省一个长整型的偏移地址信息。
这样,当内存块n分裂为2个内存块时,(或内存块n与内存块n+1合并为1个内存块时),我们需要在有效内存块个数内移动内存块数组。
尽管每次内存块分裂或合并都要搬移一次内存块,但由于内存块搬移的平均大小为250*2=500字节,所以在内存管理单元系统中,该代价是可以接受的。
下面给出此方案下的内存分配策略和内存释放策略的操作流程。
当需要分配内存块时,采用内存分配函数 1)首先从上次分配内存块处开始向前寻找足够大的可分配内存块; 2)判断该内存块是否是当前有效的内存管理单元映射页; 3)是则分裂该内存块为2个内存块,跳至步骤5; 4)否则继续向前寻找内存块。如果到内存块数组最大维数仍未分配成功,则从头开始遍历至上次分配内存块处(该过程重复步骤1,2,3或4,并记录第一个满足分配要求的内存块);如果仍未分配成功,则取第一个满足分配要求的内存块,此时不再判断内存块是否是当前有效的内存管理单元映射页; 5)向后移动整个内存块数组,重置上次分配内存块处(当前分配内存块的下一个内存块处)。
当需要释放内存块时,采用内存释放函数 1)首先遍历内存块数组找到当前内存块内存偏移值等于欲释放内存值的内存块。
2)判断当前内存块的前后内存块是否处于释放状态。
是则将内存块的失效首地址前移到左对齐页(判断是否落于前内存块范围内,否则失效首地址不移动),失效末地址后移到右对齐页(判断是否落于后内存块范围内,否则失效首地址不移动); 否则合并这些内存块为1个内存块; 3)失效从首地址到末地址之间的对齐内存页; 4)向前移动整个内存块数组,重置上次分配内存块处(当前释放合并后的内存块处)。
通过本发明的方法,每个内存块只用一个双字节整数变量来标识内存块大小等信息,大大减少了常驻在内存中的数据量,提高了系统的性能和速度。
权利要求
1.一种微内存系统的内存管理方法,其特征在于,只将内存块包含的部分信息常驻在内存中,将所述的部分信息组成该内存块的索引表;当内存块小于256K时,将内存块状态、内存块类型和内存块大小三个信息常驻在内存中,组成该小内存块的索引表;当内存块大于256K而小于4M时,将内存块状态、内存块类型、内存块大小和内存块ID索引号四个信息常驻在内存中,组成该大内存块的索引表;利用小内存的索引表和大内存的扩展索引表进行内存管理。
2.根据权利要求1所述的一种微内存系统的内存管理方法,其特征在于,所述内存块小于256K时的索引表结构依次划分为一个1位二进制数字记录该内存块状态,一个1位二进制数字记录该内存块类型,一个14位二进制数字记录该内存块大小。
3.根据权利要求2所述的一种微内存系统的内存管理方法,其特征在于,所述的索引表设定为占用两个字节空间,8位二进制为一个字节。
4.根据权利要求1所述的一种微内存系统的内存管理方法,其特征在于,所述内存块大于256K而小于4M时的索引表结构依次划分为一个1位二进制数字记录该内存块状态,一个1位二进制数字记录该内块存类型,一个4位二进制数字记录该内存块ID索引号,一个10位二进制数字记录该内存块大小的前10位数据;还需要扩展一个8位的二进制变量记录内存大小的后8位数据,将该扩展变量与所述的该内存块索引表组成扩展索引表常驻在内存中。
5.根据权利要求4所述的一种微内存系统的内存管理方法,其特征在于,所述的索引表设定为占用三个字节空间,8位二进制为一个字节。
全文摘要
本发明公开了一种微内存系统的内存管理方法,只将内存块包含的部分信息常驻在内存中,将所述的部分信息组成该内存块的索引表;当内存块小于256K时,将内存块状态、内存块类型和内存块大小三个信息常驻在内存中,组成该小内存块的索引表;当内存块大于256K而小于4M时,将内存块状态、内存块类型、内存块大小和内存块ID索引号四个信息常驻在内存中,组成该大内存块的索引表;利用小内存的索引表和大内存的扩展索引表进行内存管理。本发明相对现有技术优点在于利用了小内存的索引表和大内存的扩展索引表进行内存管理的方法,大大减少了常驻内存数据;分配释放内存不需要遍历导换页数据,提高了系统的速度和效率。
文档编号G06F12/06GK101826054SQ200910037588
公开日2010年9月8日 申请日期2009年3月4日 优先权日2009年3月4日
发明者赵俊化, 张木军, 胡胜发 申请人:安凯(广州)软件技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1