一种静态动态结合的存储区管理的方法

文档序号:7924820阅读:365来源:国知局
专利名称:一种静态动态结合的存储区管理的方法
技术领域
本发明涉及一种存储区的管理方法,尤其涉及嵌入式实时系统中对各种存储区的管理,特别适用于存储区空间有限、实时性要求高的系统中提高存储区的管理效率与存储区利用率。
背景技术
计算机系统的内存管理通常采用动态管理方法,分配内存时从内存区拆分出需要大小的内存块,归还时如果相邻空间也是空闲的要合并内存块,并且时常是需要多级的拆分与合并。这种方法使用灵活,可以更具需要获得任意大小的内存块,内存利用率高,但是由于需要频繁地拆分与合并内存块,效率比较低,可能导致内存抖动,且容易导致内存碎片,降低其利用率。
另有一种内存分片管理方法,预先配置好几种尺寸大小的内存块个数,系统初始化时根据配置,分配特定数量的各种尺寸内存,分别放在各自尺寸的空闲队列中,使用时从相应队列中取一个使用,用完后归还到原队列中。这种方法简单稳定、效率高。但是它存在一些明显的不足一,内存利用率很低,只能分配于现配置的几种大小的内存,如果申请时相应尺寸的内存用完了则返回失败,即使其它尺寸的内存块还有很多空闲的也申请不到所需的内存。
二,需要预先恰当配置好各种尺寸内存的数目,而产品不同的配置、不同的应用环境,系统内存使用需求情况差异很大,需要预先仔细调查、分析使用需求,否则配置的数据不合理就容易导致内存分配失败的错误,影响业务的正常运行。
三,常常导致给不同用户不同的配置参数,提供不同版本,不便于使用与维护。
嵌入式实时系统中内存管理需要稳定高效,需要高的利用率。第一种方法,对于嵌入式实时系统其低效率更加明显,不适合应用对效率的需求。内存碎片的产生在嵌入式系统中会大大降低内存的利用率,导致申请较大尺寸的内存容易失败。同时,也可能出现某些不正常的应用把存储区耗尽,导致其它一些基本的应用无法分配到必需的存储区,导致系统无法运转。
第二种方法的低利用率在内存空间有限的嵌入式系统中特别明显,配置稍有不当容易导致申请内存失败,导致系统配置复杂,使用、维护不方便。
这两种方法都针对堆内存的管理,适用于DRAM(动态随机存取存储器)之类可读写存储区,不适合其它类型存储区的管理,比如非内存的数据表格、存储空间的管理。

发明内容
本发明提出了一种静态动态结合的存储区管理的方法,克服了现有技术中利用率与效率矛盾的缺点,实现了既保证效率又提高利用率,并且运行稳定可靠的存储区管理方法。
本发明所述静态动态结合的存储区管理的方法如下第一步,登记注册需要管理的存储区,包括起始地址、存储区大小,登记成功则给出一个编号;第二步,配置管理系统,配置系统使用存储区时可能要用到存储块尺寸种类,给每种尺寸配置保留存储块数目,作为每种尺寸保留的静态存储块;第三步,初始化静态存储区,按照上述每种尺寸的静态存储块数目分别给各种尺寸划分存储块,将划分出的存储块放在相应尺寸的静态空闲队列中;第四步,初始化动态存储区,把剩余的存储区按照最大尺寸划分,放入相应尺寸的动态空闲队列中,余下的零头按照较小一号尺寸划分,再有零头再按照更小的尺寸划分,直至全部划分完成或不足最小尺寸而丢弃,划分出的存储块放入相应尺寸的动态空闲队列;第五步,申请存储块时,先在静态存储区申请,如果没有合适的再到动态区申请存储块,此时如果没有相应尺寸的空闲存储块,需要把较大尺寸的存储块拆分后使用;第六步,归还存储块时,如果是从静态区申请的则归还到静态区,如果是从动态区申请的则归还到动态区,此时如果动态空闲队列中有其左邻或右邻存储块则要合并存储块。
采用本发明所述方法,由于采取了静态与动态管理方法相结合的技术措施,与现有技术相比,保证了使用效率与存储区利用率,缓解了存储区紧张、使用效率低的矛盾,避免了复杂的使用维护。本发明采用了静态与动态相结合的管理方式,将管理开销与被管理存储区分开,将使用范围扩大到对各种内存、数据表格、外围存储区的管理,可以同时管理多种和/或多个存储区。
本发明将存储区划分为两大部分,一部分被划分成静态的存储块,也是预先定义若干种尺寸,每一种尺寸都配置一定数目,在运行中不会进行拆分与合并。另一部分是共享的动态存储区,用来进行动态的分配。这样保证各种尺寸的存储块都有一定的最少数量,以保证最基本应用,同时又可以充分利用有限的存储区资源。


