存储管理系统及其存储管理方法

文档序号:6428099阅读:188来源:国知局
专利名称:存储管理系统及其存储管理方法
技术领域
本发明涉及数据存储管理领域,特别是涉及一种存储管理系统及其存储管理方法。
背景技术
一个完整的内存管理系统包括①内存分配,②内存使用统计情况,③内存诊断三部分。一般嵌入式系统平台上提供的内存管理功能,大多数都只包含内存分配的部分,部分系统有一些粗略的统计功能,很少有诊断系统。内存分配和释放算法的好坏程度也大相径庭,主要体现在算法的空间利用率和时间效率上。空间利用率即系统中内存碎片的多少;时间效率即分配和释放的快慢程度。现有嵌入式存储管理系统存储管理的缺点表现在分配算法和外围功能的完整性 和易用性上I)现有嵌入式存储管理系统在内存分配管理算法上是刚性的,不能根据不同系统的实际分配情况去调整。不同的嵌入式系统的内存使用情况特点不同,不能表现在算法中;2)现有嵌入式存储管理系统大多没有将外围功能细化,外围功能包括统计内存分配及分布情况的信息功能,诊断功能。检查内存泄露很不系统,诊断功能并不能很直观的让开发人员迅速定位信息的不精确(如不能给出具体位置)和信息的不实时(比如程序突然崩溃了,没有来的及输出诊断信息)。

发明内容
本发明的目的在于提供一种存储管理系统及其存储管理方法,能结合用户系统自身的内存使用分布特点,提供一个良好的内存分配和回收的算法,以解决传统嵌入式存储管理系统内存分配算法上空间或时间效率上的利用率不高、碎片多以及研发人员无法对软件开发过程中出现的各种内存问题进行快速、精确、实时定位的问题。为了实现上述目的,本发明提供了一种存储管理系统,其特征在于,包括分配子系统,用于结合根据用户系统的内存使用分布情况所配置的策略与内存分配和回收算法高效分配和回收用户系统的内存,以优化用户系统的内存使用;统计信息子系统,连接所述分配子系统,用于获取用户系统的内存使用分布情况的统计信息,以便于所述分配子系统高效分配和回收用户系统的内存;诊断子系统,连接所述分配子系统,用于诊断用户系统的内存使用异常。所述的存储管理系统,其中,还包括初始化系统,连接所述分配子系统、所述统计信息子系统、所述诊断子系统,用于对所述分配子系统及其结构、所述统计信息子系统及其结构、所述诊断子系统及其结构以及所述存储管理系统的安全性保护进行初始化处理。所述的存储管理系统,其中,所述统计信息子系统获取的统计信息包括用户系统中使用块大小的频度统计,使用内存大小和峰值。所述的存储管理系统,其中,所述配置的策略中的信息包括块大小、初始分配多少块、要不要被预留、预留多少块。所述的存储管理系统,其中,所述诊断子系统还包括越界检测模块,用于通过判断内存块的标记是否被破坏掉进行内存使用越界检测;泄露检测模块,用于通过记录分配和释放的情况进行内存泄露检测;释放检测模块,用于通过判断是否找到对应的内存块或内存块的状态是否处于正在使用状态进行多次释放检测; 指针检测模块,用于通过判断内存块的地址范围是否处于所管理的内存区域进行释放非法指针检测;异常大检测模块,用于通过判断申请的内存块的大小是否超出所允许的范围来进行申请内存块异常大检测;以及使用异常检测模块,用于通过判断用户自定义的判断条件是否满足进行用户自定义的内存使用异常检测。为了实现上述目的,本发明还提供了一种存储管理方法,用于对存储管理系统进行存储管理,其特征在于,包括步骤一,分配子系统对用户系统的内存进行分配并管理;步骤二,统计信息子系统获取用户系统的内存使用分布情况的统计信息,分配子系统结合根据用户系统的内存使用分布情况所配置的策略与内存分配和回收算法高效分配和回收用户系统的内存,诊断子系统诊断程序代码中的内存使用异常。所述的存储管理方法,其中,在所述步骤一之前,还包括对所述存储管理系统进行初始化的步骤,具体是获取要管理的系统内存,查看用户是否配置自定义策略,如是,则根据该自定义策略将该系统内存区分为高频区域和一般区域,并进行初始化,如否,则根据缺省策略将该系统内存区分为高频区域和一般区域,并进行初始;对所述分配子系统及其结构、所述统计信息子系统及其结构、所述诊断子系统及其结构以及所述存储管理系统的自身安全性保护进行初始化。所述的存储管理方法,其中,所述步骤一中,还包括对用户系统的内存进行分配的步骤,具体是调用分配函数进行内存分配,指定申请大小,根据申请大小找出高频区域、一般区域对应的空闲块链表;从该空闲块链表中查找与申请大小对应的空闲块,若找到,将该空闲块从该空闲块链表中删除,并标记该空闲块已分配,进入下一步,若未找到,从大一级的空闲块链表中查找若找到,则对找到的大一级空闲块进行分割处理,并标记该大一级空闲块,进入下一步,若未找到,则进一步查找有无更大的空闲块,若无,则启动合并扫描处理,并当合并成功时,对该大一级空闲块进行分割处理,并标记该大一级空闲块,进入下一步;得到分配块的首地址,加入统计信息子系统进行统计,对该分配块进行诊断,并返回该分配块的首地址。
所述的存储管理方法,其中,所述步骤一中,还包括对用户系统的内存进行释放的步骤,具体是调用释放函数,指定待释放块的首地址;根据该首地址找出对应的分配块,根据配置策略决定是否对该分配块的周围块进行合并若是,则对周围块进行双向合并,并将得到的合并区间进行处理,标记该合并区间可用,进入下一步,若否,直接进入下一步;启动统计信息子系统进行处理,启动诊断子系统进行诊断;将空闲块加入空闲链表。所述的存储管理方法,其中,所述步骤二中,还包括
统计信息子系统对周围块合并的次数和周围块的信息进行统计;诊断子系统对分配和合并过程中的内部逻辑是否正确进行诊断。与现有技术相比,本发明的有益技术效果是I)分配算法的空间效率高,碎片少,分配和释放的时间效率高;2)算法具有可调整与可配置的柔性,实现用户的需求交互,用户根据系统的特点,配置自己系统需要的策略,空间利用率更高,碎片更少,并且还能大幅提升时间效率;3)完整性。作为内存管理系统的辅助功能的统计子系统,诊断子系统齐全。统计包括总体统计信息和区段(以分配块大小为单位)统计的各种信息。诊断包括内存泄露,越界检查,多次释放,释放非法指针,分配块过大。还支持用户自定义的异常检测;4)信息的精确性。统计子系统比一般嵌入式存储管理系统提供更精确更完整的信息。诊断子系统能够把问题定位到源码级,直接输出问题所在点,如文件名、函数名、行号;5)实时性。问题一旦出现,马上报告出来。即使问题很严重(如程序崩溃),用户也可以在第一时间看到问题所在。


