嵌入式系统内存池配置方法及装置的制作方法

文档序号:6331959阅读:185来源:国知局
专利名称:嵌入式系统内存池配置方法及装置的制作方法
技术领域
本发明涉及内存管理技术,更具体地说,涉及一种嵌入式系统内存池配置方法及装置。
背景技术
在现有的嵌入式系统内存管理技术中,为了满足高效分配和回收,以及尽可能减 少内存碎片的需要,往往采用内存池集的内存管理方法。此方法的基本思想是将内存划分 为若干个连续内存区域,每个内存区域又继续划分为若干个大小相同的内存块,每个内存 区域就是一个内存池,所有内存区域就组成一个内存池集。当有内存分配申请时,遍历整个 内存池集,找到大小最匹配的内存池,从中分配空闲内存块。基于上述内存管理方法的嵌入式应用,开发人员需要先根据应用使用内存情况, 预先估计各内存池的内存块数量,然后在应用代码中做好配置,并编译到最终的嵌入式应 用程序中。在实际中,往往很难一次估计出应用程序使用的内存数量,通常是在反复测试 后,才能确定出最终的配置。而且,一旦应用程序使用内存情况有变化,也需要重新调整内 存配置。由于嵌入式应用程序往往是烧录到非易失存储器中,频繁调整配置就需要频繁的 烧录,这给开发带来极大的不便。而且,常常出现发布版本的配置不合适,测试无法进行下 去,需要升级版本,从而影响了测试进度。因此,这种配置方式极不灵活。现有的嵌入式系统内存管理相关专利技术中,往往专注于内存池分配和回收算 法,而很少提及如何解决内存池配置易用性问题。专利CN200610166525给出了一种动态内 存池的实现方法,其内存池可以动态的扩充和回收,不需开发人员配置,然而这种内存管理 机制实现复杂,在嵌入式系统处理数据量大时,频繁地扩充和回收必然导致内存分配和释 放的效率降低,对于实时性要求较高的嵌入式系统不是最优选择。

发明内容
本发明提供一种嵌入式系统内存池配置方法及装置,用以解决根据嵌入式应用程 序使用内存的情况自动调整内存池配置的问题。本发明技术方案如下一种嵌入式系统内存池配置方法,包括步骤步骤A、在嵌入式应用程序上电初始化阶段,读取内存池配置文件,根据读取到的 内存池配置数据申请相应大小的配置缓存,将所述内存池配置数据写入所述配置缓存中, 并建立相应的内存池;步骤B、在嵌入式应用程序运行阶段,根据内存分配/释放情况实时更新配置缓存 中相应内存池的当前使用值,并在内存池的当前使用值大于该内存池的使用峰值时,将配 置缓存中该内存池的使用峰值更新为其当前使用值;步骤C、在嵌入式应用程序关电或复位阶段,比较每个内存池在配置缓存中记录的 使用峰值是否大于在内存池配置文件中记录的内存块数,如果是,则将内存池配置文件中记录的内存块数更新为所述使用峰值。进一步地,所述内存池配置文件中记录了配置文件更新标志、每个内存池的内存 块大小和内存块数。进一步地,所述配置缓存按内存池个数等分为若干个配置项,每个配置项对应一 个内存池的配置,其中包括内存池的内存块大小,当前使用值及使用峰值。进一步地,所述配置缓存中内存池的当前使用值的初始值为零,内存池的使用峰 值的初始值为内存池配置文件中相应内存池的内存块数。进一步地,所述根据内存分配情况实时更新配置缓存中相应内存池的当前使用值 的具体过程为Bi、判断嵌入式应用程序申请的内存大小是否小于最大内存池的内存块大小,若 是,执行步骤B2,否则,使用其它预设策略进行内存分配;B2、从所有内存池中查找最匹配的内存池,将其作为当前内存池,判断当前内存池 中是否有空闲内存块,若有,直接执行步骤B3,否则,使用其它预设策略分配新的内存区域, 将其划分为本内存池的内存块,执行步骤B3 ;B3、从当前内存池分配内存块,将当前内存池的当前使用值加1,若加1后的当前 使用值大于当前内存池的使用峰值,则将配置缓存中该内存池的使用峰值变换为加1后的 当前使用值。进一步地,所述步骤C具体包括Cl、判断是否存在内存池配置文件,若是,执行步骤C2,否则,流程结束;C2、读取内存池配置文件中配置文件更新标志,判断是否需更新配置文件,若是, 执行步骤C3,否则,关闭内存池配置文件;C3、依次读取内存池配置文件中各内存池的内存块数,将内存池配置文件中小于 配置缓存中相应项使用峰值的内存池的内存块数更新为所述使用峰值后,关闭内存池配置 文件。一种嵌入式系统内存池配置装置,包括配置缓存建立模块,用于在嵌入式应用程序上电初始化阶段,读取内存池配置文 件,根据读取到的内存池配置数据申请适当大小的配置缓存,将所述内存池配置数据写入 所述配置缓存中,并建立相应的内存池;配置缓存更新模块,用于在嵌入式应用程序运行阶段,根据内存分配/释放情况 实时更新配置缓存中相应内存池的当前使用值,并在内存池的当前使用值大于该内存池的 使用峰值时,将配置缓存中该内存池的使用峰值更新为其当前使用值;配置文件更新模块,用于在嵌入式应用程序关电或复位阶段,比较每个内存池在 配置缓存中记录的使用峰值是否大于在内存池配置文件中记录的内存块数,如果是,则将 内存池配置文件中记录的内存块数更新为所述使用峰值。进一步地,所述内存池配置文件中记录了配置文件更新标志、每个内存池的内存 块大小和内存块数。进一步地,所述配置缓存按内存池个数等分为若干个配置项,每个配置项对应一 个内存池的配置,其中包括内存池的内存块大小,当前使用值及使用峰值。进一步地,所述配置缓存中内存池的当前使用值的初始值为零,内存池的使用峰值的初始值为内存池配置文件中相应内存池的内存块数。本发明有益效果如下本发明可以在不升级嵌入式应用程序的情况下,根据程序使用内存的情况自动调 整内存配置文件,提高了嵌入式系统内存管理模块的易用性,降低了维护难度,而且实现简 单,不影响内存的高效分配和回收,适合于实时性要求较高的嵌入式系统。