图1是本发明静态管理部分的初始化流程图。
图2是本发明动态管理部分初始化流程图。
图3是本发明分配存储区流程图。
图4是本发明归还存储区流程图。
具体实施例方式下面结合附图详细介绍本发明的静态动态结合的存储区管理方法。
一,存储区登记,可以预先配置可同时管理存储区的最大数目,登记注册时只需要提供被管理存储区的起始地址和大小,登记成功返回一个编号,以后需要对该存储区进行管理时需要提供该编号。
不同登记号的存储区管理方法相同,但是用不同的管理队列和资源。
二,配置管理系统,给该存储区配置使用时要用到存储块尺寸种类,给每种尺寸配置保留存储块数目,作为每个尺寸保留的静态存储块。
三,静态管理部分的初始化,如流程如图1所示,先按照配置依次给每种尺寸划分出指定数目的存储块,放在相应尺寸的静态空闲队列中,每种尺寸对应一个空闲队列,用来存放该尺寸的静态部分空闲存储块。
四,动态管理部分的初始化,如流程图2所示,把剩余的存储区先按照最大尺寸划分,把划分出的存储块放入最大尺寸对应的动态空闲队列中,余下的零头按照较小一号尺寸划分,再由零头再按照更小的尺寸划分,直至全部划分完成或不足最小尺寸而丢弃,划分出的存储块放入相应尺寸的动态空闲队列。
每种尺寸都包含静态空闲队列、动态空闲队列,另外有一个静态使用队列和动态使用队列。
五,申请存储块,如附图3所示,包含如下几步1,先查看相应尺寸的静态空闲队列中是否有空闲的存储块,如果有就取出加入相应尺寸的静态使用队列返回,否则进行下一步。
2,在相应尺寸的动态空闲队列中是否有空闲的存储块,如果有就取出加入相应尺寸的动态使用队列返回,否则进行下一步。
3,查找更大尺寸的动态空闲队列是否有空闲存储块,如果没有就继续到查找更大一号尺寸的动态空闲队列,直至找到就取出进入下一步,如果没有找到则返回存储区空间不够的错误。
4,将取出的存储块拆分,如果拆分一次没有得到需要的尺寸,则将新拆出的一个继续拆分,另外的放入相应尺寸的空闲动态队列,直到拆分出适当尺寸的存储块,取出返回,其余的则加入到相应尺寸的动态空闲队列中。拆分合并策略可以采用buddy(伙伴)系统。
六,归还存储块,如附图4所示,包含如下几步1,先检查是否在静态使用队列中,是则取出,加入到相应尺寸的静态空闲队列中,返回,否则进入下一步。
2,检查是否在动态使用队列中,是则取出,检查动态空闲队列是否存在该存储块的左邻和/或右邻,是则取出合并成较大尺寸的存储块,再在动态空闲队列中检查是否存在合并存储块的左邻和/或右邻,是则取出合并,直至没有左邻和右邻了,把合并的存储块加入到相应尺寸的动态空闲队列中,返回。如果要归还的存储块既不属于静态使用队列,也不属于动态使用队列,则返回错误。
为了适应只需要使用静态管理方法或只需要使用动态管理方法的情况,提供了两个预定义的宏,分别表示使用静态管理方式和使用动态管理方式,如果只定义其中一个,表示仅使用相应的一种管理方法,如果两个宏都定义了,则使用静态动态相结合的管理方法。
上面的步骤是针对静态动态结合的方法描述的,如果需要使用单一的管理方法时只需要定义相应的宏,另一个管理方法的内容不会编译运行。
权利要求
1.一种静态动态结合的存储区管理的方法,其特征在于,包括以下步骤第一步,登记注册需要管理的存储区,包括起始地址、存储区大小,登记成功则给出一个编号;第二步,配置管理系统,配置系统使用存储区时可能要用到存储块尺寸种类,给每种尺寸配置保留存储块数目,作为每种尺寸保留的静态存储块;第三步,初始化静态存储区,按照上述每种尺寸的静态存储块数目分别给各种尺寸划分存储块,将划分出的存储块放在相应尺寸的静态空闲队列中;第四步,初始化动态存储区,把剩余的存储区按照最大尺寸划分,放入相应尺寸的动态空闲队列中,余下的零头按照较小一号尺寸划分,再有零头再按照更小的尺寸划分,直至全部划分完成或不足最小尺寸而丢弃,划分出的存储块放入相应尺寸的动态空闲队列;第五步,申请存储块时,先在静态存储区申请,如果没有合适的再到动态区申请存储块,此时如果没有相应尺寸的空闲存储块,需要把较大尺寸的存储块拆分后使用;第六步,归还存储块时,如果是从静态区申请的则归还到静态区,如果是从动态区申请的则归还到动态区,此时如果动态空闲队列中有其左邻或右邻存储块则要合并存储块。
2.根据权利要求1所述的静态动态结合的存储区管理的方法,其特征在于,所述步骤五具体包括以下步骤1)先查看相应尺寸的静态空闲队列中是否有空闲的存储块,如果有就取出加入相应尺寸的静态使用队列返回,否则进行下一步;2)在相应尺寸的动态空闲队列中是否有空闲的存储块,如果有就取出加入相应尺寸的动态使用队列返回,否则进行下一步;3)查找更大尺寸的动态空闲队列是否有空闲存储块,如果没有就继续到查找更大一号尺寸的动态空闲队列,直至找到就取出进入下一步,如果没有找到则返回存储区空间不够的错误;4)将取出的存储块拆分,如果拆分一次没有得到需要的尺寸,则将新拆出的一个继续拆分,另外的放入相应尺寸的空闲动态队列,直到拆分出适当尺寸的存储块,取出返回,其余的则加入到相应尺寸的动态空闲队列中。
3.根据权利要求1或2所述的静态动态结合的存储区管理的方法,其特征在于,所述步骤六具体包括以下步骤1)先检查是否在静态使用队列中,是则取出,加入到相应尺寸的静态空闲队列中,返回,否则进入下一步;2)检查是否在动态使用队列中,是则取出,检查动态空闲队列是否存在该存储块的左邻和/或右邻,是则取出合并成较大尺寸的存储块,再在动态空闲队列中检查是否存在合并存储块的左邻和/或右邻,是则取出合并,直至没有左邻和右邻了,把合并的存储块加入到相应尺寸的动态空闲队列中,返回;如果要归还的存储块既不属于静态使用队列,也不属于动态使用队列,则返回错误。
全文摘要
本发明公开了一种静态动态结合的存储区管理的方法,通过将存储区划分为两大部分,一部分被划分成静态的存储块,也是预先定义若干种尺寸,每一种尺寸都配置一定数目,在运行中不会进行拆分与合并;另一部分是共享的动态存储区,用来进行动态的分配。这种保证各种尺寸的存储块都有一定的最少数量,以保证最基本应用,同时又可以充分利用有限的存储区资源。保证了使用效率与存储区利用率,缓解了存储区紧张、使用效率低的矛盾,避免了复杂的使用维护,可应用于对各种内存、数据表格、外围存储区的管理,可以同时管理多种和/或多个存储区。
文档编号H04L12/24GK1489334SQ0213742
公开日2004年4月14日 申请日期2002年10月11日 优先权日2002年10月11日
发明者李桂平, 陈澎 申请人:深圳市中兴通讯股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1