CN114327868B - 一种内存动态调控方法、装置、设备及介质 - Google Patents
一种内存动态调控方法、装置、设备及介质 Download PDFInfo
- Publication number
- CN114327868B CN114327868B CN202111489222.0A CN202111489222A CN114327868B CN 114327868 B CN114327868 B CN 114327868B CN 202111489222 A CN202111489222 A CN 202111489222A CN 114327868 B CN114327868 B CN 114327868B
- Authority
- CN
- China
- Prior art keywords
- memory space
- memory
- sub
- task
- capacity
- 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 371
- 238000000034 method Methods 0.000 title claims abstract description 184
- 230000008569 process Effects 0.000 claims abstract description 132
- 230000003044 adaptive effect Effects 0.000 claims abstract description 51
- 238000013467 fragmentation Methods 0.000 description 10
- 238000006062 fragmentation reaction Methods 0.000 description 10
- 238000010586 diagram Methods 0.000 description 8
- 238000004590 computer program Methods 0.000 description 5
- 230000006870 function Effects 0.000 description 4
- 238000007726 management method Methods 0.000 description 3
- 230000006978 adaptation Effects 0.000 description 2
- 238000011161 development Methods 0.000 description 2
- 238000011084 recovery Methods 0.000 description 2
- 230000001360 synchronised effect Effects 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 230000001276 controlling effect Effects 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000006855 networking Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000012545 processing Methods 0.000 description 1
- 230000001105 regulatory effect Effects 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 239000002699 waste material Substances 0.000 description 1
Landscapes
- Memory System (AREA)
Abstract
本公开关于一种内存动态调控方法、装置、设备及介质,方法应用于自适应汽车开放系统,自适应汽车开放系统运行有至少一个应用程序,方法包括:在应用程序的进程启动时,在内存分配链上创建与进程对应的节点;基于进程对应的所需配置文件向自适应汽车开放系统申请第一内存空间;在进程中的各个任务执行时,在第一内存空间中申请与任务对应的第一子内存空间,使得任务在第一子内存空间中运行;在任务执行完成时,将任务对应的子内存空间释放给第一内存空间;在进程结束时,将第一内存空间释放给自适应汽车开放系统。本公开的实施可以保证各个任务占用的子内存空间小,提高内存的使用率,同时能够避免内存泄露,提高了系统内存的利用率。
Description
技术领域
本公开涉及内存分配技术领域,尤其涉及一种内存动态调控方法、装置、设备及介质。
背景技术
随着自动驾驶和智能网联技术的飞速发展,针对面向服务的架构开发以及使用高性能的处理器,Adaptive AUTOSAR(自适应汽车开放系统)有着不可比拟的优势。众所周知,随着系统复杂性的提高,软件的失效风险也会随之提升。现有的Adaptive AUTOSAR平台的软件架构,用户程序以及平台服务均使用的是系统提供的接口进行内存的动态申请和释放。当前Adaptive AUTOSAR的实现使用的是C++语言,C++没有内存的管理回收机制。规范中也没有涉及内存管理功能,因此会存在内存泄漏、内存碎片化等问题。
发明内容
第一方面,本公开提供一种内存动态调控方法,所述方法应用于自适应汽车开放系统,所述自适应汽车开放系统运行有至少一个应用程序,所述方法包括:
在所述应用程序的进程启动时,在内存分配链上创建与所述进程对应的节点;
基于所述进程对应的所需配置文件向所述自适应汽车开放系统申请第一内存空间,并由所述节点存储所述进程运行时使用所述第一内存空间的第一使用信息;
在所述进程中的各个任务执行时,在所述第一内存空间中申请与所述任务对应的第一子内存空间,使得所述任务在所述第一子内存空间中运行;
在所述任务执行完成时,将所述任务对应的子内存空间释放给所述第一内存空间;
在所述进程结束时,将所述第一内存空间释放给自适应汽车开放系统。
进一步地,所述第一使用信息包括各个任务运行时使用所述第一子内存空间的第二使用信息;
所述在所述进程中的各个任务执行时,在所述第一内存空间中申请与所述任务对应的第一子内存空间,使得所述任务在所述第一子内存空间中运行,包括:
在所述进程中的各个任务执行时,在所述节点上创建与所述任务对应的子节点;
在所述第一内存空间中申请与所述任务对应的第一子内存空间,使得所述任务在所述第一子内存空间中运行;
在所述任务在所述第一子内存空间中运行时,由所述子节点存储所述任务运行时使用所述第一子内存空间的第二使用信息。
进一步地,所述在所述第一内存空间中申请与所述任务对应的第一子内存空间,包括:
获取所述第一内存空间中当前空闲的子内存空间以及所述当前空闲的子内存空间对应的容量;
在所述第一内存空间中当前空闲的子内存空间的数量为一个,且所述当前空闲的子内存空间无指向下一个子内存空间的指针时,判断所述当前空闲的子内存空间的容量与所述任务需要的内存容量的差值是否大于预设子内存容量阈值;
在所述当前空闲的子内存空间的容量与所述任务需要的内存容量的差值大于预设子内存容量阈值时,根据所述任务需要的内存容量将所述当前空闲的子内存空间划分为第一子内存空间和第二子内存空间;
对所述第一子内存空间添加表征所述任务执行时占用标签以及用于指向所述第二子内存空间的指针,对所述第二子内存空间添加空闲标签;
相应的,所述在所述任务执行完成时,将所述任务对应的子内存空间释放给所述第一内存空间,包括:
在所述任务执行完成时,将所述任务对应的第一子内存空间释放给所述第一内存空间,并将所述第一子内存空间的所述占用标签更改为所述空闲标签。
进一步地,在获取所述第一内存空间中当前空闲的子内存空间的数量以及所述当前空闲的子内存空间对应的容量的同时,所述方法还包括:获取所述当前空闲的子内存空间的指针;
所述在所述第一内存空间中申请与所述任务对应的第一子内存空间,还包括:
在所述第一内存空间中当前空闲的子内存空间的数量为至少两个时,判断各个所述当前空闲的子内存空间的容量是否大于所述任务需要的内存容量;
在各个所述当前空闲的子内存空间的容量均不大于所述任务需要的内存容量时,基于所述当前空闲的子内存空间的指针将相邻的所述当前空闲的子内存空间整合为一个子内存空间,得到第一子内存空间,所述子内存空间的容量大于所述任务所需的容量。
进一步地,所述方法还包括:
在所述当前空闲的子内存空间的数量为一个且所述当前空闲的子内存空间的容量小于所述任务需要的内存容量时,向所述自适应汽车开放系统申请第二内存空间,所述第二内存空间的容量大于所述第一内存空间的容量;
将所述第一内存空间内的任务转存至所述第二内存空间执行,并将所述第二内存空间作为第一内存空间。
进一步地,所述在所述进程结束时,将所述第一内存空间释放给自适应汽车开放系统,包括:
基于所述第一内存空间中各个子内存空间的指针,将相邻的所述子内存空间合并得到目标内存空间;
将所述目标内存空间释放给自适应汽车开放系统。
进一步地,所述方法还包括:
实时获取所述内存分配链上各个所述节点的第一使用信息;
将各个所述节点的第一使用信息存储至对应的日志中;
基于所述日志中的各个所述节点的第一使用信息,生成当前各个进程的内存使用报告。
进一步地,所述方法还包括:
删除所述内存分配链上执行完成进程对应的节点。
第二方面,本公开提供一种内存动态调控装置,所述装置设置在自适应汽车开放系统中,所述自适应汽车开放系统运行有至少一个应用程序,所述装置能够被所述应用程序调用,所述装置包括:
节点创建模块,用于在所述应用程序的进程启动时,在内存分配链上创建与所述进程对应的节点;
第一内存空间申请模块,用于基于所述进程对应的所需配置文件向所述自适应汽车开放系统申请第一内存空间;
子内存空间申请模块,用于在所述进程中的各个任务执行时,在所述第一内存空间中申请与所述任务对应的第一子内存空间,使得所述任务在所述第一子内存空间中运行;
子内存空间释放模块,用于在所述任务执行完成时,将所述任务对应的子内存空间释放给所述第一内存空间;
第一内存空间释放模块,用于在所述进程结束时,将所述第一内存空间释放给自适应汽车开放系统。
第三方面,本公开提供一种电子设备,包括:
处理器;
用于存储所述处理器可执行指令的存储器;
其中,所述处理器被配置为执行所述指令,以实现如上述所述的内存动态调控方法。
第四方面,本公开提供一种计算机可读存储介质,当所述计算机可读存储介质中的指令由内存动态调控装置/电子设备的处理器执行时,使得所述内存动态调控装置/电子设备能够执行如上述所述的内存动态调控方法。
本公开的实施例提供的技术方案至少带来以下有益效果:
本说明书实施例提供的一种内存动态调控方法、装置、设备及介质,可以在进程启动时,通过创建对应节点的方式记录不同进程运行时使用第一内存空间的第一使用信息,实现不同进程在执行时的使用内存情况的单独跟踪,保证进程使用内存数据的详细记录,同时根据进程对应的配置文件可以向自适应汽车开放系统申请第一内存空间,使得该进程可以在第一内存空间中执行,保证进程执行的独立性;在进程执行时,可以为进程中的各个任务分配满足其执行的子内存空间,可以保证各个任务占用的子内存空间小,提高内存的使用率,在任务执行完成时,可以将分配的子内存空间释放给第一内存空间,保证碎片化的子内存空间及时回收,解决内存碎片化的问题,避免内存碎片化过多,占用系统内存,在进程执行完成或进程结束时,可以将为该进程分配的第一内存空间释放给自适应汽车开放系统,即保证了各个任务在较小的子内存空间内有效执行,又能够避免内存泄露,提高了系统内存的利用率。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理,并不构成对本公开的不当限定。
图1是根据一示例性实施例示出的一种应用环境的示意图;
图2是根据一示例性实施例示出的一种内存动态调控方法的流程图;
图3是根据一示例性实施例示出的另一种内存动态调控方法的流程;
图4是根据一示例性实施例示出的一种内存动态调控装置框图;
图5是根据一示例性实施例示出的一种用于内存动态调控的电子设备的框图。
具体实施方式
为了使本领域普通人员更好地理解本公开的技术方案,下面将结合附图,对本公开实施例中的技术方案进行清楚、完整地描述。
需要说明的是,本公开的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本公开的实施例能够以除了在这里图示或描述的那些以外的顺序实施。以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的装置和方法的例子。
为了更好的解释本申请,现对以下术语进行解释说明:
内存泄漏:指无用对象(不再使用的对象)持续占用内存使内存得不到及时地释放,从而造成的内存空间的浪费。
内存碎片分为:内部碎片和外部碎片,内部碎片就是已经被分配出去(能明确指出属于哪个进程)却不能被利用的内存空间。外部碎片指的是还没有被分配出去(不属于任何进程),但由于太小了无法分配给申请内存空间的新进程的内存空闲区域。
动态内存(Dynamic Memory),使用户能够指定虚拟操作系统启动的RAM容量,并将平台可用的系统内存最大化。
Adaptive AUTOSAR(自适应平台的AutoSAR),自适应autosar平台实现了adaptiveapplications(自适应应用程序)的运营环境。
内存是计算机中重要的部件之一,它是与CPU进行沟通的桥梁。计算机中所有程序的运行都是在内存中进行的,因此内存的性能对计算机的影响非常大。内存(Memory)也被称为内存储器,其作用是用于暂时存放CPU中的运算数据,以及与硬盘等外部存储器交换的数据。只要计算机在运行中,CPU就会把需要运算的数据调到内存中进行运算,当运算完成后CPU再将结果传送出来,内存的运行也决定了计算机的稳定运行。内存是由内存芯片、电路板、金手指等部分组成的。
第一方面,本说明书实施例提供一种内存动态调控方法,图1是根据一示例性实施例示出的一种应用环境的示意图,如图1所示,该内存动态调控方法可以应用在内存动态调控装置(内存追踪管理模块)中执行,其中内存动态调控装置可以与Adaptive AUTOSAR中的运行的应用程序连接,用于应用程序执行时使用内存动态调控装置中申请的内存,内存动态调控装置还可以与Adaptive AUTOSAR中其他功能组件连接,用于在应用程序执行时调用其他功能组件中的数据,可以理解的是,内存动态调控装置还可以与Adaptive AUTOSAR的系统接口连接,用于调用系统的内存。此外,Adaptive AUTOSAR中运行的应用程序可以有至少一个,每个应用程序在进行时可以有多个进程,每个进程的执行是依赖于进程中的多个任务的执行完成的。
图2是根据一示例性实施例示出的一种内存动态调控方法的流程图,如图2所示,所述方法可以包括以下步骤:
在步骤S201中,在所述应用程序的进程启动时,在内存分配链上创建与所述进程对应的节点。
具体的,应用程序可以在上述Adaptive AUTOSAR中运行,应用程序在执行时,会按照Adaptive AUTOSAR中的应用程序对应的应用程序配置文件依次执行对应的进程,该进程在执行时可以调用对应的所需配置文件,所需配置文件可以是该进程执行时使用的文件或数据。
具体的,应用程序在启动时,Adaptive AUTOSAR会根据读取的应用程序的运行参数以及上述应用程序配置文件确定该应用程序的启动以及运行的内容,如执行哪个进程等。Adaptive AUTOSAR在检测到应用程序启动时,可以通知上述内存动态调控装置,内存动态调控装置可以在预先构建的内存分配链(memoryAllocTable)上创建与所述进程对应的节点。
具体的,内存分配链中可以创建有多个不同进程对应的节点,不同的节点之间是相互独立的。内存分配链中每个节点(memoryAllocNode)中可以记录有表征进程使用内存情况的基础信息(processInfo)、表征正在执行的任务使用内存情况的统计信息(statisticalInfo)、表征进程全部任务的使用内存情况的子节点列表(subnodeList)和子节点对应任务(taskNode)。
在步骤S203中,基于所述进程对应的所需配置文件向所述自适应汽车开放系统申请第一内存空间,并由所述节点存储所述进程运行时使用所述第一内存空间的第一使用信息。
具体的,进程申请的第一内存空间可以位于物理内存映射区域,而且在物理上也是连续的,即第一内存空间是真实的物理地址,申请的第一内存空间的容量可以根据实际需要进行设置,如第一内存空间的容量不能超过128KB。由于本申请内存动态调控方法针对的是进程中的各个任务,因此,本申请中的第一内存空间的容量可以是小于4KB。由于本申请中的第一内存空间的容量相对较小,从而提高系统内存的使用率。
具体的,第一内存空间可以通过函数调用的方式向Adaptive AUTOSAR申请,如VirtualAlloc,HeapAlloc,malloc和new等函数。
具体的,进程申请第一内存空间可以是在进程中的首个任务执行时进行申请的。
在一个可选的实施例中,还可以是进程中的某个任务读取或调用上述所需配置文件时向所述自适应汽车开放系统申请第一内存空间。
具体的,进程申请第一内存空间可以是上述动态内存空间。进程可以在申请的第一内存空间执行对应的任务。
具体的,节点可以存储有进程运行时使用第一内存空间的第一使用信息,其中,第一使用信息可以包括第一内存空间的容量、第一内存空间的起始地址、第一内存空间的终止地址以及第一内存空间的使用情况。
在步骤S205中,在所述进程中的各个任务执行时,在所述第一内存空间中申请与所述任务对应的第一子内存空间,使得所述任务在所述第一子内存空间中运行。
具体的,第一内存空间中可以包括至少一个子内存空间。
具体的,在进程中的首个任务执行时,可以向第一内存空间中申请与其对应的第一子内存空间,可以理解的是,首个任务申请时,第一内存空间还没有划分出子内存空间。在首个任务申请时,第一内存空间可以根据任务所需要的内存或预先设定的最小内存容量划分出第一子内存空间,使得首个任务可以在划分出的第一子内存空间中运行。
在其他任务执行时,也可以按照上述方式申请对应的第一子内存空间。
在一个可选的实施例中,所述第一使用信息可以包括各个任务运行时使用所述第一子内存空间的第二使用信息。
所述在所述进程中的各个任务执行时,在所述第一内存空间中申请与所述任务对应的第一子内存空间,使得所述任务在所述第一子内存空间中运行,包括:
在所述进程中的各个任务执行时,在所述节点上创建与所述任务对应的子节点;
在所述第一内存空间中申请与所述任务对应的第一子内存空间,使得所述任务在所述第一子内存空间中运行;
在所述任务在所述第一子内存空间中运行时,由所述子节点存储所述任务运行时使用所述第一子内存空间的第二使用信息。
具体的,一个进程的执行往往会通过多个任务的共同完成,为了更详细的记录进程使用第一内存空间的第一使用信息,第一使用信息可以是以子节点列表(subnodeList)的方式记录进程中各个任务使用对应的子内存空间的使用情况,各个任务使用对应的子内存空间的使用情况即为上述第二使用信息。
具体的,子节点列表(subnodeList)中可以包括多个子节点,子节点可以是在任务执行时,在节点上创建的。相应的,在进程执行完成后,该子节点列表(subnodeList)中会存储有该进程全部任务对应子节点,每个子节点可以存储有对应的第二使用信息。其中,第二使用信息可以包括任务名称、使用的第一子内存空间的容量以及使用的第一子内存空间的起始地址和终止地址。
具体的,在内存分配链中,上述进程对应的节点中可以设置有多个子节点,每个子节点可以与任务一一对应,如进程有3个任务,则可以创建3个子节点,每个子节点可以用于存储有任务信息(taskInfo)、申请的内存信息(memoryList)、当前已经分配的子内存空间或内存块(allocList)以及当前空闲的子内存空间或内存块(freeList)。
任务信息用于区分不同任务,如任务名称等,即不同的任务对应有不同的任务信息。
内存信息(memoryList)中可以是具体的物理地址,可以理解的是,系统的内存的物理地址是由起始地址0直到终止地址MAX。地址编号在存储单元角度来讲是唯一的,即内存信息记录有从系统中申请的内存地址等信息,该内存信息中可以包括有第一内存空间的起始地址以及终止地址,如30至50。
当前已经分配的子内存空间可以理解为第一内存空间中已经被任务占用的子内存空间。同样的,当前空闲的子内存空间或内存块可以理解为第一内存空间中未被任务占用的子内存空间。
在步骤S207中,在所述任务执行完成时,将所述任务对应的第一子内存空间释放给所述第一内存空间。
具体的,任务执行完成时,应用程序或Adaptive AUTOSAR会接收到对应的任务完成指令,相应的,在任务完成后,内存动态调控装置可以将任务对应的子内存空间释放给所述第一内存空间。
可以理解的是,任务在使用子内存空间运行时,内存动态调控装置可以将该任务对应的子内存空间的占用标签更改为空闲标签,以便于其他任务执行时使用该空闲标签的子内存空间,从而充分利用该子内存空间,提高内存的使用效率。
在步骤S209中,在所述进程结束时,将所述第一内存空间释放给自适应汽车开放系统。
具体的,进程在执行时,进程会生成对应的各个任务的执行顺序的任务列表,在该任务列表中的最后一个任务执行完成时,该进程会生成对应的进程完成指令,应用程序或Adaptive AUTOSAR会接收到对应的进程完成指令,相应的,内存动态调控装置可以在该进程执行完成时,将第一内存空间释放给自适应汽车开放系统。
本说明书实施例提供的内存动态调控方法,可以在进程启动时,通过创建对应节点的方式记录不同进程运行时使用第一内存空间的第一使用信息,实现不同进程在执行时的使用内存情况的单独跟踪,保证进程使用内存数据的详细记录,同时根据进程对应的配置文件可以向自适应汽车开放系统申请第一内存空间,使得该进程可以在第一内存空间中执行,保证进程执行的独立性;在进程执行时,可以为进程中的各个任务分配满足其执行的子内存空间,可以保证各个任务占用的子内存空间小,提高内存的使用率,在任务执行完成时,可以将分配的子内存空间释放给第一内存空间,保证碎片化的子内存空间及时回收,解决内存碎片化的问题,避免内存碎片化过多,占用系统内存,在进程执行完成或进程结束时,可以将为该进程分配的第一内存空间释放给自适应汽车开放系统,既保证了各个任务在较小的子内存空间内有效执行,又能够避免内存泄露,提高了系统内存的利用率。
在上述实施例基础上,本说明书一个实施例中,所述在所述第一内存空间中申请与所述任务对应的第一子内存空间,包括:
在步骤301中,获取所述第一内存空间中当前空闲的子内存空间以及所述当前空闲的子内存空间对应的容量。
具体的,第一内存空间中可以包括当前空闲的子内存空间和/或当前占用的子内存空间。当前空闲的子内存空间表征该子内存空间未被任务使用。当前占用的子内存空间表征有任务使用该子内存空间。
具体的,在第一内存空间中存在当前空闲的子内存空间时,可以获取当前空闲的子内存空间以及所述当前空闲的子内存空间对应的容量。
可以理解的是,不同当前空闲的子内存空间对应的容量可以是不同的。即第一内存空间中各个子内存空间不是按照平均分配的方式进行分配的。
同样的,不同当前空闲的子内存空间对应的容量也可以是相同的。即第一内存空间中各个子内存空间可以是按照平均分配的方式进行分配的。
在步骤303中,在所述第一内存空间中当前空闲的子内存空间的数量为一个,且所述当前空闲的子内存空间无指向下一个子内存空间的指针时,判断所述当前空闲的子内存空间的容量与所述任务需要的内存容量的差值是否大于预设子内存容量阈值。
具体的,在所述第一内存空间中当前空闲的子内存空间的数量为一个时,且所述当前空闲的子内存空间无指向下一个子内存空间的指针时,表征第一内存空间中仅剩携带有终止地址的子内存空间。
具体的,指向下一个子内存空间的指针可以理解为对第一内存空间的各个子内存空间进行排序的编码,即不同的子内存空间具有不同的编码,且该编码可以表征不同的子内存空间是否连续,如编码3分别与编码2和编码4连续。
在一个可选的实施例中,该指针可以是分配的物理地址,即在第一内存空间分配时,可以将中间部分的物理地址分别分配给不同的子内存空间,即相邻的子内存空间可以有一个相同的物理地址,相同的物理地址分别位于不同的子内存空间的首端或末段。如子内存空间2的物理地址为33到36,子内存空间3的物理地址为36到39,子内存空间4的物理地址为39到43。
在一个可选的实施例中,携带有终止地址的子内存空间的容量可以与第一内存空间的容量相同,即第一内存空间还未进行分配内存或申请对应的子内存空间的任务为该进程的首个任务。
在一个可选的实施例中,携带有终止地址的子内存空间的容量不与第一内存空间的容量相同,即第一内存空间已经进行分配内存或申请对应的子内存空间的任务为该进程的非首个任务。
具体的,不同的任务执行需要有对应的最小的内存空间才能够执行。在上述任务列表中可以有每个任务执行时所需要的内存空间,即在任务申请子内存空间时,可以申请对应的内存空间的子内存空间。内存动态调控装置可以判断当前空闲的子内存空间的容量与所述任务需要的内存容量的差值是否大于预设子内存容量阈值。其中,预设子内存容量阈值可以是预先设定的子内存空间的最小容量值,即小于预设子内存容量阈值的内存空间不能够进行拆分。
在步骤305中,在所述当前空闲的子内存空间的容量与所述任务需要的内存容量的差值大于预设子内存容量阈值时,根据所述任务需要的内存容量将所述当前空闲的子内存空间划分为第一子内存空间和第二子内存空间。
具体的,在当前空闲的子内存空间能够拆分时,可以根据所述任务需要的内存容量将所述当前空闲的子内存空间划分为第一子内存空间和第二子内存空间。其中,第一子内存空间可以满足上述任务在其中运行。可选的,第一子内存空间的容量可以是预先设定的子空间容量的最小值或任务需要的内存容量。可以理解的是,预先设定的子空间容量的最小值是大于任务需要的内存容量的。第二子内存空间的容量是当前空闲的子内存空间的容量与第一子内存空间容量的差值。
在步骤307中,对所述第一子内存空间添加表征所述任务执行时占用标签以及用于指向所述第二子内存空间的指针,对所述第二子内存空间添加空闲标签。
相应的,所述在所述任务执行完成时,将所述任务对应的第一子内存空间释放给所述第一内存空间,包括:
在所述任务执行完成时,将所述任务对应的第一子内存空间释放给所述第一内存空间,并将所述第一子内存空间的所述占用标签更改为所述空闲标签。
本说明书实施例提供的内存动态调控方法,在任务申请对应的子内存空间时,可以根据申请的容量对应的分配第一子内存空间,在当前空闲的子内存空间容量大于申请的容量时,可以通过拆分的方式拆分出能够满足任务运行的第一子内存空间和余下的第二子内存空间,第二子内存空间可以被其他任务使用,提高了内存的使用效率,进而提高任务的处理速度。
在一个可选的实施例中,在获取所述第一内存空间中当前空闲的子内存空间的数量以及所述当前空闲的子内存空间对应的容量的同时,所述方法还包括:获取所述当前空闲的子内存空间的指针。
具体的,指针可以用于指示拆分后的子内存空间的在第一内存空间的位置或不同的子内存空间是否连续。
所述在所述第一内存空间中申请与所述任务对应的第一子内存空间,还包括:
在所述第一内存空间中当前空闲的子内存空间的数量为至少两个时,判断各个所述当前空闲的子内存空间的容量是否大于所述任务需要的内存容量;
在各个所述当前空闲的子内存空间的容量均不大于所述任务需要的内存容量时,基于所述当前空闲的子内存空间的指针将相邻的所述当前空闲的子内存空间整合为一个子内存空间,得到第一子内存空间,所述第一子内存空间的容量大于所述任务所需的容量。
具体的,在各个所述当前空闲的子内存空间的容量均不大于所述任务需要的内存容量时,可以根据指针将相邻且当前空闲的子内存空间整合为一个子内存空间,得到第一子内存空间。
本说明书实施例能够在多个当前空闲的子空间内存的容量均不大于任务所需的容量时,将连续且空闲的子内存空间整合为一个子内存空间,减少了第一内存空间中的内存碎片化的问题,并能够保证内存使用需要较大的任务正常运行,提高内存动态调控的适用性。
在一个上述实施例基础上,本说明书一个实施例中,所述方法还包括:
在所述当前空闲的子内存空间的数量为一个且所述当前空闲的子内存空间的容量小于所述任务需要的内存容量时,向所述自适应汽车开放系统申请第二内存空间,所述第二内存空间的容量大于所述第一内存空间的容量;
具体的,在所述当前空闲的子内存空间的数量为一个且所述当前空闲的子内存空间的容量小于所述任务需要的内存容量,表征第一内存空间不能够支撑对应的进程正常运行,此时,可以该进程可以向所述自适应汽车开放系统申请第二内存空间。
可以理解的是,第二内存空间的容量应用大于第一内存空间的容量。
将所述第一内存空间内的任务转存至所述第二内存空间执行,并将所述第二内存空间作为第一内存空间。
具体的,申请后的第二内存空间可以按照第一内存空间已经拆分后的子内存空间拆分成对应的子内存空间,以使得在第一内存空间中运行的任务继续执行。在拆分完成后,可以将第一内存空间内的任务转存至所述第二内存空间执行,并将拆分后的第二内存空间作为第一内存空间。之后该进程对应的任务可以按照上述方式依次向第一内存空间申请对应的第一子内存空间。
在一个可选的实施例中,在申请第二内存空间后,并将进程中的任务转存在第二内存空间中执行时,可以将在先申请的第一内存空间释放给自适应汽车开放系统,从而提高申请内存的回收效率,进而提高内存使用率。
本说明书实施例通过在申请的第一内存空间不能够满足进程中的任务运行时,可以向系统申请大于第一内存空间容量的第二内存空间,并将该进程在申请后的第二内存空间中执行,保证进程申请的空间容量相对较小,避免内存的浪费,提高内存的利用率。
在上述实施例基础上,本说明书一个实施例中,所述方法还包括:
实时获取所述内存分配链上各个所述节点的第一使用信息;
具体的,第一使用信息可以包括上述基础信息(processInfo)、统计信息(statistical Info)、子节点列表(subnodeList)和子节点对应任务(taskNode)、任务信息(taskInfo)、申请的内存信息(memoryList)、当前已经分配的子内存空间或内存块(allocList)以及当前空闲的子内存空间或内存块(freeList)等信息。
将各个所述节点的第一使用信息存储至对应的日志中;
具体的,日志可以以不同的进程为类别,将不同进程对应的第一使用信息存储。
基于所述日志中的各个所述节点的第一使用信息,生成当前各个进程的内存使用报告。
具体的,内存使用报告可以是以常用的office办公软件的形式展示,如word、execl、ppt等,还可以将不同的进程对应的第一使用信息统一展示在一个对照图中。
本说明书实施例通过实时获取各个进程的第一使用信息,并将第一使用信息以报告的形式展示,能实现各个进程使用内存的实时跟踪,提高用户好感度。
在上述实施例基础上,本说明书一个实施例中,所述方法还包括:
删除所述内存分配链上执行完成进程对应的节点。
具体的,在进程完成后并记录对应的第一使用信息后,可以将该进程对应的节点在内存分配链上删除,减少冗余信息。
再一方面,本公开提供一种内存动态调控装置,图4是根据一示例性实施例示出的一种内存动态调控装置框图,参照图4,所述装置设置在自适应汽车开放系统中,所述自适应汽车开放系统运行有至少一个应用程序,所述装置能够被所述应用程序调用,所述装置包括:
节点创建模块401,用于在所述应用程序的进程启动时,在内存分配链上创建与所述进程对应的节点;
第一内存空间申请模块402,用于基于所述进程对应的所需配置文件向所述自适应汽车开放系统申请第一内存空间;
子内存空间申请模块403,用于在所述进程中的各个任务执行时,在所述第一内存空间中申请与所述任务对应的第一子内存空间,使得所述任务在所述第一子内存空间中运行;
子内存空间释放模块404,用于在所述任务执行完成时,将所述任务对应的子内存空间释放给所述第一内存空间;
第一内存空间释放模块405,用于在所述进程结束时,将所述第一内存空间释放给自适应汽车开放系统。
由于内存动态调控装置与前文公开的终端侧的内存动态调控方法的过程相同,技术效果相当,在此不在累述。
图5是根据一示例性实施例示出的一种用于内存动态调控的电子设备的框图,该电子设备可以是终端,也可以是监管系统,其内部结构图可以如图5所示。该电子设备包括通过系统总线连接的处理器、存储器、网络接口、显示屏和输入装置。其中,该电子设备的处理器用于提供计算和控制能力。该电子设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统和计算机程序。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该电子设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种内存动态调控的方法。该电子设备的显示屏可以是液晶显示屏或者电子墨水显示屏,该电子设备的输入装置可以是显示屏上覆盖的触摸层,也可以是电子设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。
本领域技术人员可以理解,图5中示出的结构,仅仅是与本公开方案相关的部分结构的框图,并不构成对本公开方案所应用于其上的电子设备的限定,具体的电子设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
在示例性实施例中,还提供了一种电子设备,包括:处理器;用于存储该处理器可执行指令的存储器;其中,该处理器被配置为执行该指令,以实现如本公开实施例中的内存动态调控方法。
在示例性实施例中,还提供了一种计算机可读存储介质,当该计算机可读存储介质中的指令由电子设备的处理器执行时,使得电子设备能够执行本公开实施例中的内存动态调控方法。计算机可读存储介质可以是ROM、随机存取存储器(RAM)、CD-ROM、磁带、软盘和光数据存储设备等。
在示例性实施例中,还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行本公开实施例中的内存动态调控的方法。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,该计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)或闪存。易失性存储器可包括随机存取存储器(RAM)或者外部高速缓冲存储器。作为说明而非局限,RAM以多种形式可得,诸如静态RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双数据率SDRAM(DDRSDRAM)、增强型SDRAM(ESDRAM)、同步链路(Synchlink)DRAM(SLDRAM)、存储器总线(Rambus)直接RAM(RDRAM)、直接存储器总线动态RAM(DRDRAM)、以及存储器总线动态RAM(RDRAM)等。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本公开的其它实施方案。本申请旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由下面的权利要求指出。
应当理解的是,本公开并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本公开的范围仅由所附的权利要求来限制。
Claims (10)
1.一种内存动态调控方法,其特征在于,所述方法应用于自适应汽车开放系统,所述自适应汽车开放系统运行有至少一个应用程序, 所述方法包括:
在所述应用程序的进程启动时,在内存分配链上创建与所述进程对应的节点;
基于所述进程对应的所需配置文件向所述自适应汽车开放系统申请第一内存空间,并由所述节点存储所述进程运行时使用所述第一内存空间的第一使用信息;
在所述进程中的各个任务执行时,在所述第一内存空间中申请与所述任务对应的第一子内存空间,使得所述任务在所述第一子内存空间中运行;
在所述任务执行完成时,将所述任务对应的子内存空间释放给所述第一内存空间,并将所述第一子内存空间的占用标签更改为空闲标签,用于其他任务执行时使用所述空闲标签的所述第一子内存空间;
在所述进程结束时,将所述第一内存空间释放给自适应汽车开放系统;
其中,所述第一使用信息包括各个任务运行时使用所述第一子内存空间的第二使用信息;所述在所述进程中的各个任务执行时,在所述第一内存空间中申请与所述任务对应的第一子内存空间,使得所述任务在所述第一子内存空间中运行,包括:
在所述进程中的各个任务执行时,在所述节点上创建与所述任务对应的子节点;
在所述第一内存空间中申请与所述任务对应的第一子内存空间, 使得所述任务在所述第一子内存空间中运行;
在所述任务在所述第一子内存空间中运行时,由所述子节点存储所述任务运行时使用所述第一子内存空间的第二使用信息。
2.根据权利要求 1所述内存动态调控方法,其特征在于,所述在所述第一内存空间中申请与所述任务对应的第一子内存空间,包括:
获取所述第一内存空间中当前空闲的子内存空间以及所述当前空闲的子内存空间对应的容量;
在所述第一内存空间中当前空闲的子内存空间的数量为一个,且所述当前空闲的子内存空间无指向下一个子内存空间的指针时,判断所述当前空闲的子内存空间的容量与所述任务需要的内存容量的差值是否大于预设子内存容量阈值;
在所述当前空闲的子内存空间的容量与所述任务需要的内存容量的差值大于预设子内存容量阈值时,根据所述任务需要的内存容量将所述当前空闲的子内存空间划分为第一子内存空间和第二子内存空间;
对所述第一子内存空间添加表征所述任务执行时的所述占用标签以及用于指向所述第二子内存空间的指针,对所述第二子内存空间添加所述空闲标签。
3.根据权利要求2所述内存动态调控方法,其特征在于,在获取所述第一内存空间中当前空闲的子内存空间的数量以及所述当前空闲的子内存空间对应的容量的同时,所述方法还包括:获取所述当前空闲的子内存空间的指针;
所述在所述第一内存空间中申请与所述任务对应的第一子内存空间,还包括:
在所述第一内存空间中当前空闲的子内存空间的数量为至少两个时,判断各个所述当前空闲的子内存空间的容量是否大于所述任务需要的内存容量;
在各个所述当前空闲的子内存空间的容量均不大于所述任务需要的内存容量时,基于所述当前空闲的子内存空间的指针将相邻的所述当前空闲的子内存空间整合为一个子内存空间,得到第一子内存空间,所述子内存空间的容量大于所述任务所需的容量。
4.根据权利要求3所述内存动态调控方法,其特征在于,所述方法还包括:
在所述当前空闲的子内存空间的数量为一个且所述当前空闲的子内存空间的容量小于所述任务需要的内存容量时,向所述自适应汽车开放系统申请第二内存空间,所述第二内存空间的容量大于所述第一内存空间的容量;
将所述第一内存空间内的任务转存至所述第二内存空间执行,并将所述第二内存空间作为第一内存空间。
5.根据权利要求 2-4任一项所述内存动态调控方法,其特征在于,
所述在所述进程结束时,将所述第一内存空间释放给自适应汽车开放系统,包括:
基于所述第一内存空间中各个子内存空间的指针,将相邻的所述子内存空间合并得到目标内存空间;
将所述目标内存空间释放给自适应汽车开放系统。
6.根据权利要求 5所述内存动态调控方法,其特征在于,所述方法还包括:
实时获取所述内存分配链上各个所述节点的第一使用信息; 将各个所述节点的第一使用信息存储至对应的日志中;
基于所述日志中的各个所述节点的第一使用信息,生成当前各个进程的内存使用报告。
7.根据权利要求 5所述内存动态调控方法,其特征在于,所述方法还包括:
删除所述内存分配链上执行完成的进程对应的节点。
8.一种内存动态调控装置,其特征在于,所述装置设置在自适应 汽车开放系统中,所述自适应汽车开放系统运行有至少一个应用程序, 所述装置能够被所述应用程序调用,所述装置包括:
节点创建模块,用于在所述应用程序的进程启动时,在内存分配链上创建与所述进程对应的节点;
第一内存空间申请模块,用于基于所述进程对应的所需配置文件向所述自适应汽车开放系统申请第一内存空间,并由所述节点存储所述进程运行时使用所述第一内存空间的第一使用信息;
子内存空间申请模块,用于在所述进程中的各个任务执行时,在所述第一内存空间中申请与所述任务对应的第一子内存空间,使得所述任务在所述第一子内存空间中运行;
子内存空间释放模块,用于在所述任务执行完成时,将所述任务对应的子内存空间释放给所述第一内存空间,并将所述第一子内存空间的占用标签更改为空闲标签,用于其他任务执行时使用所述空闲标签的所述第一子内存空间;
第一内存空间释放模块,用于在所述进程结束时,将所述第一内存空间释放给自适应汽车开放系统;
其中,所述第一使用信息包括各个任务运行时使用所述第一子内存空间的第二使用信息;所述在所述进程中的各个任务执行时,在所述第一内存空间中申请与所述任务对应的第一子内存空间,使得所述任务在所述第一子内存空间中运行,包括:
在所述进程中的各个任务执行时,在所述节点上创建与所述任务对应的子节点;
在所述第一内存空间中申请与所述任务对应的第一子内存空间, 使得所述任务在所述第一子内存空间中运行;
在所述任务在所述第一子内存空间中运行时,由所述子节点存储所述任务运行时使用所述第一子内存空间的第二使用信息。
9.一种电子设备,其特征在于,包括:处理器;用于存储所述处理器可执行指令的存储器;其中,所述处理器被配置为执行所述指令,以实现如权利要求1至7中任一项所述的内存动态调控方法。
10.一种计算机可读存储介质,其特征在于,当所述计算机可读 存储介质中的指令由内存动态调控装置/电子设备的处理器执行时, 使得所述内存动态调控装置/电子设备能够执行如权利要求1至7中任一项所述的内存动态调控方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111489222.0A CN114327868B (zh) | 2021-12-08 | 2021-12-08 | 一种内存动态调控方法、装置、设备及介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111489222.0A CN114327868B (zh) | 2021-12-08 | 2021-12-08 | 一种内存动态调控方法、装置、设备及介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114327868A CN114327868A (zh) | 2022-04-12 |
CN114327868B true CN114327868B (zh) | 2023-12-26 |
Family
ID=81051398
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111489222.0A Active CN114327868B (zh) | 2021-12-08 | 2021-12-08 | 一种内存动态调控方法、装置、设备及介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114327868B (zh) |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105893269A (zh) * | 2016-03-31 | 2016-08-24 | 武汉虹信技术服务有限责任公司 | 一种Linux系统下内存管理方法 |
CN105988876A (zh) * | 2015-03-27 | 2016-10-05 | 杭州迪普科技有限公司 | 内存分配方法及装置 |
CN107153618A (zh) * | 2016-03-02 | 2017-09-12 | 阿里巴巴集团控股有限公司 | 一种内存分配的处理方法及装置 |
CN110858162A (zh) * | 2018-08-24 | 2020-03-03 | 华为技术有限公司 | 内存管理方法及装置、服务器 |
CN110888822A (zh) * | 2019-12-03 | 2020-03-17 | 北京小米智能科技有限公司 | 内存处理方法、装置及存储介质 |
CN112817762A (zh) * | 2021-01-29 | 2021-05-18 | 中汽创智科技有限公司 | 一种基于自适应汽车开放系统架构标准的调度系统及其调度方法 |
-
2021
- 2021-12-08 CN CN202111489222.0A patent/CN114327868B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105988876A (zh) * | 2015-03-27 | 2016-10-05 | 杭州迪普科技有限公司 | 内存分配方法及装置 |
CN107153618A (zh) * | 2016-03-02 | 2017-09-12 | 阿里巴巴集团控股有限公司 | 一种内存分配的处理方法及装置 |
CN105893269A (zh) * | 2016-03-31 | 2016-08-24 | 武汉虹信技术服务有限责任公司 | 一种Linux系统下内存管理方法 |
CN110858162A (zh) * | 2018-08-24 | 2020-03-03 | 华为技术有限公司 | 内存管理方法及装置、服务器 |
CN110888822A (zh) * | 2019-12-03 | 2020-03-17 | 北京小米智能科技有限公司 | 内存处理方法、装置及存储介质 |
CN112817762A (zh) * | 2021-01-29 | 2021-05-18 | 中汽创智科技有限公司 | 一种基于自适应汽车开放系统架构标准的调度系统及其调度方法 |
Also Published As
Publication number | Publication date |
---|---|
CN114327868A (zh) | 2022-04-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11106579B2 (en) | System and method to manage and share managed runtime memory for java virtual machine | |
CN110663019B (zh) | 用于叠瓦式磁记录(smr)的文件系统 | |
CN109669640B (zh) | 一种数据存储方法、装置、电子设备及介质 | |
CN106557427B (zh) | 共享内存数据库的内存管理方法及装置 | |
CN103608766A (zh) | 用于新应用的存储器管理模型和接口 | |
WO2024119764A1 (zh) | 一种任务调度方法、装置及电子设备和存储介质 | |
WO2008006674A1 (en) | Reserve pool management in virtualized storage systems | |
US20190227918A1 (en) | Method for allocating memory resources, chip and non-transitory readable medium | |
CN109740310B (zh) | 用于嵌入式操作系统的内核对象访问方法和装置 | |
CN110750336A (zh) | 一种OpenStack虚拟机内存热扩容方法 | |
CN115576716A (zh) | 一种基于多进程的内存管理方法 | |
CN115629882A (zh) | 多进程中的内存的管理方法 | |
CN114327868B (zh) | 一种内存动态调控方法、装置、设备及介质 | |
CN117632516A (zh) | 资源分配方法、装置、和计算机设备 | |
CN113849311B (zh) | 内存空间管理方法、装置、计算机设备和存储介质 | |
US20220318042A1 (en) | Distributed memory block device storage | |
CN111813564B (zh) | 集群资源管理方法、装置及容器集群管理系统 | |
KR20190069134A (ko) | 응용 프로그램간 파일 공유 장치 및 방법 | |
JPWO2021218038A5 (zh) | ||
CN114721814A (zh) | 一种基于共享栈的任务分配方法、装置、计算机设备 | |
CN112948118A (zh) | 边缘计算方法、平台、计算机设备和可读存储介质 | |
CN113961302A (zh) | 资源分配方法、装置、电子设备及存储介质 | |
CN117850985B (zh) | 一种虚拟机内存资源管理方法、装置、设备及介质 | |
CN109522122B (zh) | 一种内存管理方法、系统、装置及计算机可读存储介质 | |
CN110851273A (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 |