嵌入式系统静态内存池的分配方法技术方案

技术编号:12172546 阅读:87 留言:0更新日期:2015-10-08 10:14
本发明专利技术公开了一种嵌入式系统静态内存池的分配方法,采用内存池裂变思想进行内存池分配,即通过内存池的逐次裂变,根据内存池的不同裂变方式下总内存碎片最小,选择最佳的内存池裂变方式,由此将原内存池中的一个内存池裂变为两个内存池。依次按照上述方式进行内存池裂变,内存池的每次裂变引入一个新内存池,当引入的内存池个数满足嵌入式系统即终止内存池裂变。本发明专利技术算法精度显著高于矢量量化法,而其算法复杂度仅为O(NM)。

【技术实现步骤摘要】

本专利技术设及一种静态内存分配方法,尤其是一种应用于移动终端系统静态内存池 的分配方法。
技术介绍
当前嵌入式系统的应用非常广泛,嵌入式系统受体积、功耗等限制,所集成的内存 往往较小,因此在嵌入式系统设计中如何提高内存使用效率成为人们非常关屯、问题。嵌入 式系统一般使用在实时性比较高的场合,一般情况下会集成一个实时操作系统,下面W应 用于移动终端(手机终端或卫星终端)的操作系统NucleusPlus为例进行说明。 NucleusPlus操作系统是对物理内存进行管理,内存分配分为动态内存分配和静 态内存分配。动态内存分配是从一块足够大的内存中动态地分配或回收请求大小内存块; 而静态内存分配是从已分配好的内存池的单块内存(各单块内存大小相等)中的申请一块 内存。在系统初始化过程中,需要根据系统申请静态内存的情况来确定初始内存池个数M、 内存池的单块内存大小YW及单块内存个数L。初始内存池个数越多,内存碎片越少,内存 管理也越复杂。在实际嵌入式操作系统中,通常为了静态内存管理方便,而严格控制初始内 存池个数,从而造成大量静态内存碎片,因此需要采用静态内存池分配算法将系统总内存 碎片控制在一定范围内。 静态内存池分配方法评估准则为;在内存池个数一定情况下,总内存碎片是否最 小。当前静态内存池分配方法为枚举法和矢量量化法。枚举法是;对申请的静态内存块X按 照从小到大顺序排序;根据内存块X的最小、最大值确定内存池单块内存大小所有可能值 Y,共N个;计算在N个值中取M个内存池的所有组合数;每个组合数可W确定1组内存池, 将申请的静态内存块X根据在该组内存池按照其单块内存池大小进行分组,计算各内存池 的总内存碎片;当总内存碎片最小时,其对应组合数所确定的M个内存池为最优内存池分 配。其计算复杂度巧其中N!表示N的阶乘。 矢量量化法是首先在申请的静态内存块X的最小、最大值之间,随机选取M个值G, 将申请内存块X按照与G之间距离最小,分为M个内存池;计算每个内存池内所有内存块与 其均值的均方误差并求和;用各内存池的内存块均值更新G并再次进行上述计算;当最近 两次迭代得到的内存块均方误差和之间的误差足够小时,则由G确定的M个内存池作为最 终分配的内存池。其计算复杂度与迭代次数有关。 使用枚举法进行静态内存池分配可W得到最小的内存碎片值,然而当静态内存块 X的最大值较大(大于1〇5字节),内存池个数M较大(大于20)时,其计算复杂度为几乎 不可计算值。使用矢量量化法进行静态内存分配很难得到较小的总内存碎片值,该方法精 度与初始M个内存池分布有关,并且该方法收敛性不好,因此算法精度很难提高。
技术实现思路
鉴于W上问题,本专利技术的目的在于提供一种适应于移动终端系统的嵌入式系统静 态内存池分配方法。本方法采用内存池裂变思想进行内存池分配,即通过内存池的逐次裂 变,根据内存池的不同裂变方式下总内存碎片最小,选择最佳的内存池裂变方式,由此将原 内存池中的一个内存池裂变为两个内存池。依次按照上述方式进行内存池裂变,内存池的 每次裂变引入一个新内存池,当引入的内存池个数满足嵌入式系统即终止内存池裂变。本 专利技术算法精度显著高于矢量量化法,而其算法复杂度仅为〇(NM)。 本专利技术提供的静态内存池的分配方法为递推过程,包含W下主要过程: A.利用嵌入式操作系统统计,当前系统中静态内存块个数I及每个静态内存块大 小X(i),同时初始化内存池个数M; B.计算内存池的所有可能边界值; C.计算第1个内存池的边界值; D.将所述第1个内存池裂变为两个,并确定第2个内存池的边界值; E.将D中得到的所述两个内存池裂变为S个,并确定第3个内存池的边界值; F.逐次进行上述内存池裂变过程,当总内存池个数为M时,则静态内存池分配过 程结束。 进一步的,所述计算内存池的所有可能边界值,具体为;假定内存池分配的最小单 位值为S(其取值范围为字或字的整数倍);则内存池的最小边界值为K〇) =表示向上取整;在内存池 的最小和最大边界值之间,W步长S为间隔的所有内存值为内存池的所有可能边界值,见 公式(1)。内存池则由其单块内存的最大边界值唯一决定。X(l)表示静态内存块大小。 进一步的,所述计算第一个内存池的边界值,具体为;最大边界值为第一个内存池 的最大边界值,即所有申请的静态内存块都小于或等于该最大边界值。按照公式(2)计算 此时总内存碎片值,即所有申请的静态内存块与最大边界值之差的绝对值并累加。 进一步的,所述将第一内存池裂变为两个,并确定第2个内存池边界值,具体为: 在最小边界值与最大边界值之间,W步长为S,不包括最大边界值的所有边界值中,依次取 1个边界值作为新边界值,将小于新边界值的所有申请静态内存块作为第2个内存池的最 大边界值,将大于新边界值并且小于或等于最大边界值的所有申请静态内存块作为第1个 内存池的最大边界值,按照公式(3)计算此时总内存碎片值,即各内存池的最大边界值与 其中静态内存块之差的绝对值并累加。由于新边界值取值范围不同,因此可W得到若干个 总内存碎片,取最小总内存碎片所在新边界值作为第2个内存池边界值。为方便描述,假定 已确定的2个内存池的最大边界值按照从小到大顺序排序并进行更新。 进一步的,所述将两个内存池裂变为=个,并确定第3个内存池边界值,具体为: 根据新边界值小于第1个内存池的最大边界值,还是大于第1个内存池的最大边界值并且 小于或等于第2个内存池的最大边界值,分为两种情况。情况1中,将第1个内存池由新边 界值裂变为2个内存池,将小于或等于此时3个内存池最大边界的静态内存块与各自内存 池最大边界值之差的绝对值并累计,得到总内存碎片值,见公式(4)。情况2中,将第2个内 存池由新边界值裂变为2个内存池,将小于或等于此时3个内存池最大边界的静态内存块 与各自内存池最大边界值之差的绝对值并累计,得到总内存碎片值,见公式(4)。将情况1、 2中,所有新边界值取值范围得到的总内存池碎片值最小所在新边界值作为第3个内存池 的最大边界值。 为了进一步提高静态内存池划分精度,在M-定情况下使总内存池更好,可W采 取下述过程: a、初始化内存池个数为M1,使其满足MDM; b、按照所述B、C、D、E的方式使内存池裂变后其个数为M1,并得到其各内存池上边 界值Y(ni),^n2),…,;C、依次将内存池上边界值Y(叫),^叫),…,取消,分别根据新的M1-1个边 界值^ni),Y(n2),…,Y(nMH)对静态内存块X(i),i= 1:1划分,得到为各内存池的单块内 存,即X(i),i= 1:1。i=1:12,…,i= 则内存池上边界取消后总内存碎片C(n) 为: 其中n= 取C(n)中最小值n所对应的内存池上边界值,将其取消,从而 将Ml个内存池减少为M1-1个内存池;t依次进行上述步骤C的内存池的取消过程,每次取消1个内存池,直到内存池个 数为M时,终止内存池的取消过程,即最终完成M个静态内存池的分配过程。 采用本申请方法,不但使内存分配方法计算复杂度得到大幅度降低,而且尽可能 减少了内存碎片,从而提高了内存利用率。【附图说明】当前第1页1 2 3 本文档来自技高网
...
<a href="http://www.xjishu.com/zhuanli/55/CN104965795.html" title="嵌入式系统静态内存池的分配方法原文来自X技术">嵌入式系统静态内存池的分配方法</a>

【技术保护点】
嵌入式系统静态内存池的分配方法,其特征在于:该分配方法为递推过程,具体如下:A.利用嵌入式操作系统统计,当前系统中静态内存块个数及每个静态内存块大小,同时初始化内存池个数M;B.计算内存池的所有可能边界值;C.计算第1个内存池的边界值;D.将所述第1个内存池裂变为两个,并确定第2个内存池的边界值;E.将D中得到的所述两个内存池裂变为三个,并确定第3个内存池的边界值;F.逐次进行上述内存池裂变过程,当总内存池个数为M时,则静态内存池分配过程结束。

【技术特征摘要】

【专利技术属性】
技术研发人员:吴广富王俊伟李云曹傧
申请(专利权)人:重庆邮电大学
类型:发明
国别省市:重庆;85

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1