为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现 有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图仅仅是 本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还 可以根据这些附图获得其他的附图。图1为本发明实施例中嵌入式系统的结构示意图;图2为本发明实施例中嵌入式系统内存池配置方法的实现原理流程图;图3为本发明实施例所述嵌入式系统内存池配置方法中建立配置缓存的流程图;图4为本发明实施例所述嵌入式系统内存池配置方法中分配内存块时,更新配置 缓存的流程图;图5为本发明实施例所述嵌入式系统内存池配置方法中释放内存块时,更新配置 缓存的流程图;图6为本发明实施例所述嵌入式系统内存池配置方法中更新内存池配置文件的 流程图;图7为本发明实施例所述嵌入式系统内存池配置装置的结构框图。
具体实施例方式为克服了现有技术中存在的嵌入式系统内存池配置不灵活的问题,本发明提供一 种嵌入式系统内存池配置方法及装置,本发明可以在不升级嵌入式应用程序的情况下,根 据嵌入式应用程序使用内存的情况自动调整内存池配置,从而提高了嵌入式系统内存管理 的易用性,降低了嵌入式应用程序的维护难度。下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完 整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于 本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他 实施例,都属于本发明保护的范围。请参阅图1,该图为本发明实施例中嵌入式系统的结构示意图,主要包含以下部 分内存池配置文件用于记录内存池配置的数据,其中记录了配置文件更新标志、各 内存池的内存块大小和内存块数;非易失存储器用于储存内存池配置文件的物理介质;嵌入式应用程序运行在嵌入式CPU上的软件程序,包含嵌入式操作系统内核、内 存管理模块、文件系统和非易失存储器驱动等功能模块;其中,所述内存管理模块可以实现内存分配和释放,同时,记录内存池的当前使用值和峰值。所述文件系统和非易失存储器驱动则用于对存储在非易失存储器上的内存池配 置文件进行读写操作。本发明实施例提供了一种嵌入式系统内存池配置方法,请参阅图2,该图为本发明 实施例中嵌入式系统内存池配置方法的实现原理流程图,其主要包括如下步骤S20,在嵌入式应用程序上电初始化阶段,读取内存池配置文件,获取内存池的个 数、每个内存池的内存块大小和内存块数;S21,根据获取到的内存池配置数据从嵌入式操作系统申请相应大小的配置缓存, 并将获取到的内存池配置数据写入配置缓存中;S22,根据配置缓存中各内存池的内存块大小和内存块数,建立相应的内存池;S23,在嵌入式应用程序运行阶段,根据内存分配/释放情况实时更新配置缓存中 相应内存池的当前使用值,并在内存池的当前使用值大于该内存池的使用峰值时,将配置 缓存中该内存池的使用峰值更新为其当前使用值;S24,在嵌入式应用程序关电或复位阶段,若判定需更新内存池配置文件,则比较 每个内存池在配置缓存中记录的使用峰值是否大于在内存池配置文件中记录的内存块数, 如果是,则将内存池配置文件中记录的内存块数更新为所述使用峰值。请参阅图3,该图为本发明实施例所述嵌入式系统内存池配置方法中建立配置缓 存的流程图,其主要包括如下步骤S101,打开内存池配置文件,如果成功,则进入S102,否则,进入S103 ;S102,读取内存池配置文件,获取内存池的个数、每个内存池的内存块大小和内存 块数,根据获取到的内存池配置数据计算出配置缓存的大小;S103,使用嵌入式应用程序中的默认配置作为实际的内存池配置,进入S107 ;S104,从嵌入式操作系统中申请配置缓存,配置缓存按内存池个数等分为若干个 配置项,每个配置项对应一个内存池的配置,其中包括内存池的内存块大小、当前使用值及 使用峰值,配置缓存中内存池的当前使用值的初始值为零,内存池的使用峰值的初始值为 内存池配置文件中相应内存池的内存块数;S105,读取内存池配置文件中各个内存池的内存块大小及内存块数,将其写入配 置缓存中对应的配置项;S106,关闭配置文件,将配置缓存作为实际的内存池配置;S107,根据实际的内存池配置中,各个内存池的内存块大小和内存块数,在连续的 内存区域,建立相应数量的内存池。请参阅图4,该图为本发明实施例所述嵌入式系统内存池配置方法中分配内存块 时,更新配置缓存的流程图,其主要包括如下步骤S201,判断嵌入式应用程序申请的内存大小是否小于最大内存池的内存块大小, 如果是,则进入S202,否则,进入S203 ;S202,遍历所有内存池,从中查找最匹配的内存池,将其作为当前内存池;S203,使用其它预设策略进行内存分配,例如,使用malloc直接从嵌入式操作系 统申请内存;S204,判断当前内存池中是否有空闲的内存块,如果有,则进入S206,否则,进入 S205 ;
S205,向当前内存池中注水,即从嵌入式操作系统直接申请新内存区域,将其划分 为本内存池的内存块;S206,从当前内存池分配内存块,且将配置缓存中该内存池的当前使用值加1 ;S207,判断当前内存池的当前使用值是否大于使用峰值,如果是,则进入S208,否 则,结束分配;S208,将配置缓存中该内存池的使用峰值设置为其当前使用值,结束分配。请参阅图5,该图为本发明实施例所述嵌入式系统内存池配置方法中释放内存块 时,更新配置缓存的流程图,其主要包括如下步骤S301,判断被释放的内存块是否属于配置缓存中的内存池,如果是,则进入S302, 否则,进入S303 ;S302,释放内存块,将配置缓存中相应的内存池的当前使用值减1,流程结束。S303,使用其它策略释放,此释放流程对应于S203分配的流程,例如,使用free释 放,流程结束。请参阅图6,该图为本发明实施例所述嵌入式系统内存池配置方法中更新内存池 配置文件的流程图,其主要包括如下步骤S401,判断是否存在内存池配置文件,如果是,则进入S402,否则,此流程结束;S402,读取内存池配置文件中的配置文件更新标志,判断是否需要更新内存池配 置文件,如果是,则进入S403,否则,进入S407 ;S403,判断内存池遍历是否结束,如果是,则进入S407,否则,进入S404 ;S404,将下一个内存池作为当前内存池,读取内存池配置文件中该内存池的内存 块数;S405,判断内存池配置文件中当前内存池的内存块数是否小于配置缓存相应内存 池项的使用峰值,如果是,则进入S406,否则,进入S403 ;S406,将内存池配置文件中当前内存池的内存块数更新为配置缓存中该内存池的 使用峰值,进入S403 ;S407,关闭内存池配置文件。相应地,本发明实施例还提供了一种嵌入式系统内存池配置装置,请参阅图7,该 图为本发明实施例所述嵌入式系统内存池配置装置的结构框图,其主要包括配置缓存申请模块,用于在嵌入式应用程序上电初始化阶段,读取内存池配置文 件,根据读取到的内存池配置数据申请适当大小的配置缓存,将所述内存池配置数据写入 所述配置缓存中,并建立相应的内存池;配置缓存更新模块,用于在嵌入式应用程序运行阶段,根据内存分配/释放情况 实时更新配置缓存中相应内存池的当前使用值,并在内存池的当前使用值大于该内存池的 使用峰值时,将配置缓存中该内存池的使用峰值更新为其当前使用值;配置文件更新模块,用于在嵌入式应用程序关电或复位阶段,判断是否需更新内 存池配置文件,若是,则比较每个内存池在配置缓存中记录的使用峰值是否大于在内存池 配置文件中记录的内存块数,如果是,则将内存池配置文件中记录的内存块数更新为所述 使用峰值。其中,内存池配置文件中记录了配置文件更新标志、每个内存池的内存块大小和内存块数。配置缓存按内存池个数等分为若干个配置项,每个配置项对应一个内存池的配 置,其中包括内存池的内存块大小,当前使用值及使用峰值;配置缓存中内存池的当前使 用值的初始值为零,内存池的使用峰值的初始值为内存池配置文件中相应内存池的内存块数。采用本发明实施例所述技术方案后,在嵌入式应用程序的测试阶段,开发人员即 可根据嵌入式应用程序可能需要的内存池和内存块数,创建内存池配置文件,同时,打开配 置文件更新标志,然后运行完所有软件测试用例,便可以获取到嵌入式应用程序实际所需 的最佳内存配置。此时,就可以关闭配置文件更新标志,在实际产品版本中使用最佳内存配置。显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精 神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围 之内,则本发明也意图包含这些改动和变型在内。
权利要求
一种嵌入式系统内存池配置方法,其特征在于,包括步骤步骤A、在嵌入式应用程序上电初始化阶段,读取内存池配置文件,根据读取到的内存池配置数据申请相应大小的配置缓存,将所述内存池配置数据写入所述配置缓存中,并建立相应的内存池;步骤B、在嵌入式应用程序运行阶段,根据内存分配/释放情况实时更新配置缓存中相应内存池的当前使用值,并在内存池的当前使用值大于该内存池的使用峰值时,将配置缓存中该内存池的使用峰值更新为其当前使用值;步骤C、在嵌入式应用程序关电或复位阶段,比较每个内存池在配置缓存中记录的使用峰值是否大于在内存池配置文件中记录的内存块数,如果是,则将内存池配置文件中记录的内存块数更新为所述使用峰值。
2.如权利要求1所述的方法,其特征在于,所述内存池配置文件中记录了配置文件更 新标志、每个内存池的内存块大小和内存块数。
3.如权利要求1所述的方法,其特征在于,所述配置缓存按内存池个数等分为若干个 配置项,每个配置项对应一个内存池的配置,其中包括内存池的内存块大小,当前使用值及 使用峰值。
4.如权利要求3所述的方法,其特征在于,所述配置缓存中内存池的当前使用值的初 始值为零,内存池的使用峰值的初始值为内存池配置文件中相应内存池的内存块数。
5.如权利要求1所述的方法,其特征在于,所述根据内存分配情况实时更新配置缓存 中相应内存池的当前使用值的具体过程为Bi、判断嵌入式应用程序申请的内存大小是否小于最大内存池的内存块大小,若是,执 行步骤B2,否则,使用其它预设策略进行内存分配;B2、从所有内存池中查找最匹配的内存池,将其作为当前内存池,判断当前内存池中是 否有空闲内存块,若有,直接执行步骤B3,否则,使用其它预设策略分配新的内存区域,将其 划分为本内存池的内存块,执行步骤B3 ;B3、从当前内存池分配内存块,将当前内存池的当前使用值加1,若加1后的当前使用 值大于当前内存池的使用峰值,则将配置缓存中该内存池的使用峰值变换为加1后的当前 使用值。
6.如权利要求1所述的方法,其特征在于,所述步骤C具体包括Cl、判断是否存在内存池配置文件,若是,执行步骤C2,否则,流程结束;C2、读取内存池配置文件中配置文件更新标志,判断是否需更新配置文件,若是,执行 步骤C3,否则,关闭内存池配置文件;C3、依次读取内存池配置文件中各内存池的内存块数,将内存池配置文件中小于配置 缓存中相应项使用峰值的内存池的内存块数更新为所述使用峰值后,关闭内存池配置文 件。
7.一种嵌入式系统内存池配置装置,其特征在于,包括配置缓存建立模块,用于在嵌入式应用程序上电初始化阶段,读取内存池配置文件,根 据读取到的内存池配置数据申请适当大小的配置缓存,将所述内存池配置数据写入所述配 置缓存中,并建立相应的内存池;配置缓存更新模块,用于在嵌入式应用程序运行阶段,根据内存分配/释放情况实时更新配置缓存中相应内存池的当前使用值,并在内存池的当前使用值大于该内存池的使用 峰值时,将配置缓存中该内存池的使用峰值更新为其当前使用值;配置文件更新模块,用于在嵌入式应用程序关电或复位阶段,比较每个内存池在配置 缓存中记录的使用峰值是否大于在内存池配置文件中记录的内存块数,如果是,则将内存 池配置文件中记录的内存块数更新为所述使用峰值。
8.如权利要求7所述的装置,其特征在于,所述内存池配置文件中记录了配置文件更 新标志、每个内存池的内存块大小和内存块数。
9.如权利要求7所述的装置,其特征在于,所述配置缓存按内存池个数等分为若干个 配置项,每个配置项对应一个内存池的配置,其中包括内存池的内存块大小,当前使用值及 使用峰值。
10.如权利要求9所述的装置,其特征在于,所述配置缓存中内存池的当前使用值的初 始值为零,内存池的使用峰值的初始值为内存池配置文件中相应内存池的内存块数。
全文摘要
本发明公开了一种嵌入式系统内存池配置方法及装置,所述方法包括在上电初始化阶段,读取内存池配置文件,将内存池配置数据写入申请的配置缓存中,并建立相应的内存池;在运行阶段,根据内存分配/释放情况实时更新配置缓存中相应内存池的当前使用值,并在内存池的当前使用值大于该内存池的使用峰值时,将配置缓存中该内存池的使用峰值更新为其当前使用值;在关电或复位阶段,将内存池配置文件中小于配置缓存中相应项使用峰值的内存池的内存块数更新为所述使用峰值。所述装置包括配置缓存建立模块、配置缓存更新模块和配置文件更新模块。本发明可以在不升级嵌入式应用程序的情况下,根据程序使用内存的情况自动调整内存配置文件。
文档编号G06F12/02GK101937398SQ20101028059
公开日2011年1月5日 申请日期2010年9月14日 优先权日2010年9月14日
发明者赖颖军, 黄海伦 申请人:中兴通讯股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1