CN117724991B - 嵌入式系统的动态内存管理方法、系统、终端及存储介质 - Google Patents
嵌入式系统的动态内存管理方法、系统、终端及存储介质 Download PDFInfo
- Publication number
- CN117724991B CN117724991B CN202311771736.4A CN202311771736A CN117724991B CN 117724991 B CN117724991 B CN 117724991B CN 202311771736 A CN202311771736 A CN 202311771736A CN 117724991 B CN117724991 B CN 117724991B
- Authority
- CN
- China
- Prior art keywords
- memory
- target
- area
- page
- pages
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 230000015654 memory Effects 0.000 title claims abstract description 778
- 238000007726 management method Methods 0.000 title claims abstract description 134
- 238000000034 method Methods 0.000 claims abstract description 40
- 230000007787 long-term memory Effects 0.000 claims abstract description 28
- 238000012545 processing Methods 0.000 claims description 16
- 238000004590 computer program Methods 0.000 claims description 5
- 230000000694 effects Effects 0.000 abstract description 2
- 238000010586 diagram Methods 0.000 description 7
- 230000006870 function Effects 0.000 description 5
- 238000013523 data management Methods 0.000 description 4
- 238000013507 mapping Methods 0.000 description 4
- 239000002699 waste material Substances 0.000 description 4
- 239000012634 fragment Substances 0.000 description 3
- 238000011161 development Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 238000000638 solvent extraction Methods 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 239000000284 extract Substances 0.000 description 1
- 238000013467 fragmentation Methods 0.000 description 1
- 238000006062 fragmentation reaction Methods 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000013468 resource allocation Methods 0.000 description 1
Classifications
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Memory System (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本申请涉及一种嵌入式系统的动态内存管理方法、系统、终端及存储介质,其属于动态内存管理技术领域,该方法包括:获取请求内存指令,请求内存指令包括软件类型和占用内存量;根据软件类型确定目标内存区域,目标内存区域为长期内存区域、大内存区域以及小内存区域中的其中一种;在目标内存区域中,判断是否存在内存块大于占用内存量的内存页,内存页至少由一个内存块组成;若是,则将内存块大于且最接近于占用内存量的内存页标记为目标内存页,并将目标内存页中的其中一个空闲内存块分配给嵌入式软件;若否,则将目标内存区域中的其中一个空闲内存页分配给嵌入式软件。本申请具有节约嵌入式系统的内存空间资源的效果。
Description
技术领域
本申请涉及动态内存管理技术领域,尤其是涉及嵌入式系统的动态内存管理方法、系统、终端及存储介质。
背景技术
在嵌入式系统开发过程中,有宿主机和目标机的角色之分:宿主机是执行编译、链接嵌入式软件的计算机;目标机是运行嵌入式软件的硬件平台,例如,PC机就是常用的宿主机,而开发板则是目标机。由于目标机小容量的特性,其不能支持大容量介质,如内嵌可擦除可编程只读存储器(Erasable Programmable Read-Only Memory,E-PROM)和带电可擦可编程只读存储器(Electrically Erasable Programmableread only memory,EEPROM),因此目标机不能实现大容量的存储功能。
现有技术中,为了保障目标机正常运行嵌入式软件,保障嵌入式系统稳定运行。常用的内存管理方法主要包括堆方式和内存池方式,堆方式是在系统堆空间上按照嵌入式软件实际大小来分配一页内存,已经分配的内存页用链表串接管理,但是随着系统运行时间的变长,会产生大量的未被占用的内存碎片。内存池方式是按照一定粒度从小到大划分不同等级大小的内存,每个等级大小的内存配置一定的数量,但是由于不易统计各个等级大小的小内存数量,运行时只能尽量配置,从而造成内存空间的浪费。
因此,现有的嵌入式系统中的内存管理方法,很难满足目标机需要频繁申请内存的要求,使得嵌入式系统的可靠性降低,维护成本变高。
发明内容
本申请提供一种嵌入式系统的动态内存管理方法、系统、终端及存储介质,具有节约嵌入式系统的内存空间资源的特点。
本申请目的一是提供一种嵌入式系统的动态内存管理方法。
本申请的上述申请目的一是通过以下技术方案得以实现的:
在本申请的第一方面,提供了一种嵌入式系统的动态内存管理方法。该方法包括:
获取请求内存指令,所述请求内存指令包括软件类型和占用内存量;
根据所述软件类型确定目标内存区域,目标内存区域为长期内存区域、大内存区域以及小内存区域中的其中一种;
在所述目标内存区域中,判断是否存在内存块大于所述占用内存量的内存页,所述内存页至少由一个内存块组成;
若是,则将所述内存块大于且最接近于所述占用内存量的内存页标记为目标内存页,并将所述目标内存页中的其中一个空闲内存块分配给嵌入式软件,所述空闲内存块为未被占用的内存块;
若否,则将所述目标内存区域中的其中一个空闲内存页分配给嵌入式软件,所述空闲内存页为未被占用的内存页。
通过采用上述技术方案,根据接收到的申请内存指令确定为嵌入式软件提供内存空间的目标内存区域,在目标内存区域内,判断是否存在内存块大于占用内存量的内存页。若存在,将目标内存页中的其中一个空闲内存块分配给嵌入式软件,以便于嵌入式软件占用。否则,调取空闲内存页分配给嵌入式软件占用。也就是说,针对部分内存块被占用的内存页,在嵌入式软件有相同的内存量需求时,优先从该部分的内存页中寻找可利用的内存块;当无法利用部分内存块被占用的内存页时,再继续分配新的空闲内存页,从而减少嵌入式软件占用的内存页个数。因此,本申请能够支持嵌入式软件频繁地向嵌入式系统申请内存量,还能够充分地利用嵌入式软件已经申请的内存空间,从而实现节约嵌入式软件的内存空间资源的目的。
在一种可能的实现方式中:所述将所述目标内存页中的其中一个空闲内存块分配给嵌入式软件,包括:
调取所述目标内存页的第二管理表,所述第二管理表用于管理所述目标内存页;
所述第二管理表从所述目标内存页的空闲内存块中选择排序第一的空闲内存块分配给所述嵌入式软件。
通过采用上述技术方案,由第二管理表有序的将空闲内存块分配给嵌入式软件占用,从而为减少嵌入式软件占用的内存页个数提供技术支持,也能够便于对目标内存页进行管理,从而节约内存空间资源。
在一种可能的实现方式中:所述方法还包括:所述第二管理表中存储有串表信息,所述串表信息用于指向与其相邻的第二管理表,任意两个相邻的第二管理表所管理的内存页的内存块大小相同。
通过采用上述技术方案,管理的内存页的内存块大小相同的多个第二管理表互相关联,从而在定位到其中一个第二管理表且该第二管理表无法为嵌入式软件提供空闲的内存块时,能够由互相关联的第二管理表为嵌入式软件提供空闲的内存块,从而提高本申请的分配内存资源的效率,保障嵌入式软件的及时性。
在一种可能的实现方式中:所述软件类型为仅申请内存而不释放内存的类型和在运行时申请内存而在结束运行时释放内存的类型中的其中一种;
所述根据所述软件类型确定目标内存区域,包括:
当所述软件类型为仅申请内存而不释放内存的类型时,将所述长期内存区域标记为目标内存区域;
当所述软件类型为在运行时申请内存而在结束运行时释放内存的类型时,判断所述小内存区域是否满足:
,
若是,则将所述大内存区域标记为目标内存区域;
若否,则将所述小内存区域标记为目标内存区域。
通过采用上述技术方案,本申请优先在小内存区域中为嵌入式软件分配其所需的内存,以此来避免占用内存量较小的嵌入式软件独占大内存区域中的较大的内存块,即能够节约大内存区域中的内存资源。
在一种可能的实现方式中:所述目标内存区域包括内存页和第一管理表,所述第一管理表用于管理目标内存区域中的所有内存页;
所述第一管理表中配置有定位指针,所述定位指针用于串接所述目标内存区域中的所有空闲内存页。
通过采用上述技术方案,由第一管理表管理内存页,从而为减少嵌入式软件占用的内存页个数提供技术支持。
在一种可能的实现方式中:所述方法还包括:所述定位指针按照“未被占用过且排序在前>被释放在前”的优先级顺序指向所有空闲内存页。
通过采用上述技术方案,使得第一管理表能够动态的管理所有空闲内存页,以保障第一管理表的稳定性。
在一种可能的实现方式中:当所述大内存区域作为所述目标内存区域时,所述方法还包括:
当所述内存块小于所述占用内存量或者不存在空闲内存块时,根据所述占用内存量和预设的内存块配置表将新的内存页划分为多个内存块,并将所述新的内存页的第二行的内存块的地址返回给所述嵌入式软件。
通过采用上述技术方案,当确实不存在空闲的内存块或者内存块小于占用内存量时,则依据占用内存量和预设的内存块配置表将新的内存页划分为多个内存块。由于被划分的新的内存页中,除了第一行被占用外,第二行至最后一行的内存块并未被占用,所以将第二行的内存块的地址返回给嵌入式软件,由嵌入式软件占用第二行的空闲内存块,从而减少嵌入式软件占用的内存页个数。
在本申请的第二方面,提供了一种嵌入式系统的动态内存管理系统。该系统包括:
数据获取模块,用于获取请求内存指令,所述请求内存指令包括软件类型和占用内存量;
数据判断模块,用于根据所述软件类型确定目标内存区域,目标内存区域为长期内存区域、大内存区域以及小内存区域中的其中一种;
第一处理模块,用于在所述目标内存区域中,判断是否存在内存块大于所述占用内存量的内存页,所述内存页至少由一个内存块组成;
第二处理模块,用于在目标内存区域中,存在内存块大于所述占用内存量的内存页时,则将所述内存块大于且最接近于所述占用内存量的内存页标记为目标内存页,并将所述目标内存页中的其中一个空闲内存块分配给嵌入式软件,所述空闲内存块为未被占用的内存块;还用于在目标内存区域中,不存在内存块大于所述占用内存量的内存页时,将所述目标内存区域中的其中一个空闲内存页分配给嵌入式软件,所述空闲内存页为未被占用的内存页。
在本申请的第三方面,提供了一种嵌入式系统的动态内存管理终端。该终端包括:存储器和处理器,所述存储器上存储有计算机程序,所述处理器执行所述程序时实现上述任一种嵌入式系统的动态内存管理方法。
在本申请的第四方面,提供了一种计算机可读存储介质,其上存储有计算机程序,所述程序被处理器执行时实现上述任一种嵌入式系统的动态内存管理方法。
综上所述,本申请包括以下至少一种有益技术效果:
本申请首先是将嵌入式软件的内存空间划分为三个内存区域,当接收到嵌入式软件发送的请求内存指令时,首先根据请求内存指令为其匹配合适的内存区域。在匹配所得的内存区域中,针对部分内存块被占用的内存页,在嵌入式软件有相同的内存量需求时,优先从该部分的内存页中寻找可利用的内存块;当无法利用部分内存块被占用的内存页时,再继续分配新的内存页,从而减少嵌入式软件占用的内存页个数。因此,本申请能够支持嵌入式软件频繁地向嵌入式系统申请内存量,还能够充分地利用嵌入式软件已经申请的内存空间,减少嵌入式系统内存碎片,从而实现节约嵌入式软件的内存空间资源的目的。
附图说明
图1是本申请一种嵌入式系统的动态内存管理方法流程图。
图2是本申请的方法实施例中长期内存区域中的内存页的结构图。
图3是本申请的方法实施例中内存页和与内存页对应的第一管理表的结构图。
图4是图3中内存页和与内存页对应的第一管理表的示例图。
图5是图4中内存页和被占用一段时间后的第一管理表的示例图。
图6是本申请的方法实施例中目标内存页和与目标内存页对应的第二管理表的结构图。
图7是本申请的方法实施例中第二管理表的示例图。
图8为本申请的一种嵌入式系统的动态内存管理系统框图。
附图标记说明:1、数据管理模块;2、数据获取模块;3、数据判断模块;4、第一处理模块;5、第二处理模块。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的全部其他实施例,都属于本申请保护的范围。
在嵌入式系统运行嵌入式软件时,先根据嵌入式软件申请内存,并在申请获得的内存空间下运行嵌入式软件。由于嵌入式系统的内存空间有限,本申请为了充分利用分配给嵌入式软件的内存空间,以及管理未被嵌入式软件所占用的内存空间,提出了一种嵌入式系统的动态内存管理系统,以下称为管理系统。
具体地,管理系统适用于嵌入式设备中,是能够管控嵌入式系统的内存空间资源的一种应用程序。为了说明管理系统管控嵌入式系统的内存空间资源的过程,本申请还提出了一种嵌入式系统的动态内存管理方法,如图1所示,该方法的主要流程描述如下。
步骤S100、获取请求内存指令。
在嵌入设备开机时,首先由管理系统将嵌入式系统的内存划分为长期内存区域和活动内存区域,活动内存区域又划分为大内存区域和小内存区域。长期内存区域用于供仅申请内存而不释放内存的嵌入式软件占用,大内存区域和小内存区域均是用于供在运行时申请内存而在结束运行时释放内存的嵌入式软件占用,不同的是大内存区域中的内存页相较于小内存区域中的内存页来说较大,如大内存区域中的内存页为4KByte,而小内存区域中的内存页为64Byte。在本示例中,不同类型的内存区域中的内存页的大小可能不相同,而且同一个内存区域中的两个内存页的大小也可能不相同,但位于同一个内存区域中的任意两个内存页均是该内存区域可以提供的最小内存单元的整数倍,最小内存单元也称为内存块。
在实际应用中,可以根据嵌入式系统中安装的嵌入式软件的类型、每一种嵌入式软件的历史运行数据作为划分长期内存区域中的内存页及内存页个数的依据。例如,嵌入式系统中安装有嵌入式软件a和b,a和b都属于仅申请内存而不释放内存的类型,且嵌入式软件a在历史运行中申请的内存量为129Byte,而b在历史运行中申请的内存量为64Byte,则1Byte、2Byte、……、64Byte中的任意一个值均可以作为长期内存区域中的内存页(即可以提供的内存最小单元),本申请只是为了降低资源浪费,如当选择64Byte为内存页时,b将占用3个内存页(即129=64+64+1),并且第三个内存页仅占用了1Byte,即“64+64+1”中的“1”单独占用一个内存页。所以在选择长期内存区域中的内存页时要选择较小的值,但是当选择过小的值(如1Byte)时又将增大管理系统的计算量,从而增大管理系统占用嵌入式系统的内存空间,所以长期内存区域中的内存页也不应该过小。在一个具体的示例中,长期内存区域中的内存页设置为4Byte的倍数,4Byt则为一个内存块。
管理系统在划分大内存区域中的内存页及内存页个数、小内存区域中的内存页及内存页个数时,采用如上述划分长期内存区域的内存页和内存页个数的过程,因此,在此不再对划分大内存区域和小内存区域的过程进行赘述。在一个具体的示例中,管理系统划分的大内存区域中的内存页为4KByte,内存页个数为14个;而划分的小内存区域中的内存页为256Byte,内存页个数为15个。
在本示例中,针对大内存区域中的多个大小相同的内存页,每一个内存页划分的内存块可能存在差别,例如大内存区域包括内存页Ⅰ和内存页Ⅱ,则内存页Ⅰ可以划分为8Byte的多个块,而内存页Ⅱ可以划分为不同于8Byte的多个块,如划分为32Byte或64Byte或者128Byte等的多个块。同理,小内存区域中的多个相同的内存页,每一个内存页的内存块大小也可能存在差别。需要说明的是,位于同一个内存页中的多个内存块大小相同。
本申请的管理系统提供有自定义接口,管理人员可以通过自定义接口配置长期内存区域的内存页及内存页个数、大内存区域的内存页及内存页个数、小内存区域的内存页及内存页个数。
在管理系统划分长期内存区域、大内存区域以及小内存区域的同时,管理系统还监控嵌入式软件向嵌入式系统发送的请求内存指令,该请求内存指令中包含有嵌入式软件的类型和其被运行时所需的内存量,以下将该内存量称为占用内存量。而嵌入式软件的类型分为两种,一种是仅申请内存而不释放内存的嵌入式软件,另一种是在运行时申请内存而在结束运行时释放内存的嵌入式软件。
在管理系统已经划分完长期内存区域、大内存区域、小内存区域以及接收到请求内存指令后,进入步骤S200中。
步骤S200、根据请求内存指令确定目标内存区域,目标内存区域为长期内存区域、大内存区域以及小内存区域中的其中一种。
首先,管理系统先提取请求内存指令中的嵌入式软件的类型,若嵌入式软件属于仅申请内存而不释放内存的类型,则在长期内存区域中为其分配内存页,同时将长期内存区域标记为目标内存区域,并进入步骤S300中。而如果嵌入式软件属于在运行时申请内存、运行结束时释放内存的类型,则在活动内存区域中为其分配内存页,同时将活动内存区域标记为目标内存区域,并进入步骤S400中。
步骤S300、当目标内存区域为长期内存区域时,根据占用内存量的大小设定一个大于且最接近于占用内存量,同时还是4Byte的整数倍的内存帧,并将该内存帧分配给嵌入式软件占用。
长期内存区域中的内存页也被称为内存帧,每一个内存帧由帧头段、帧长度段和数据段组成。帧头段用于表示内存帧的开始,数据段用于供嵌入式软件占用,其长度是帧长度段数字表示的大小。如图2所示,长期内存区域中存在多个内存帧,每一个内存帧的帧头段、帧长度段和数据段分别用FEFE、Size和DTAT表示,则第一个内存帧的FEFE表示一个新的内存帧的开始,而Size1用于表示数据段的大小,为了区分不同的内存帧的帧长度段,还用Size1、Size2来表示第一个内存帧的帧长度段和第二个内存帧的帧长度段,第一个内存帧的数据段用DTAT1表示,DTAT1用于供嵌入式软件占用,DTAT1长度是Size1表示的大小,而第二个内存帧的数据段用DTAT2表示,DTAT2占用的长度刚好是Size2表示的大小。以图2为例,当存在嵌入式软件c需要占用4Byte的一个内存帧,内存帧Size1已经被占用而第二个内存帧刚好是4Byte时,将第二个内存帧的地址发送给嵌入式软件c,由嵌入式软件c自动占用第二个内存帧的DTAT2,同时,管理系统还记录第三个内存帧的结尾的地址,作为下一个内存帧的头地址,以指向下一个空闲的内存帧。
步骤S400、当目标内存区域为活动内存区域时,判断小内存区域是否满足:
,
若是满足上述任意一个条件,则将大内存区域作为目标内存区域;否则,将小内存区域作为目标内存区域,以此来避免占用内存量较小的嵌入式软件独占大内存区域中的较大的内存块,从而节约大内存区域中的内存资源。
具体地,当大内存区域作为目标内存区域时,在大内存区域中为嵌入式软件分配其所需的占用内存量的过程如步骤S411-步骤S413所示:
步骤S411、判断大内存区域中的多个内存页中,是否存在内存块大于占用内存量的内存页;
步骤S412、若是,则将内存块大于且最接近于占用内存量的内存页标记为目标内存页,并将目标内存页中的其中一个内存块分配给嵌入式软件;
步骤S413、否则,将大内存区域中的其中一个空闲内存页分配给嵌入式软件。
具体地,大内存区域中包括内存页和与内存页对应的第一管理表,当任意一个内存页被占用而划分为多个内存块时,还会对应被划分的内存页生成第二管理表。第一管理表用于管理大内存区域中的所有内存页,如图3所示,若x列由大内存区域中的所有内存页排列而成,则第一管理表由y列和z列组成,按照x列中内存页从上至下的排列顺序和第一管理表中从上至下每一行的排列顺序,相同排列顺序的内存页和第一管理表中的行具有映射关系,映射关系用图3中的箭头表示。其中,x列中排序第一的内存页Page0已经被用于管控所有内存页的第一管理表占用,所以第一管理表的第一行中:
y列展示为0|used,z列展示为Pages=1,其中,“0”表示内存页为Page0,“used”表示Page0已经被占用,即Page0处于被占用状态,Pages=1表示只有一个内存页“Page0”被占用;
第一管理表的第二行中:
y列展示为0,z列展示为Pages=N-1,第二行还是free_list定位指针的定位点,定位指针用虚线箭头表示。y列的第二行上,“0”表示x列中,从第二行开始内存页就一直是处于空闲状态,即Pages1-PagesN-1均是空闲内存页,Pages1-PagesN-1之间未被处于used状态的内存页隔断;z列的第二行上,“Pages=N-1”表示x列中,从第二行开始一直是连续的空闲内存页,即Pages1-PagesN-1均是空闲内存页。
需要说明的是,图3中的x列、y列、z列均是为了区分不同的列而设置的,在实际应用中并不限定其为x列、y列、z列,还可以是第一列、第二列、第三列,在此不作具体限制。
另外,第一管理表中的free_list定位指针还具有串接大内存区域中所有空闲内存页的能力,具体的串接方式是:定位指针按照“未被占用过且排序在前>被释放在前”的优先级顺序指向空闲内存页,空闲内存页中y列也按照“未被占用过且排序在前>被释放在前”的优先级顺序互相串联。其在管理表中的数据结构为:
struct Free_List
{
int next_free_list; // 即y列,下一组连续空闲内存页的首页索引号。
int Pages; // 即z列,当前连续空闲内存页的个数。
};
如图4所示,若x列由Page0、Page1、Page2、Page3、Page4、Page5、Page6组成,在使用过程中,Page1、Page2、Page3分别被占用,且Page1和Page2是被同时占用的,则此时的定位指针移动到第一管理表的第五行上,且第一管理表的第五行的状态为:y列展示为0,z列展示为Pages=3,此时说明连续的Page4、Page5、Page6均为空闲内存页,但是Page6之后没有空闲内存页,即y列为“0”表示当前free_list定位指针之后没有空闲内存页了,z列为“Pages=3”表示从第五行开始连续的三个内存页均是空闲内存页。若一段时间后,如图5所示,Page1和Page2同时被释放,而Page4、Page5、Page6依然未被占用过,则此时的定位指针还是停留在第一管理表的第五行上,而不会动态移动到第二行上,以保障第一管理表的稳定性。但是,第一管理表会串接起被释放的Page1和Page2,具体为:第一管理表的第五行的状态为:
y列展示为1,z列展示为Pages=3;
其中y列第五行上的“1”指向Page1,z列第五行上的“Pages=3”说明连续的Page4、Page5、Page6均是空闲内存页。
在指向第二行后,即指向Page1后,第一管理表的第二行的状态为:
y列展示为0,z列展示为Pages=2;
其中y列第二行上的“0”表示没有空闲指向,即没有下一空闲内存页,z列第二行上的“Pages=2”说明连续的Page1和Page2均是空闲内存页。
如此设计,能够将逐渐释放的内存页收集管理起来。
基于上述第一管理表管理内存页的方式,上述步骤S411-步骤S413可以简述为:管理系统在获取到占用内存量后,首先判断占用内存量的大小,若占用内存量至少低于大内存区域中的一个内存页中的内存块时,则由第一管理表按照内存页从前往后的顺序为嵌入式软件分配空闲内存页。但是,当占用内存量均大于大内存区域中的内存页的内存块时,则由第一管理表按照内存页从后往前的顺序为嵌入式软件分配连续空闲内存页,从而实现在目标内存区域为大内存区域的情况下,还进一步将细碎的占用内存量放置在靠前的内存页中,而将占用内存量较大的放置在靠后的内存页中,进而便于第一管理表管理占用内存量大小不相同的嵌入式软件。
进一步地,第二管理表用于管理目标内存页。如图6所示,若x列为目标内存页划分为多个大小相同的内存块排列而成的,则第二管理表如y列和z列的数据,按照x列中内存块从上至下的排列顺序和第二管理表中从上至下每一行的排列顺序,相同排列顺序的内存块和第二管理表中的行具有映射关系,映射关系用图6中的箭头表示。需要说明的是,x列中排序第一的内存块block0已经被用于管控目标内存页的管理表占用,所以第二管理表的第一行中:y列展示为0|used,z列展示为blocks=1,其中,“0”表示内存块block0,“used”表示block0已经被占用,即block0处于被占用状态,blocks=1表示仅有一个内存块“block0”被占用。
所以,第二管理表和第一管理表之间,第一行的数据表示意思相同,不同的是:第二管理表中,用于管理内存块的管理系统占用第一行对应的内存块且占用的是16Byte,但是其占用的内存量会随着空闲内存块的变化而变化。如图7所示,第二管理表的第一行中:“prev”是与该第二管理表相邻且排序在前的第二管理表的地址,“next”是与该第二管理表相邻且排序在后的第二管理表的地址,“prev”和“next”合称为串表信息,串表信息包含的是与其内存块大小相同且相邻的两个第二管理表的地址,串表信息占用的是本内存页排行第一的内存块,当内存页中没有空闲的内存块时,该内存页也将不存在串表信息,即自动删掉“prev”和“next”。当内存页中的内存块被释放回收时,管理系统将重建串表信息,将当前内存页挂载在相同的内存页串表中。
另外,图7中的“blocks”是指该第二管理表管理的内存块的数量,“free_blk”是定位指针,定位指针用于定位空闲内存块,该定位指针用于串接空闲内存块,第二管理表中的定位指针串接空闲内存块的方式与第一管理表中的定位指针串接空闲内存页的方式相同,所以在此不再赘述。
因此,在目标内存区域为大内存区域时,判断是否存在与占用内存量对应的内存块,即是否存在与占用内存量相等的内存块或者大于目标内存块但与占用内存量差值最小的内存块。若存在,则调取该内存块所在的第二管理表,通过第二管理表查找是否还有空闲内存块,再将空闲内存块中排序第一的空闲内存块的地址返回给嵌入式软件,以便于嵌入式软件在运行时占用该空闲内存块。若查找的第二管理表中不存在空闲内存块,则通过该第二管理表的串表信息,继续查找下一第二管理表中是否存在空闲内存块,直至找到空闲内存块为止。若确实不存在空闲的内存块或者内存块小于占用内存量,则依据占用内存量和预设的内存块配置表将新的内存页划分为多个内存块,内存块配置表如表1所示:
表1中的数值均是可选的内存块大小,所以在得到占用内存量后,依次对比占用内存量与表1中的内存块的大小关系,将等于占用内存量或者大于占用内存量但与占用内存量差值最小的内存块作为目标内存块,从而将新的内存页等量划分为多个目标内存块。也就是说,先根据占用内存量选定一个目标内存块大小,再以目标内存块大小作为划分标准,将新的内存页划分为多个大小相同的目标内存块。被划分的新的内存页中,除了第一行被占用外,第二行至最后一行的内存块并未被占用,所以第二管理表将第二行的内存块的地址返回给嵌入式软件,由嵌入式软件占用第二行的空闲内存块。并在第二管理表中标记该内存块为“被占用”状态,同时修改free_blk指针指向第二行。
由此可知,本申请针对部分内存块被占用的内存页,在嵌入式软件有相同的内存量需求时,优先从该部分的内存页中寻找可利用的内存块;当无法利用部分内存块被占用的内存页时,再继续分配新的内存页,从而减少嵌入式软件占用大内存区域的内存页个数,以达到节约内存空间的目的。
以上为当目标内存区域为大内存区域时的内存分配过程,而当目标内存区域为小内存区域时,可以通过以长期内存区域中的划分方式为嵌入式软件分配其所需的内存量,也可以按照大内存区域中的划分方式为嵌入式软件分配其所需的内存量。当在小内存区域为嵌入式软件分配其所需的内存量时,分配的过程与上述在大内存区域内为嵌入式软件分配的过程相同,即小内存区域也包括第一管理表、第二管理表,而且针对部分内存块被占用的内存页,在嵌入式软件有相同的内存量需求时,优先从该部分的内存页中寻找可利用的内存块;当无法利用部分内存块被占用的内存页时,再继续分配新的内存页,从而减少嵌入式软件占用大内存区域的内存页个数,以达到节约内存空间的目的。为此,本申请不再对在小内存区域为嵌入式软件分配其所需的内存量进行赘述。
综上所述,本申请首先是将嵌入式软件的内存空间划分为三个内存区域,当接收到嵌入式软件发送的请求内存指令时,首先根据请求内存指令为其匹配合适的内存区域。若匹配的结果为大内存区域或者小内存区域,则再继续判断占用内存量所适配的内存区域,避免大的占用内存量占用较小的内存块而使得内存块的数量增多,也防止小的占用内存量占用较大的内存块而浪费较大的内存块的空间资源。进一步的,在每一个内存页中,针对部分内存块被占用的内存页,在嵌入式软件有相同的内存量需求时,优先从该部分的内存页中寻找可利用的内存块;当无法利用部分内存块被占用的内存页时,再继续分配新的内存页,从而减少嵌入式软件占用的内存页个数。因此,本申请能够支持嵌入式软件频繁地向嵌入式系统申请内存量,还能够降低使用过程中内存碎片化的程度,避免内存碎片的浪费,从而实现节约嵌入式软件的内存空间资源的目的。
为了支撑上述的嵌入式系统的动态内存管理方法顺利进行,如图8所示,管理系统包括数据管理模块1、数据获取模块2、数据判断模块3、第一处理模块4以及第二处理模块5。
数据管理模块1,用于将嵌入式系统的内存空间划分为长期内存区域、大内存区域以及小内存区域。
数据获取模块2,用于获取请求内存指令,请求内存指令包括软件类型和占用内存量。
数据判断模块3,用于根据软件类型确定目标内存区域,目标内存区域为长期内存区域、大内存区域以及小内存区域中的其中一种。
第一处理模块4,用于在目标内存区域中,判断是否存在内存块大于占用内存量的内存页,内存页至少由一个内存块组成。
第二处理模块5,用于在目标内存区域中,存在内存块大于占用内存量的内存页时,则将内存块大于且最接近于占用内存量的内存页标记为目标内存页,并将目标内存页中的其中一个空闲内存块分配给嵌入式软件,空闲内存块为未被占用的内存块;还用于在目标内存区域中,不存在内存块大于占用内存量的内存页时,将目标内存区域中的其中一个空闲内存页分配给嵌入式软件,空闲内存页为未被占用的内存页。
描述于本申请实施例中所涉及到的模块可以通过软件的方式实现,也可以通过硬件的方式来实现。所描述的模块也可以设置在处理器中,例如,可以描述为:一种处理器包括数据管理模块1、数据获取模块2、数据判断模块3、第一处理模块4和第二处理模块5。其中,这些模块的名称在某种情况下并不构成对该模块本身的限定,例如,数据获取模块2还可以被描述为“用于获取请求指令的模块”。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,所述描述的模块的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
为了更好地执行上述方法的程序,本申请还提供一种嵌入式系统的动态内存管理终端,该终端包括存储器和处理器。
其中,存储器可用于存储指令、程序、代码、代码集或指令集。存储器可以包括存储程序区和存储数据区,其中存储程序区可存储用于实现操作系统的指令、用于至少一个功能的指令以及用于实现上述嵌入式系统的动态内存管理方法的指令等;存储数据区可存储上述嵌入式系统的动态内存管理方法中涉及到的数据等。
处理器可以包括一个或者多个处理核心。处理器通过运行或执行存储在存储器内的指令、程序、代码集或指令集,调用存储在存储器内的数据,执行本申请的各种功能和处理数据。处理器可以为特定用途集成电路、数字信号处理器、数字信号处理装置、可编程逻辑装置、现场可编程门阵列、中央处理器、控制器、微控制器和微处理器中的至少一种。可以理解地,对于不同的设备,用于实现上述处理器功能的电子器件还可以为其它,本申请实施例不作具体限定。
本申请还提供一种计算机可读存储介质,例如包括:U盘、移动硬盘、只读存储器(Read Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。该计算机可读存储介质存储有能够被处理器加载并执行上述嵌入式系统的动态内存管理方法的计算机程序。
以上描述仅为本申请的较佳实施例以及对所运用技术原理的说明。本领域技术人员应当理解,本申请中所涉及的公开范围,并不限于上述技术特征的特定组合而成的技术方案,同时也应涵盖在不脱离前述公开构思的情况下,由上述技术特征或其等同特征进行任意组合而形成的其他技术方案。例如上述特征与本申请中公开的(但不限于)具有类似功能的技术特征进行互相替换而形成的技术方案。
Claims (6)
1.一种嵌入式系统的动态内存管理方法,其特征在于,包括:
获取请求内存指令,所述请求内存指令包括软件类型和占用内存量;
根据所述软件类型确定目标内存区域,所述目标内存区域包括内存页和第一管理表,所述第一管理表用于管理目标内存区域中的所有内存页;所述第一管理表中配置有定位指针,所述定位指针用于串接所述目标内存区域中的所有空闲内存页,所述定位指针按照“未被占用过且排序在前>被释放在前”的优先级顺序指向所有空闲内存页;目标内存区域为长期内存区域、大内存区域以及小内存区域中的其中一种;
在所述目标内存区域中,判断是否存在内存块大于所述占用内存量的内存页,所述内存页至少由一个内存块组成;
若是,则将所述内存块大于且最接近于所述占用内存量的内存页标记为目标内存页,并将所述目标内存页中的其中一个空闲内存块分配给嵌入式软件,包括: 调取所述目标内存页的第二管理表,所述第二管理表用于管理所述目标内存页;所述第二管理表从所述目标内存页的空闲内存块中选择排序第一的空闲内存块分配给所述嵌入式软件;所述第二管理表中存储有串表信息,所述串表信息用于指向与其相邻的第二管理表,任意两个相邻的第二管理表所管理的内存页的内存块大小相同;所述空闲内存块为未被占用的内存块;
若否,则将所述目标内存区域中的其中一个空闲内存页分配给嵌入式软件,所述空闲内存页为未被占用的内存页。
2.根据权利要求1所述的嵌入式系统的动态内存管理方法,其特征在于,所述软件类型为仅申请内存而不释放内存的类型和在运行时申请内存而在结束运行时释放内存的类型中的其中一种;
所述根据所述软件类型确定目标内存区域,包括:
当所述软件类型为仅申请内存而不释放内存的类型时,将所述长期内存区域标记为目标内存区域;
当所述软件类型为在运行时申请内存而在结束运行时释放内存的类型时,判断所述小内存区域是否满足:
,
若是,则将所述大内存区域标记为目标内存区域;
若否,则将所述小内存区域标记为目标内存区域。
3.根据权利要求1所述的嵌入式系统的动态内存管理方法,其特征在于,当所述大内存区域作为所述目标内存区域时,所述方法还包括:
当所述内存块小于所述占用内存量或者不存在空闲内存块时,根据所述占用内存量和预设的内存块配置表将新的内存页划分为多个内存块,并将所述新的内存页的第二行的内存块的地址返回给所述嵌入式软件。
4.一种嵌入式系统的动态内存管理系统,其特征在于,包括:
数据获取模块(2),用于获取请求内存指令,所述请求内存指令包括软件类型和占用内存量;
数据判断模块(3),用于根据所述软件类型确定目标内存区域,所述目标内存区域包括内存页和第一管理表,所述第一管理表用于管理目标内存区域中的所有内存页;所述第一管理表中配置有定位指针,所述定位指针用于串接所述目标内存区域中的所有空闲内存页,所述定位指针按照“未被占用过且排序在前>被释放在前”的优先级顺序指向所有空闲内存页;目标内存区域为长期内存区域、大内存区域以及小内存区域中的其中一种;
第一处理模块(4),用于在所述目标内存区域中,判断是否存在内存块大于所述占用内存量的内存页,所述内存页至少由一个内存块组成;
第二处理模块(5),用于在目标内存区域中,存在内存块大于所述占用内存量的内存页时,则将所述内存块大于且最接近于所述占用内存量的内存页标记为目标内存页,并将所述目标内存页中的其中一个空闲内存块分配给嵌入式软件,包括: 调取所述目标内存页的第二管理表,所述第二管理表用于管理所述目标内存页;所述第二管理表从所述目标内存页的空闲内存块中选择排序第一的空闲内存块分配给所述嵌入式软件;所述第二管理表中存储有串表信息,所述串表信息用于指向与其相邻的第二管理表,任意两个相邻的第二管理表所管理的内存页的内存块大小相同;所述空闲内存块为未被占用的内存块;还用于在目标内存区域中,不存在内存块大于所述占用内存量的内存页时,将所述目标内存区域中的其中一个空闲内存页分配给嵌入式软件,所述空闲内存页为未被占用的内存页。
5.一种嵌入式系统的动态内存管理终端,其特征在于,包括存储器和处理器,所述存储器上存储有计算机程序,所述处理器执行所述程序时实现如权利要求1-3中任一项所述的方法。
6.一种计算机可读存储介质,其特征在于,其上存储有计算机程序,所述程序被处理器执行时实现如权利要求1-3中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311771736.4A CN117724991B (zh) | 2023-12-21 | 2023-12-21 | 嵌入式系统的动态内存管理方法、系统、终端及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311771736.4A CN117724991B (zh) | 2023-12-21 | 2023-12-21 | 嵌入式系统的动态内存管理方法、系统、终端及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN117724991A CN117724991A (zh) | 2024-03-19 |
CN117724991B true CN117724991B (zh) | 2024-09-06 |
Family
ID=90199591
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311771736.4A Active CN117724991B (zh) | 2023-12-21 | 2023-12-21 | 嵌入式系统的动态内存管理方法、系统、终端及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117724991B (zh) |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101344861A (zh) * | 2007-07-10 | 2009-01-14 | 凤凰微电子(中国)有限公司 | 一种智能卡内存管理方法 |
CN108038062A (zh) * | 2017-11-27 | 2018-05-15 | 北京锦鸿希电信息技术股份有限公司 | 嵌入式系统的内存管理方法和装置 |
CN117076341A (zh) * | 2023-08-21 | 2023-11-17 | 平安壹钱包电子商务有限公司 | 数据存储方法、装置、计算机设备及计算机可读存储介质 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108132842B (zh) * | 2017-12-15 | 2021-11-02 | 天津津航计算技术研究所 | 一种嵌入式软件内存管理系统 |
CN111078587B (zh) * | 2019-12-10 | 2022-05-06 | Oppo(重庆)智能科技有限公司 | 内存分配方法、装置、存储介质及电子设备 |
CN113032156B (zh) * | 2021-05-25 | 2021-10-15 | 北京金山云网络技术有限公司 | 内存分配方法和装置、电子设备和存储介质 |
CN114116194A (zh) * | 2021-09-03 | 2022-03-01 | 济南外部指针科技有限公司 | 一种内存的分配方法及系统 |
CN114579304A (zh) * | 2022-02-25 | 2022-06-03 | 阿里巴巴(中国)有限公司 | 内存管理方法以及装置 |
CN116302617B (zh) * | 2023-05-12 | 2023-08-04 | 苏州浪潮智能科技有限公司 | 共享内存的方法、通信方法、嵌入式系统以及电子设备 |
-
2023
- 2023-12-21 CN CN202311771736.4A patent/CN117724991B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101344861A (zh) * | 2007-07-10 | 2009-01-14 | 凤凰微电子(中国)有限公司 | 一种智能卡内存管理方法 |
CN108038062A (zh) * | 2017-11-27 | 2018-05-15 | 北京锦鸿希电信息技术股份有限公司 | 嵌入式系统的内存管理方法和装置 |
CN117076341A (zh) * | 2023-08-21 | 2023-11-17 | 平安壹钱包电子商务有限公司 | 数据存储方法、装置、计算机设备及计算机可读存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN117724991A (zh) | 2024-03-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR101157171B1 (ko) | 스마트카드를 위한 저장 시스템 및 그 저장시스템에서 파일생성관리방법 | |
US6760826B2 (en) | Store data in the system memory of a computing device | |
US7571163B2 (en) | Method for sorting a data structure | |
US20080162863A1 (en) | Bucket based memory allocation | |
EP0375188A2 (en) | File system | |
CN109690498B (zh) | 内存管理方法和设备 | |
US5414826A (en) | System and method for memory management in microcomputer | |
CN1178349A (zh) | 用于保留资源的方法 | |
CN101777061B (zh) | 一种java卡对象管理方法及java卡 | |
US10976946B2 (en) | Method and computer system for managing blocks | |
JP3044005B2 (ja) | データ格納制御方式 | |
US6219772B1 (en) | Method for efficient memory allocation of small data blocks | |
CN115599544A (zh) | 内存管理方法、装置、计算机设备及存储介质 | |
CN110674052B (zh) | 内存管理方法、服务器及可读存储介质 | |
US10649967B2 (en) | Memory object pool use in a distributed index and query system | |
US7334104B2 (en) | Satisfying memory allocation requests from memory pool or lookaside lists based on memory size requested to be allocated | |
CN110825953B (zh) | 数据查询方法、装置和设备 | |
CN116301614A (zh) | 存储器数据存取方法、系统、设备和存储介质 | |
CN117724991B (zh) | 嵌入式系统的动态内存管理方法、系统、终端及存储介质 | |
CN116932426A (zh) | 存储数据管理的方法、电子设备及计算机可读存储装置 | |
CN116048377A (zh) | 固态硬盘的数据处理方法及相关设备 | |
CN111966294B (zh) | 存储数据的方法、装置、设备及存储介质 | |
JPS5883377A (ja) | バツフアメモリ制御方式 | |
US6223991B1 (en) | Process for managing the memory resources in a microcircuit card | |
CN117290258A (zh) | 一种存储空间处理方法、装置、设备以及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |