一种固定内存的管理方法

文档序号:6612812阅读:289来源:国知局
专利名称:一种固定内存的管理方法
技术领域
本发明涉及计算机领域中嵌入式实时操作系统中的内存管理方法。
技术背景嵌入式实时操作系统中的内存管理是保障应用实时性的重要因素。为了 提高实时性能,避免内存碎片的产生,经常采用固定内存块的内存管理方法。 如图l所示,首先向搡作系统申请一块大的内存区,然后,将该内存区分为若干子区(内存池l、内存池2、内存池3、内存'池4、内存池5),同一内 存池由若干大小相同的内存块组成。内存的申请和释放通过系统调用实现。因此,现有技术内存池分配方法就存在如下的不足之处1、 各内存池的大小是根据经验估计出来, 一旦估计错误,可能导致系 统没有足够内存而崩溃;2、 如果内存池分配不合理,只有通过修改代码重新下载程序的方式才 能解决问题。发明内容本发明所要解决的技术问题在于提供一种固定内存的管理方法,可以通 过内存的动态调整来获得最佳内存的分配。本发明的一种固定内存的管理方法包括如下步骤步骤l:预先向操作系统中申请一块内存区,并进行内存初始化;步骤2:根据需要的内存块的大小寻找对应的内存池,并从内存池中申 请空闲内存块,如果没有空闲的内存块,则向内存块大一级的内存池中寻找 是否有空闲内存块,直到找到 一个大内存池中的一个空闲内存块;步骤3:将找到的内存块分解成新的内存池,并将新生成的内存池信息记录入内存池链表中,修改内存池描述信息;同时,修改提供新内存池的内 存池描述信息;步骤4:从新得到的内存池中分配一个空闲的内存块,并在内存使用完 毕后释放内存。优选地,还包括步骤3:在系统复位前,将各内存池的配置信息作为最 佳配置数据记录入闪存中,供下次启动初始化内存时使用。优选地,所述步骤l中的内存初始化具体包括如下步骤步骤a:系统首先判断是否有最佳分配方案数据,如果有,则按最 佳方案分配内存池和内存块;否则,执行步骤b;步骤b:将所申请的内存区划分为大小不同的内存池,同一内存池 中包含有多个大小相同的内存块,同时初始化各内存池描述信息。优选地,如果在所述步骤2中在所有内存池中没有找到一个内存池中的 一个空闲内存块,则内存申请失败。本发明具有如下的优点1、 实现了内存的动态分配,避免了由于内存分配方案不合理导致内存 申请失败和系统异常;2、 将内存分配的最佳方案记录下来,并在下一次启动时自动采用最佳 分配方案。这样做避免了由于内存分配不合理导致频繁调用动态内存机制而 导致内存分配效率降低等异常的发生,提高了内存分配效率。同时,针对不 同的应用场景,可能内存分配方案需要不一样,这种情况下,采用固定分配 内存方式已经不能满足设备差异导致内存分配差异的需求。而本方案把动态 分配和静态分配很好的结合在一起,通过动态分配探测出最佳的内存分配方 案,再在下次重启动时采用最佳分配方案,使内存分配达到动静结合。


图1传统固定长度内存分配方法; 图2内存池描述信息与内存池;
图3申请内存流程图;图4内存分配前内存池描述信息和内存实施例1; 图5内存分配后内存池描述信息和内存实施例1; 图6内存初始化流程。
具体实施方式
本发明通过如下步骤进行详细的说明。 步骤l:预先向操作系统中申请一块大内存区; 步骤2:内存初始化,如图6所示,即将所申请的大内存区划分为大小不同的内存池,同一内存池中包含多个 大小相同的内存块(系统首先判断是否有最佳分配方案数据,如果有,则直 接按最佳方案分配内存池和内存块就可以了;如果没有,则按照默认配置分 配方案分配内存池和内存块,即"t姿前述的方式进4亍划分);初始化各内存池 描述信息;内存池描述信息与内存池关系如图2所示,在内存池l-l中的内 存池信息包括内存池中内存块大小、内存池中内存块凄t目、内存池首地址、 下个内存池描述信息地址,在内存池l-2、 1-3 (往后依次类推)的内存池信 息包括内存池首地址、下个内存池描述信息地址,最后一个内存池的内存 池信息包括内存池首地址、空地址。步骤3:申请内存,如图3所示,即当需要内存块时,根据需要内存块的大小找到对应的内存池,从内存池 中申请空闲内存块(这可能会需要从多个内存池中进行查找);如果申请成 功,分配结束;若没有,则对内存池进行动态调整,执行3.1;3.1内存块大一级的内存池中是否有空闲内存块,如果没有则向更大一 级的内存池中查找空闲内存块,直到找到一个更大内存池中的一个空闲内存 块,然后执行3.2;如果所有内存池中都没有,则提示系统内存不足,内存申请以失败结束。3.2将找到的大的内存块分解成新的内存池,(其中包含若干需要申请
的小内存块),将新生成的内存池信息记录入内存池链表中,修改内存池描 述信息,包括被分解的内存池和新生成的内存池信息都要修改。同时,修改 提供新内存池的大内存池的描述信息。从新得到的内存池中分配一个空闲的 内存块。步骤4:内存使用完之后,释放内存。步骤5:系统复位前,将各内存池的配置信息(内存块大小和数目)作 为最佳配置数据记录入闪存(flash)中,供下次启动初始化内存时使用。下面通过更具体的申请过程来进一步对本发明进行说明。内存的初始状态如图4所示现在需要申请一个16字节的内存块,由图4中可知,16字节内存应到 16字节内存池中申请,但16字节内存池中已经没有空闲内存,此时将按如 下方法处理步骤l:查找64字节内存池中是否有空闲内存,结果是有空闲内存;步骤2:将1个空闲的64字节内存改为1个16字节内存块内存池;步骤3:修改16字节和64字节内存池描述信息;步骤4:在新的内存池中申请一个16字节内存;步骤5:申请成功。申请成功后的内存情况如图5所示。步骤6: —段时间后,系统复位,将新的内存分配方案写入flash中。综上所述,以上仅为本发明的较佳实施例而已,并非用于限定本发明的 保护范围,因此,凡在本发明的精神和原则之内所作的任何修改、等同替换、 改进等,均应包含在本发明的保护范围之内。
权利要求
1、一种固定内存的管理方法,其特征在于,包括如下步骤步骤1预先向操作系统中申请一块内存区,并进行内存初始化;步骤2根据需要的内存块的大小寻找对应的内存池,并从内存池中申请空闲内存块,如果没有空闲的内存块,则向内存块大一级的内存池中寻找是否有空闲内存块,直到找到一个大内存池中的一个空闲内存块;步骤3将找到的内存块分解成新的内存池,并将新生成的内存池信息记录入内存池链表中,修改内存池描述信息;同时,修改提供新内存池的内存池描述信息;步骤4从新得到的内存池中分配一个空闲的内存块,并在内存使用完毕后释放内存。
2、 如权利要求1所述的方法,其特征在于,还包括步骤3:在系统复 位前,将各内存池的配置信息作为最佳配置数据记录入闪存中,供下次启动 初始化内存时使用。
3、 如权利要求2所述的方法,其特征在于,所述步骤l中的内存初始 化具体包括如下步骤步骤a:系统首先判断是否有最佳分配方案数据,如果有,则按最佳方 案分配内存池和内存块;否则,执行步骤b;步骤b:将所申请的内存区划分为大小不同的内存池,同一内存池中包 含有多个大小相同的内存块,同时初始化各内存池描述信息。
4、 如权利要求1至3任一所述的方法,其特征在于,如果在所述步骤 2中在所有内存池中没有找到一个内存池中的一个空闲内存块,则内存申请 失败。
全文摘要
本发明公开了一种固定内存的管理方法,包括如下步骤步骤1预先向操作系统中申请一块内存区,并进行内存初始化;步骤2根据需要的内存块的大小寻找对应的内存池,并从内存池中申请空闲内存块,如果没有空闲的内存块,则向内存块大一级的内存池中寻找是否有空闲内存块,直到找到一个大内存池中的一个空闲内存块;步骤3将找到的内存块分解成新的内存池,并将新生成的内存池信息记录入内存池链表中,修改内存池描述信息;修改提供新内存池的内存池描述信息;步骤4从新得到的内存池中分配一个空闲的内存块,并在内存使用完毕后释放内存。本发明实现了内存的动态分配,避免了由于内存分配方案不合理导致内存申请失败和系统异常。
文档编号G06F12/06GK101149703SQ20071016282
公开日2008年3月26日 申请日期2007年10月10日 优先权日2007年10月10日
发明者晋 张 申请人:中兴通讯股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1