图I为本发明的存储管理系统结构图;图2为本发明的存储管理系统的初始化流程图;图3为本发明的存储管理系统的内存分配流程图;图4为本发明的存储管理系统的内存释放流程图。
具体实施例方式以下结合附图和具体实施例对本发明进行详细描述,但不作为对本发明的限定。如图I所示,为本发明的存储管理系统结构图。整个存储管理系统100分为三个部分分配子系统10、统计信息子系统20、诊断子系统30。分配子系统10,主要负责内存的分配和回收,为存储管理系统100的主要部分,用于通过一个柔性的可以配置的、高效的分配和回收算法来管理一块系统内存,通过分配和释放的程序接口得到或者释放所使用的内存块。同时使得开发人员可以根据自己系统的实际情况(比如对内存块大小的需求分布)来灵活配置策略,然后告知分配子系统10,分配子系统10结合所配置的策略与内存分配和回收算法高效分配和回收用户系统的内存,以优化用户系统的内存使用。
统计信息子系统20,连接分配子系统10,主要用于提供用户系统的内存使用的统计信息,协助开发人员了解系统的内存使用分布情况的统计信息,以利于分配子系统10优化系统的内存使用。统计信息子系统20提供的统计信息包括用户系统中使用块大小的频度统计,使用内存大小和峰值等信息。用户可以根据这些统计信息生成自己的配置策略,以使内存的分配和回收更加高效。诊断子系统30,连接分配子系统10,为用户的内存使用提供诊断服务,帮助开发人员诊断程序代码中有没有内存使用异常。诊断子系统30支持的异常检测包括内存泄露、多次释放、内存使用越界、释放非法指针、申请内存块异常大、用户自定义的内存使用异常、分配子系统内部逻辑诊断。诊断子系统30进一步包括越界检测模块311、泄露检测模块312、释放检测模块 313、指针检测模块314、异常大检测模块315、使用异常检测模块316。进一步地,越界检测模块311用于通过检查内存块的标记是否被破坏掉进行内存使用越界检测。分配子系统10进行内存块分配时,在每个内存块(实际内存空间)的首尾都做一个标记,这个标记是特定的,越界检测模块311在释放或者下一次申请的时候去检查现有系统中每个内存块的标记是否被破坏掉。如果被破坏掉,则认为是一次内存越界。这样可以以近于实时的方式上报发现的位置和被破坏掉的内存块的分配位置。一般来讲,大部分情况下一段程序操作了一块内存,发生了越界,首先会将所操作的内存区域的首尾标记破坏掉。进一步地,泄露检测模块312,用于通过记录分配和释放的情况进行内存泄露检测。当分配子系统10分配时在数据块的记录结构中记录和分配位置,当该块释放时清除该记录。这样,有两种情况可以判定内存泄露。第一是程序退出的时候,此时会检查有哪些记录还没有清除,这些必然是内存泄露的块,所以可以在程序退出时报告给用户。第二种情况是在程序运行的时候动态分析,对那些频繁分配内存块的地方实施监测。如果随着时间的延长内存块一直处于上升态势,那么就会上报内存泄露,同时指出其位置。进一步地,释放检测模块313用于当内存块释放时,由地址查找其对应的块结构,通过判断是否找到对应的内存块或内存块的状态是否处于正在使用状态进行多次释放检测,如果找不到对应的内存块或者找到的内存块的状态不是正在使用状态,则定义为多次释放,并上报释放的代码在程序中的具体位置。进一步地,指针检测模块314用于当内存块释放时,由地址查找其对应的块结构,通过判断内存块的地址范围是否处于所管理的内存区域进行释放非法指针检测,如果内存块的地址范围不处于所管理的内存区域,则视为释放非法指针,并上报释放的代码在程序中的具体位置。进一步地,异常大检测模块315用于通过判断申请的内存块的大小是否超出所允许的范围来进行申请内存块异常大检测,当申请的内存块太大超出所允许的范围时,上报申请内存块在程序中的具体位置。进一步地,使用异常检测模块316进行用户自定义的内存使用异常的检测的方式是诊断子系统30所特有。可以允许用户自定义一些判断条件,通过判断条件是否满足进行用户自定义的内存使用异常检测,当判断条件满足时报告异常,作为用户自定义的内存使用异常。使用异常检测模块316可以根据用户的定义逻辑去判断这种类别异常的出现及具体位置。诊断子系统30进行分配系统内部逻辑诊断是对系统本身的逻辑错误检查,在系统发布时会关掉这一检测。用户可以不关注这个功能。存储管理系统100还进一步包括初始化系统40,连接分配子系统10、统计信息子系统20、诊断子系统30,用于对分配子系统10、统计信息子系统20、诊断子系统30以及存储管理系统100的自身安全性保护进行初始化处理。分配子系统10、统计信息子系统20、诊断子系统30三个子系统协同工作。在初始化逻辑中初始化系统40均需要对他们进行初始化。统计信息子系统20和诊断子系统30一般用在正式版本未发布前的测试和评估阶段,当版本正式发布时,只保留内存分配子系统10。统计信息子系统20和诊断子系统30两个模块为外部服务,为可选服务。分配子系统10是主子系统,统计信息子系统20和诊断子系统30是辅助子系统。 分配子系统10负责内存的分配和释放,即传统上的内存管理,而统计信息子系统20和诊断子系统30是用来给用户提供足够的信息,帮助用户根据统计信息对自己系统配置正确的策略,去定制存储管理系统,而诊断子系统30是帮助用户去诊断自己系统中的缺陷。存储管理系统100通过集成统计信息子系统20、诊断子系统30实现了用户系统的信息统计和缺陷诊断。存储管理系统100中最大的特点在于用户可以根据自己系统中的特定情况来灵活配置一些策略,这些策略用来通知分配子系统10,如何初始化初始内存块才能使系统的分配达到最优。此外,用户还可以通过策略告知分配子系统10是否要预留出固定大小的块,这些块一旦被预留出来,在整个分配过程中不会被拆分。(一般情况下,如要分配一个16K大小的块,但分配子系统10中已经不存在16K大小的块了,这时如果系统中存在32k大小的块,32k大小块会被拆分成16k)。策略可以描述如下[块大小初始分配多少块要不要被预留预留多少块]存储管理系统100的运行主要分为三个过程系统初始化,分配过程和释放过程。如图2所示,为本发明的存储管理系统的初始化流程图。该初始化流程用于申请一块要管理的系统内存(大小可配置),查看用户有没有配置自定义策略,若无,则加载缺省配置策略。若有,则根据自定义配置策略初始化内存区域,分为高频区域和一般区域,进行初始化,初始化的部分包括分配子系统及其结构、统计信息子系统及其结构、诊断子系统及其结构、存储管理系统自身安全性保护。上述初始化流程的具体步骤包括步骤200,存储管理系统初始化;步骤201,获得一块要管理的系统内存,该内存大小可配置;步骤202,查看用户有没有配置自定义策略若有,则根据自定义配置策略初始化内存区域,分为高频区域和一般区域,并分别进行初始化;若无,则加载缺省配置策略,根据缺省配置策略初始化内存区域,分为高频区域和一般区域,并分别进行初始化;步骤203,对分配子系统及其结构、统计信息子系统及其结构、诊断子系统及其结构、存储管理系统自身安全性保护进行初始化;步骤204,初始化结束。通过如上初始化流程完成了每个系统及其结构的初始化,比如去建立系统所要用的数据结构。因为每个系统都会有系统开销,这些开销用来记录这个系统和它的子系统的运行状态和数据,初始化的过程就是给这些开销分配空间和赋予初始值的过程。如图3所示,为本发明的存储管理系统的内存分配流程图。该内存分配流程的具体步骤如下步骤300,调用分配函数进行内存分配,指定申请大小;如char*p =malloc (size),其中malloc是分配函数,size是分配的大小,p是返回内存块的首地址; 步骤301,根据申请大小,找出对应大小的空闲链,高频区域和一般区域都有此大小的链;步骤302,按该大小顺次去查找高频区域和一般区域的两个空闲块链表,去查找对应大小的空闲块若能找到,则转入步骤307 ;若未找到,则进入步骤303 ;步骤303,去更大一级的块链表查找空闲块若能找到,则进入步骤305 ;若未找到,则进入步骤304 ;步骤304,判断有没有更大的空闲块,若有,则返回步骤303,若没有,则启动合并扫描处理。若合并成功,进入步骤305 ;若合并不成功,则返回空指针,表示已经分配失败;步骤305,按照配置策略对该大一级的空闲块进行分割等处理,先分割成次大的空闲块,再在余下的空闲块中分割出再小一级的空闲块来(如一个31k的块可以分割成16k+8k+4k+2k+lk大小的空闲块来),并把这些分割好的空闲块放到合适的位置以便快速查找时迅速找到,标记分配块,转入步骤307 ;步骤306,从空闲链中删除标记该块已使用(分配不成功,返回空指针);步骤307,通过标记分配块得到分配块的首地址;空闲块和分配块均属于同一来源。分配子系统中是以块为单位进行分配。每个块都有一个数据结构去描述它,其中包括起始地址、块大小、有没有分配等信息。初始化时,分配子系统将要管理的内存区域分成尽可能大的块,并将这些块放到一个空闲链表中。这样每次分配的时候,就可以从空闲链表中直接去取,加快速度,取的时候按最小和最适匹配去做。一个空闲块一旦分配出去,则要从空闲链表中移出,并标记为已经分配,该空闲块则为分配块。步骤308,加入统计子系统进行统计,对该块进行诊断预处理,返回该块首地址。如图4所示,为本发明的存储管理系统的内存释放流程图。步骤400,调用释放函数,指定释放块首地址;步骤401,根据首地址,找出对应分配块,根据用户配置的策略决定对周围块(即周围内存区间)是否合并,启动合并若合并成功,则进入步骤402,若合并失败,则进入步骤404 ;步骤402,对周围内存区间进行双向合并;步骤403,将最终合并区间进行处理,标记可用;
步骤404,启动统计信息子系统20处理,启动诊断子系统30进行诊断;该步骤中,统计信息子系统20主要是对合并的次数和块信息进行统计,以便让用户调整策略来尽量减少合并;而诊断子系统30可以诊断分配子系统10分配和合并过程中的内部逻辑是否正确;分配和释放是联系在一起的,都属于分配子系统。内部逻辑诊断在整个分配和释放过程中都会有。合并是周围内存区间的合并,内存区间即是块,所以合并是块数据结构的
合并,二者是一致的。步骤405,将空闲块加入空闲链表。本发明提供的存储管理系统已经实际地发展出完整的应用程序,已经过无数次的运作测试,例如 I,经过两个小时的连续调动内存操作,无内存泄露状况;2,经过两个小时的连续调动内存操作,无显著增加内存碎片;3,经过两个小时的连续调动内存操作,无崩溃异常出现。本发明提高嵌入式存储管理系统的空间利用效率和运行的时间效率,降低生产成本,提高利润率;提供完整、准确、实时的诊断信息和统计分布信息,帮助开发人员迅速定位系统存在的问题,提高开发效率,缩短开发周期,提升系统质量。当然,本发明还可有其它多种实施例,在不背离本发明精神及其实质的情况下,熟悉本领域的技术人员当可根据本发明做出各种相应的改变和变形,但这些相应的改变和变形都应属于本发明所附的权利要求的保护范围。
权利要求
1.一种存储管理系统,其特征在于,包括 分配子系统,用于结合根据用户系统的内存使用分布情况所配置的策略与内存分配和回收算法高效分配和回收用户系统的内存,以优化用户系统的内存使用; 统计信息子系统,连接所述分配子系统,用于获取用户系统的内存使用分布情况的统计信息,以便于所述分配子系统高效分配和回收用户系统的内存; 诊断子系统,连接所述分配子系统,用于诊断用户系统的内存使用异常。
2.根据权利要求I所述的存储管理系统,其特征在于,还包括 初始化系统,连接所述分配子系统、所述统计信息子系统、所述诊断子系统,用于对所述分配子系统及其结构、所述统计信息子系统及其结构、所述诊断子系统及其结构以及所述存储管理系统的安全性保护进行初始化处理。
3.根据权利要求I或2所述的存储管理系统,其特征在于,所述统计信息子系统获取的统计信息包括用户系统中使用块大小的频度统计,使用内存大小和峰值。
4.根据权利要求I或2所述的存储管理系统,其特征在于,所述配置的策略中的信息包括块大小、初始分配多少块、要不要被预留、预留多少块。
5.根据权利要求I或2所述的存储管理系统,其特征在于,所述诊断子系统还包括 越界检测模块,用于通过判断内存块的标记是否被破坏掉进行内存使用越界检测; 泄露检测模块,用于通过记录分配和释放的情况进行内存泄露检测; 释放检测模块,用于通过判断是否找到对应的内存块或内存块的状态是否处于正在使用状态进行多次释放检测; 指针检测模块,用于通过判断内存块的地址范围是否处于所管理的内存区域进行释放非法指针检测; 异常大检测模块,用于通过判断申请的内存块的大小是否超出所允许的范围来进行申请内存块异常大检测;以及 使用异常检测模块,用于通过判断用户自定义的判断条件是否满足进行用户自定义的内存使用异常检测。
6.一种存储管理方法,用于对存储管理系统进行存储管理,其特征在于,包括 步骤一,分配子系统对用户系统的内存进行分配并管理; 步骤二,统计信息子系统获取用户系统的内存使用分布情况的统计信息,分配子系统结合根据用户系统的内存使用分布情况所配置的策略与内存分配和回收算法高效分配和回收用户系统的内存,诊断子系统诊断程序代码中的内存使用异常。
7.根据权利要求6所述的存储管理方法,其特征在于,在所述步骤一之前,还包括对所述存储管理系统进行初始化的步骤,具体是 获取要管理的系统内存,查看用户是否配置自定义策略,如是,则根据该自定义策略将该系统内存区分为高频区域和一般区域,并进行初始化,如否,则根据缺省策略将该系统内存区分为高频区域和一般区域,并进行初始; 对所述分配子系统及其结构、所述统计信息子系统及其结构、所述诊断子系统及其结构以及所述存储管理系统的自身安全性保护进行初始化。
8.根据权利要求7所述的存储管理方法,其特征在于,所述步骤一中,还包括对用户系统的内存进行分配的步骤,具体是调用分配函数进行内存分配,指定申请大小,根据申请大小找出高频区域、一般区域对应的空闲块链表; 从该空闲块链表中查找与申请大小对应的空闲块,若找到,将该空闲块从该空闲块链表中删除,并标记该空闲块已分配,进入下一步,若未找到,从大一级的空闲块链表中查找若找到,则对找到的大一级空闲块进行分割处理,并标记该大一级空闲块,进入下一步,若未找到,则进一步查找有无更大的空闲块,若无,则启动合并扫描处理,并当合并成功时,对该大一级空闲块进行分割处理,并标记该大一级空闲块,进入下一步; 得到分配块的首地址,加入统计信息子系统进行统计,对该分配块进行诊断,并返回该分配块的首地址。
9.根据权利要求7所述的存储管理方法,其特征在于,所述步骤一中,还包括对用户系统的内存进行释放的步骤,具体是 调用释放函数,指定待释放块的首地址; 根据该首地址找出对应的分配块,根据配置策略决定是否对该分配块的周围块进行合并若是,则对周围块进行双向合并,并将得到的合并区间进行处理,标记该合并区间可用,进入下一步,若否,直接进入下一步; 启动统计信息子系统进行处理,启动诊断子系统进行诊断; 将空闲块加入空闲链表。
10.根据权利要求9所述的存储管理方法,其特征在于,所述步骤二中,还包括 统计信息子系统对周围块合并的次数和周围块的信息进行统计; 诊断子系统对分配和合并过程中的内部逻辑是否正确进行诊断。
全文摘要
本发明公开了一种存储管理系统及其存储管理方法,其中该存储管理系统包括分配子系统,用于结合根据用户系统的内存使用分布情况所配置的策略与内存分配和回收算法高效分配和回收用户系统的内存,以优化用户系统的内存使用;统计信息子系统,连接所述分配子系统,用于获取用户系统的内存使用分布情况的统计信息,以便于所述分配子系统高效分配和回收用户系统的内存;诊断子系统,连接所述分配子系统,用于诊断用户系统的内存使用异常。本发明提高嵌入式存储管理系统的空间利用效率和运行的时间效率;提供完整、准确、实时的诊断信息和统计分布信息,帮助开发人员迅速定位系统存在的问题。
文档编号G06F12/02GK102866953SQ201110190710
公开日2013年1月9日 申请日期2011年7月8日 优先权日2011年7月8日
发明者张翀, 韩兆强, 冀德 申请人:风网科技(北京)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1