一种针对嵌入式系统的内存分配方法技术方案

技术编号:24251285 阅读:61 留言:0更新日期:2020-05-22 23:26
本发明专利技术提供了一种针对嵌入式系统的内存分配方法,在TLSF算法的基础上进行了改进,加入了内存分块和参数自适应调节,能够根据申请大小来自适应调节每个内存块的内存分配结构,碎片率低。本发明专利技术在TLSF算法的基础上进行了改进,加入了内存分块和参数自适应调节,提高了内存利用率。其中,将内存区间进行分块,得到两个内存子区间,根据申请大小来自适应调节每个内存子区间的内存分配结构,从而在保证实时性的同时有效地降低碎片率。

A memory allocation method for embedded system

【技术实现步骤摘要】
一种针对嵌入式系统的内存分配方法
本专利技术属于内存分配
,具体涉及一种针对嵌入式系统的内存分配方法。
技术介绍
随着物联网技术的发展,嵌入式实时操作系统得到越来越广泛的应用。嵌入式实时操作系统对动态内存分配的实时性、碎片率、可靠性有更高的要求,因此,动态内存分配已成为嵌入式实时操作系统的一个重要研究内容。嵌入式实时系统中,内存分配具有重要的意义,它是操作系统的一个重要模块,包括内存的分配和释放。内存分配的好坏直接关系着嵌入式系统的可靠性和稳定性。从时间分配上,内存分配的分配策略可分为静态内存分配和动态内存分配。动态内存分配中存储空间是按需分配,并且被释放的内存块可以再次参与分配,因此动态内存分配内存资源利用率比静态内存分配高。静态内存分配是在栈上进行的,在栈上进行大量静态分配是很危险的,若栈溢出时,多出的数据会覆盖掉相邻堆栈的数据,甚至会破坏内核造成系统崩溃。动态分配可避免这一状况,大块内存的分配必须采取动态内存分配。因此,为了实时嵌入式系统开发中更好的使用动态内存分配策略,越来越多的研究人员开始关注内存分配的实时性及内存碎片问题。频繁的动态内存分配操作会产生大量内存碎片的产生,影响系统性能,所以在不同的系统中,对于内存分配管理,开发了许多不同的内存分配算法,典型的实时系统动态内存分配算法有顺序查找算法、伙伴算法、Half-Fit算法、位示图算法以及TLSF算法。从实时性、内存碎片率这两方面考虑,TLSF(Two-levelSegregatedFit)算法是最合适的动态内存分配算法。TLSF(Two-levelSegregatedFit)算法即二级间隔表动态内存分配算法。算法通过二级索引将空闲内存块组织起来。第1级索引按2的幂次将内存分为多个区域;第2级索引在第1级索引划分的内存区域里再进行线性分割。第2级索引的每一位都对应一条空闲内存链表。为了提高实时性,TLSF通过双击位图快速索引到大小合适的空闲内存块。为了减少内存碎片,TLSF算法在内存分配和释放时采用了切割和合并技术,当算法返回的空闲内存大小大于所请求的空闲内存大小时,将空闲内存块切割为两部分,一部分用于分配,另一部分作为新的空闲块插入到空闲链表中;在内存释放时,判断相邻物理空间上的内存块是否空闲块,若都为空闲内存块,则两个空闲块合并成一个更大的空闲块。TLSF算法的切割与合并策略降低了内存碎片率。TLSF(Two-levelSegregatedFit)是一种二级隔离适应算法,使用位图(Bitmaps)与分组空闲链表(SegregatedList)相结合的方式对内存进行管理。通过两级隔离链表组织空闲队列,并且对于每一级链表都使用位图法标记其是否含有空闲块。第一级链表按照2的幂次方划分,第二级链表在由第一级链表划分的范围之内进行再次划分,第二级链表的每一级别都对应一条空闲链表。查找时,先根据请求的内存大小计算出最合适的一级,二级链表的索引值,直接查看对应的位图标记,如果标记该级链表上有空闲块,则直接从该级链表上取;如果由计算所得的两级索引值指定的链表上没有空闲块,则需要进行二次查找,通过位操作查找操作,寻找大于当前请求的最小大小空闲链表进行分配。在分配和释放过程中,需要适当的调整位图和链表管理信息。TLSF算法实现过程中的三个参数(MAX_FLI、MAX_SLI、MBS):(1)一级索引MAX_FLI(不超过32):该索引标识一级链表长度,内存区共被划分成REAL_FLI(MAX_FLI-FLI_OFFSET)个大的内存块区间,一级索引值为fl的内存区间为[2fl,2fl+1)。参数FLI_OFFSET定义了最小一级索引的内存大小[0,2FLI_OFFSET+1),低于此内存的所用内存块在此区间分配。(2)二级索引MAX_SLI(不超过5):MAX_SLI等于2的MAX_LOG2_SLI次方(MAX_LOG2_SLI为程序中计算方便定义的),二级索引将一级索引划分的内存区域按照线性再次划分。MAX_SLI的值可人为设定,若MAX_SLI=3,则一级索引划分的内存区被平均划分成8段。MAX_SLI的值越大,则将内存区划分得越细,但一般而言,MAX_SLI不超过5。若MAX_SLI的值超过5,则2的MAX_SLI次幂超过32,无法用位图表示。(3)最小块大小MBS(MBS=2FLI_OFFSET+1):这个参数是定义最小块的大小,最小块的大小一般定义为16Bytes,块大小也可根据用户的实际需求而更改。当MAX_FLI=31、MAX_SLI=3、MBS=32时,TLSF数据结构如图1所示。其中,fl为一级索引值,s1为二级索引值。FL_Bitmap和SL_Bitmap表示位图。该结构图中的每一个方框为一条空闲链表,每条链表可链接多个空闲内存块,如104这个链表存储空闲内存大小为104~111之间的所有空闲内存块地址。TLSF算法的过程理论上为:初始化内存函数init_memory_pool初始整个内存池,并将总的空闲内存块存入二级链表中,即init_memory_pool之前,该内存分配结构全空,没有可用空闲内存,init_memory_pool之后,在该结构中插入一个最大的可用空闲内存,后面的申请过程中,将该大内存块不断切割,插入链表中相应位置。TLSF算法结构图如图1所示。利用下述公式(1)确定所申请空闲内存处于的链表位置:TLSF算法虽实时性好、内存碎片率相对较小,但其三个参数(MAX_FLI、MAX_SLI、MBS)一旦设定好,其算法数据结构就固定不变了,无法根据实际的任务申请内存大小情况做出调节,从而造成了一定了内存碎片和实时性的降低。例如当某个任务需要申请一系列小内存时,若TLSF算法MAX_SLI设置较小(即划分不够精细),就会造成很多的内存碎片,碎片率会很高。
技术实现思路
有鉴于此,本专利技术提供了一种针对嵌入式系统的内存分配方法,在TLSF算法的基础上进行了改进,加入了内存分块和参数自适应调节,能够根据申请大小来自适应调节每个内存块的内存分配结构,碎片率低。为实现上述目的,本专利技术的一种针对嵌入式系统的内存分配方法,包括如下步骤:首先进行内存区间初始化:将整个内存区间平均分为两块子区间,对每块内存子区间的MAX_FLI、MAX_SLI以及MBS参数值进行初始化;然后开始在第一块内存子区间内进行内存分配,并记录每次内存分配大小;当第一块内存子区间分配完毕后,根据记录的第一块内存子区间每次内存分配大小,计算出即将到来的内存分配大小预测值,根据预测值调节第二块内存子区间的MAX_SLI以及MBS参数值,并开始在第二块内存子区间中进行分配;当第二块内存子区间分配完毕后,若第一块内存子区间全部释放完毕,则根据记录的第二块内存子区间每次内存分配大小,计算出即将到来的内存分配大小预测值,根据当前预测值调节第一块内存子区间的MAX_SLI以及MBS参数值,开始在第一块内存子区间中进行分配;若第一块内存本文档来自技高网
...

【技术保护点】
1.一种针对嵌入式系统的内存分配方法,其特征在于,包括如下步骤:/n首先进行内存区间初始化:将整个内存区间平均分为两块子区间,对每块内存子区间的MAX_FLI、MAX_SLI以及MBS参数值进行初始化;/n然后开始在第一块内存子区间内进行内存分配,并记录每次内存分配大小;/n当第一块内存子区间分配完毕后,根据记录的第一块内存子区间每次内存分配大小,计算出即将到来的内存分配大小预测值,根据预测值调节第二块内存子区间的MAX_SLI以及MBS参数值,并开始在第二块内存子区间中进行分配;/n当第二块内存子区间分配完毕后,若第一块内存子区间全部释放完毕,则根据记录的第二块内存子区间每次内存分配大小,计算出即将到来的内存分配大小预测值,根据当前预测值调节第一块内存子区间的MAX_SLI以及MBS参数值,开始在第一块内存子区间中进行分配;若第一块内存子区间没有完全释放完毕,则不作调节,直接开始在第一块内存子区间中进行分配。/n

【技术特征摘要】
1.一种针对嵌入式系统的内存分配方法,其特征在于,包括如下步骤:
首先进行内存区间初始化:将整个内存区间平均分为两块子区间,对每块内存子区间的MAX_FLI、MAX_SLI以及MBS参数值进行初始化;
然后开始在第一块内存子区间内进行内存分配,并记录每次内存分配大小;
当第一块内存子区间分配完毕后,根据记录的第一块内存子区间每次内存分配大小,计算出即将到来的内存分配大小预测值,根据预测值调节第二块内存子区间的MAX_SLI以及MBS参数值,并开始在第二块内存子区间中进行分配;
当第二块内存子区间分配完毕后,若第一块内存子区间全部释放完毕,则根据记录的第二块内存子区间每次内存分配大小,计算出即将到来的内存分配大小预测值,根据当前预测值调节第一块内存子区间的MAX_SLI以及MBS参数值,开始在第一块内存子区间中进行分配;若第一块内存子区间没有完全释放完毕,则不作调节,直接开始在第一块内存子区间中进行分配。


2.如权利要求1所述的针对嵌入式系统的内存分配方法,其特征在于,采用加权移动平均滤波法计算出即将到来的分配内存大小预测...

【专利技术属性】
技术研发人员:高明晋姚亚芬周一青石晶林
申请(专利权)人:中科晶上苏州信息技术有限公司
类型:发明
国别省市:江苏;32

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

1