1.本发明实施例涉及数据处理技术,尤其涉及一种内存动态管理方法、装置、设备及存储介质。
背景技术:2.在计算机系统中,内存是最重要的资源之一。其容量直接影响系统的整体性能。假设有多个业务需要同时进行时,其中一个业务负责生产数据,其余业务消费数据,由于消费数据有多个,所以就需要开辟缓冲,这个缓冲也称为共享内存。
3.在多线程编程下传统数据共享方式是在一块内存上,通多加锁方式,让多个业务对这块内存进行读写数据。每个线程的读位置都不同,写位置要满足在读的前面,缓冲写满时需要记录圈数,与读的圈数比较。但是在业务增多后,共享一块内存的方式,效率不高,容易产生死锁,内存的使用效率也不能达到最优。
技术实现要素:4.本发明提供一种内存动态管理方法、装置、设备及存储介质,以实现动态监测各个任务的内存使用情况,对内存进行动态管理,使内存的使用效率达到最优。
5.第一方面,本发明实施例提供了一种内存动态管理方法,包括:
6.根据预设任务的数量创建对应数量的内存区域,按预设内存值为每个所述内存区域分配内存;
7.间隔预设时间,循环获取每个所述内存区域的已使用内存值;
8.判断所述已使用内存值是否在预设有效范围内,若否,则根据所述内存区域的已使用内存值和有效系数对内存区域的内存进行动态管理。
9.可选的,在所述获取每个所述内存区域的已使用内存值之前,还包括:
10.创建监测线程监控每个所述内存区域的已使用内存值。
11.可选的,所述预设有效范围由所述预设内存值与有效阈值确定,所述预设有效范围的最小值为所述预设内存值与有效范围最小值的乘积,所述预设有效范围的最大值为所述预设内存值与有效范围最大值的乘积。
12.可选的,所述根据所述内存区域的已使用内存值和有效系数对内存区域的内存进行动态管理包括:
13.根据所述内存区域的已使用内存值与所述有效范围最小值计算得到新分配内存值;
14.根据所述新分配内存值对相应内存区域的内存进行重新分配。
15.可选的,所述根据所述内存区域的已使用内存值和有效系数对内存区域的内存值进行动态管理,还包括:
16.按照预设任务的优先级顺序,对所述内存区域的内存进行重新分配。
17.可选的,一种内存动态管理方法还包括:
18.将已执行完毕的所述预设任务对应的内存空间回收。
19.第二方面,本发明实施例还提供了一种内存动态管理装置,包括:
20.内存初始分配模块,用于根据预设任务的数量创建对应数量的内存区域,按预设内存值为每个所述内存区域分配内存;
21.内存动态监测模块,用于间隔预设时间,循环获取每个所述内存区域的已使用内存值;
22.内存使用判断模块,用于判断所述已使用内存值是否在预设有效范围内;
23.动态管理模块,用于根据所述内存区域的已使用内存值和有效系数对内存区域的内存值进行动态管理。
24.第三方面,本发明实施例还提供了一种内存动态管理设备,所述内存动态管理设备包括:
25.一个或多个处理器;
26.存储装置,用于存储一个或多个程序,
27.当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如第一方面中任一所述的内存动态管理方法。
28.第三方面,本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如第一方面中任一所述的内存动态管理方法。
29.本发明通过一种内存动态管理方法,包括:根据预设任务的数量创建对应数量的内存区域,按预设内存值为每个所述内存区域分配内存;间隔预设时间,循环获取每个内存区域的已使用内存值;判断已使用内存值是否在预设有效范围内;根据内存区域的已使用内存值和有效系数对内存区域的内存进行动态管理。解决任务较多时,共享内存时效率较低,容易产生死锁的问题,实现提高内存利用效率,在多任务时,动态管理内存,使得内存使用率最优,避免产生死锁的效果。
附图说明
30.图1为本发明实施例一提供的一种内存动态管理方法的流程示意图;
31.图2为本发明实施例提供的一种内存动态管理装置的结构示意图;
32.图3为本发明实施例三提供的一种内存动态管理设备的结构示意图。
具体实施方式
33.下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。
34.实施例一
35.图1为本发明实施例一提供的一种内存动态管理方法的流程示意图,本实施例可适用于多个任务需要使用共享内存的情况,该方法可以由一种内存动态管理装置来执行。
36.如图所示,一种内存动态管理方法,具体包括如下步骤:
37.步骤110、根据预设任务的数量创建对应数量的内存区域,按预设内存值为每个所述内存区域分配内存。
38.在多个任务需要使用同一业务产生的数据,即需要使用共享内存时,根据预设任务的数量创建对应数量的内存区域,按预设内存值为每个所述内存区域分配内存,将产生的数据缓存在各个预设任务对应的内存区域。每个任务只需要从各自对应的内存区域获取数据即可,不需要与其他模块产生联系,提高每个任务获取数据缓存的速度和准确性。在创建每个预设任务对应的内存区域时,按预设内存值为每个所述内存区域分配内存,初始都分配相同的内存。在实际应用时,考虑到实际嵌入式内存空间是有限的,采用mem_consumers_max来限定共享内存的大小。
39.进一步的,内存区域分配预设内存后,实际分配的内存与分配内存存在一定差异,一个内存实际分配的内存memtotal与预设内存值和预设有效范围,nicerange(nice_min,nice_max),其中nice_min和nice_max都是大于0并且小于1的小数。所述预设有效范围由所述预设内存值与有效阈值确定,所述预设有效范围的最小值为所述预设内存值与有效范围最小值的乘积,所述预设有效范围的最大值为所述预设内存值与有效范围最大值的乘积。所以一个内存分配的预设有效范围的最小值为nicemin=memtotal*nice_min;一个内存分配的预设有效范围的最大值为nicemax=memtotal*nice_max。
40.步骤120、间隔预设时间,循环获取每个所述内存区域的已使用内存值。
41.每个任务执行时,受其他因素影响较大,访问内存的速度可能不一致,在不同时间,每个任务对应的内存区域使用情况不相同,因此,为了动态管理没分内存区域,使内存使用达到最优利用率,间隔预设时间,循环获取每个内存区域的已使用内存值。其中,预设时间为单位时间,例如1秒。
42.在步骤120之前还包括:创建监测线程监控每个所述内存区域的已使用内存值。
43.创建一个监测线程,用于监控每个所述内存区域的已使用内存值,具体为监测每个任务对应的内存区域在单位时间内使用内存数据和剩余内存大小。
44.步骤130、判断所述已使用内存值是否在预设有效范围内。
45.每个任务所需缓存数据大小不一定相同,不同任务对应的内存区域的已使用内存大小也不相同,有的任务的内存使用较小,初始分配的内存未完全利用,有的任务的内存使用较多,初始分配的内存可能不够,为了提高内存使用效率,需要判断每个任务的内存使用情况。
46.其中,判断所述已使用内存值是否在预设有效范围内,包括判断所述已使用内存值是否大于有效范围最大值和判断所述已使用内存值是否小于有效范围最小值。
47.当某个任务的内存区域的已使用内存值(memused)一直小于有效范围最小值(nicemin),表示此任务的内存剩余比较多,可以适当减小当前分配的内存;当某个任务的内存区域的已使用内存值(memused)一直大于有效范围最大值(nicemax),表示此任务内存剩余比较少,可以适当增大当前分配的内存;当某个任务的内存区域的已使用内存值在有效范围最小值和有效范围最大值之间时,表示此任务的内存使用正常,不需要进行调整,则返回执行步骤120。
48.步骤140、根据所述内存区域的已使用内存值和有效系数对内存区域的内存进行动态管理。
49.根据内存区域的已使用内存值,减少内存剩余多的,增加内存剩余少的。
50.其中,步骤140包括:
51.步骤141、根据所述内存区域的已使用内存值与所述有效范围最小值计算得到新分配内存值。
52.步骤142、根据所述新分配内存值对相应内存区域的内存进行重新分配。
53.新分配内存值(newmem)的计算公式为:newmem=memused/nice_min,即已使用内存值除以有效范围最小值计算得到,保证了已使用内存值在重新分配内存值的有效范围内。
54.进一步的,在重新分配内存后,监测线程继续监测各任务对应的内存区域的内存使用情况,根据内存使用情况,循环调整内存分配,从而达到动态分配内存的效果。
55.示例性的,三个预设任务对应三个内存区域,三个内存区域分别分配预设内存值,例如,每个分配200m,有效范围nicerange(0.8,0.9),预设有效范围为[160,180],q1、q2和q3分别表示三个任务的内存分配情况。在运行一段时间t1后,第一个任务的内存q1只使用了100m,剩余内存值为100m,已使用内存值小于预设有效范围的最小值,可以减少内存的分配,新分配内存值newmem=100/0.8=125;第二个任务的内存q2使用了200m,没有剩余内存,已使用内存值大于预设有效范围的最大值,需要增加分配内存,新分配内存值newmem=200/0.8=250;第三个任务的内存q3使用了170m,在预设有效范围内,不用调整内存。在调整之后,第一任务的内存q1的有效范围是[125*0.8,125*0.9]即[100,112];第二任务的内存q2的有效范围是[250*0.8,250*0.9],即[200,225]。继续经过t2时间后,第一任务的内存q1实际内存的使用是115m,超过有效范围,需要增加内存,新分配内存值newmem=115/0.8=143;第二任务的内存q2实际内存使用为210m,在有效范围内,趋于稳定,不用继续调整;q3仍然是稳定的,不用调整。经过两次内存调整后,第二任务和第三任务的内存区域的内存分配趋于稳定,还需继续对第一任务的内存区域的内存分配进行监测和调整。重新分配内存后,监控线程继续监测内存使用情况,循环运行,达到动态分配内存的效果,使内存的使用效率达到最优。
[0056]
进一步的,步骤142之中,还包括:按照预设任务的优先级顺序,对所述内存区域的内存进行重新分配。
[0057]
每个任务的优先级可能存在差异,可以对每个任务设定优先级顺序,按照实时性要求,对优先级高的任务,优先对内存进行动态管理,满足紧急任务的内存分配需求,提高任务执行的效率。
[0058]
进一步的,还包括:将已执行完毕的所述预设任务对应的内存空间回收。
[0059]
嵌入式中多个任务也不一定都是同时存在的,当有任务需要生产者的数据时,此时可以动态建立共享内存,当不需要时,也可以动态释放共享内存,使系统的内存空间可以得到最优的使用效率。
[0060]
在某个任务已执行完毕时,可以动态销毁此任务,防止占用过多内存,并且将对应的内存空间收回进行动态分配,提高内存使用效率。
[0061]
本实施例的技术方案,通过一种内存动态管理方法,包括:根据预设任务的数量创建对应数量的内存区域,按预设内存值为每个所述内存区域分配内存;间隔预设时间,循环获取每个内存区域的已使用内存值;判断已使用内存值是否在预设有效范围内;根据内存区域的已使用内存值和有效系数对内存区域的内存进行动态管理。循环获取每个任务的已使用内存值,与预设有效范围进行比较,将剩余内存较多的任务对应的内存减少,将剩余内
存较少或不足的任务对应的内存增加,保证每个任务执行时具有合适的内存,解决任务较多时,共享内存时效率较低,容易产生死锁的问题,根据每个任务时间内存使用值进行动态管理,实现提高内存利用效率,在多任务时,动态管理内存,使得内存使用率最优,避免产生死锁的效果。
[0062]
实施例二
[0063]
图2为本发明实施例提供的一种内存动态管理装置的结构示意图。
[0064]
如图2所示,一种内存动态管理装置,包括:
[0065]
内存初始分配模块210,用于根据预设任务的数量创建对应数量的内存区域,按预设内存值为每个所述内存区域分配内存。
[0066]
在多个任务需要使用同一业务产生的数据,即需要使用共享内存时,根据预设任务的数量创建对应数量的内存区域,按预设内存值为每个所述内存区域分配内存,将产生的数据缓存在各个预设任务对应的内存区域。每个任务只需要从各自对应的内存区域获取数据即可,不需要与其他模块产生联系,提高每个任务获取数据缓存的速度和准确性。在创建每个预设任务对应的内存区域时,按预设内存值为每个所述内存区域分配内存,初始都分配相同的内存。在实际应用时,考虑到实际嵌入式内存空间是有限的,采用mem_consumers_max来限定共享内存的大小。
[0067]
进一步的,内存区域分配预设内存后,实际分配的内存与分配内存存在一定差异,一个内存实际分配的内存memtotal与预设内存值和预设有效范围,nicerange(nice_min,nice_max),其中nice_min和nice_max都是大于0并且小于1的小数。所述预设有效范围由所述预设内存值与有效阈值确定,所述预设有效范围的最小值为所述预设内存值与有效范围最小值的乘积,所述预设有效范围的最大值为所述预设内存值与有效范围最大值的乘积。所以一个内存分配的预设有效范围的最小值为nicemin=memtotal*nice_min;一个内存分配的预设有效范围的最大值为nicemax=memtotal*nice_max。
[0068]
内存动态监测模块220,用于间隔预设时间,循环获取每个所述内存区域的已使用内存值。
[0069]
每个任务执行时,受其他因素影响较大,访问内存的速度可能不一致,在不同时间,每个任务对应的内存区域使用情况不相同,因此,为了动态管理没分内存区域,使内存使用达到最优利用率,间隔预设时间,循环获取每个内存区域的已使用内存值。其中,预设时间为单位时间,例如1秒。
[0070]
可选的,一种内存动态管理装置还包括:监测线程创建模块;
[0071]
监测线程创建模块,用于创建监测线程监控每个所述内存区域的已使用内存值。
[0072]
创建一个监测线程,用于监控每个所述内存区域的已使用内存值,具体为监测每个任务对应的内存区域在单位时间内使用内存数据和剩余内存大小。
[0073]
内存使用判断模块230,用于判断所述已使用内存值是否在预设有效范围内。
[0074]
每个任务所需缓存数据大小不一定相同,不同任务对应的内存区域的已使用内存大小也不相同,有的任务的内存使用较小,初始分配的内存未完全利用,有的任务的内存使用较多,初始分配的内存可能不够,为了提高内存使用效率,需要判断每个任务的内存使用情况。
[0075]
其中,判断所述已使用内存值是否在预设有效范围内,包括判断所述已使用内存
值是否大于有效范围最大值和判断所述已使用内存值是否小于有效范围最小值。
[0076]
动态管理模块240,用于根据所述内存区域的已使用内存值和有效系数对内存区域的内存值进行动态管理。
[0077]
根据内存区域的已使用内存值,减少内存剩余多的任务的内存值,增加内存剩余少的任务的内存值。
[0078]
动态管理模块240包括:
[0079]
新分配内存值计算单元,用于根据所述内存区域的已使用内存值与所述有效范围最小值计算得到新分配内存值。
[0080]
内存管理单元,用于根据所述新分配内存值对相应内存区域的内存进行重新分配。
[0081]
新分配内存值(newmem)的计算公式为:newmem=memused/nice_min,即已使用内存值除以有效范围最小值计算得到,保证了已使用内存值在重新分配内存值的有效范围内。
[0082]
在重新分配内存后,监测线程继续监测各任务对应的内存区域的内存使用情况,根据内存使用情况,循环调整内存分配,从而达到动态分配内存的效果。
[0083]
可选的,内存管理单元包括:顺序管理子单元,用于按照预设任务的优先级顺序,对所述内存区域的内存进行重新分配。
[0084]
每个任务的优先级可能存在差异,可以对每个任务设定优先级顺序,按照实时性要求,对优先级高的任务,优先对内存进行动态管理,满足紧急任务的内存分配需求,提高任务执行的效率。
[0085]
可选的,内存动态管理装置还包括:回收分配模块;
[0086]
回收分配模块,用于将已执行完毕的所述预设任务对应的内存空间回收。
[0087]
在某个任务已执行完毕时,可以动态销毁此任务,防止占用过多内存,并且将对应的内存空间收回进行动态分配,提高内存使用效率。
[0088]
本实施例的技术方案,通过一种内存动态管理方法,包括:根据预设任务的数量创建对应数量的内存区域,按预设内存值为每个所述内存区域分配内存;间隔预设时间,循环获取每个内存区域的已使用内存值;判断已使用内存值是否在预设有效范围内;根据内存区域的已使用内存值和有效系数对内存区域的内存进行动态管理。循环获取每个任务的已使用内存值,与预设有效范围进行比较,将剩余内存较多的任务对应的内存减少,将剩余内存较少或不足的任务对应的内存增加,保证每个任务执行时具有合适的内存,解决任务较多时,共享内存时效率较低,容易产生死锁的问题,根据每个任务时间内存使用值进行动态管理,实现提高内存利用效率,在多任务时,动态管理内存,使得内存使用率最优,避免产生死锁的效果。
[0089]
本发明实施例所提供的内存动态管理装置可执行本发明任意实施例所提供的内存动态管理方法,具备执行方法相应的功能模块和有益效果。
[0090]
实施例三
[0091]
图3为本发明实施例三提供的一种内存动态管理设备的结构示意图,如图3所示,该内存动态管理设备包括处理器30、存储器31、输入装置32和输出装置33;内存动态管理设备中处理器30的数量可以是一个或多个,图3中以一个处理器30为例;内存动态管理设备中
的处理器30、存储器31、输入装置32和输出装置33可以通过总线或其他方式连接,图3中以通过总线连接为例。
[0092]
存储器31作为一种计算机可读存储介质,可用于存储软件程序、计算机可执行程序以及模块,如本发明实施例中的内存动态管理方法对应的程序指令/模块(例如,内存动态管理装置中的内存初始分配模块210、内存动态监测模块220、内存使用判断模块230和动态管理模块240)。处理器30通过运行存储在存储器31中的软件程序、指令以及模块,从而执行内存动态管理设备的各种功能应用以及数据处理,即实现上述的内存动态管理方法。
[0093]
存储器31可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序;存储数据区可存储根据终端的使用所创建的数据等。此外,存储器31可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实例中,存储器31可进一步包括相对于处理器30远程设置的存储器,这些远程存储器可以通过网络连接至内存动态管理设备。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
[0094]
输入装置32可用于接收输入的数字或字符信息,以及产生与内存动态管理设备的用户设置以及功能控制有关的键信号输入。输出装置33可包括显示屏等显示设备。
[0095]
实施例四
[0096]
本发明实施例四还提供一种包含计算机可执行指令的存储介质,所述计算机可执行指令在由计算机处理器执行时用于执行一种内存动态管理方法,该方法包括:
[0097]
根据预设任务的数量创建对应数量的内存区域,按预设内存值为每个所述内存区域分配内存;
[0098]
间隔预设时间,循环获取每个所述内存区域的已使用内存值;
[0099]
判断所述已使用内存值是否在预设有效范围内;
[0100]
根据所述内存区域的已使用内存值和有效系数对内存区域的内存进行动态管理。
[0101]
当然,本发明实施例所提供的一种包含计算机可执行指令的存储介质,其计算机可执行指令不限于如上所述的方法操作,还可以执行本发明任意实施例所提供的内存动态管理方法中的相关操作。
[0102]
通过以上关于实施方式的描述,所属领域的技术人员可以清楚地了解到,本发明可借助软件及必需的通用硬件来实现,当然也可以通过硬件实现,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如计算机的软盘、只读存储器(read-only memory,rom)、随机存取存储器(random access memory,ram)、闪存(flash)、硬盘或光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
[0103]
值得注意的是,上述内存动态管理装置的实施例中,所包括的各个单元和模块只是按照功能逻辑进行划分的,但并不局限于上述的划分,只要能够实现相应的功能即可;另外,各功能单元的具体名称也只是为了便于相互区分,并不用于限制本发明的保护范围。
[0104]
注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行
了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。
技术特征:1.一种内存动态管理方法,其特征在于,包括:根据预设任务的数量创建对应数量的内存区域,按预设内存值为每个所述内存区域分配内存;间隔预设时间,循环获取每个所述内存区域的已使用内存值;判断所述已使用内存值是否在预设有效范围内;根据所述内存区域的已使用内存值和有效系数对内存区域的内存进行动态管理。2.根据权利要求1所述的内存动态管理方法,其特征在于,在所述获取每个所述内存区域的已使用内存值之前,还包括:创建监测线程监控每个所述内存区域的已使用内存值。3.根据权利要求1所述的内存动态管理方法,其特征在于,所述预设有效范围由所述预设内存值与有效阈值确定,所述预设有效范围的最小值为所述预设内存值与有效范围最小值的乘积,所述预设有效范围的最大值为所述预设内存值与有效范围最大值的乘积。4.根据权利要求3所述的内存动态管理方法,其特征在于,所述根据所述内存区域的已使用内存值和有效系数对内存区域的内存进行动态管理包括:根据所述内存区域的已使用内存值与所述有效范围最小值计算得到新分配内存值;根据所述新分配内存值对相应内存区域的内存进行重新分配。5.根据权利要求4所述的内存动态管理方法,其特征在于,所述根据所述内存区域的已使用内存值和有效系数对内存区域的内存值进行动态管理,还包括:按照预设任务的优先级顺序,对所述内存区域的内存进行重新分配。6.根据权利要求1所述的内存动态管理方法,其特征在于,还包括:将已执行完毕的所述预设任务对应的内存空间回收。7.一种内存动态管理装置,其特征在于,包括:内存初始分配模块,用于根据预设任务的数量创建对应数量的内存区域,按预设内存值为每个所述内存区域分配内存;内存动态监测模块,用于间隔预设时间,循环获取每个所述内存区域的已使用内存值;内存使用判断模块,用于判断所述已使用内存值是否在预设有效范围内;动态管理模块,用于根据所述内存区域的已使用内存值和有效系数对内存区域的内存值进行动态管理。8.一种内存动态管理设备,其特征在于,所述内存动态管理设备包括:一个或多个处理器;存储装置,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-6中任一所述的内存动态管理方法。9.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1-6中任一所述的内存动态管理方法。
技术总结本发明公开了一种内存动态管理方法、装置、设备及存储介质。一种内存动态管理方法,包括:根据预设任务的数量创建对应数量的内存区域,按预设内存值为每个内存区域分配内存;间隔预设时间,循环获取每个内存区域的已使用内存值;判断已使用内存值是否在预设有效范围内;根据内存区域的已使用内存值和有效系数对内存区域的内存进行动态管理。解决任务较多时,共享内存时效率较低,容易产生死锁的问题,实现提高内存利用效率,在多任务时,动态管理内存,使得内存使用率最优,避免产生死锁的效果。果。果。
技术研发人员:庄少华 陈文明 江常杯 庄白云
受保护的技术使用者:深圳市华宝电子科技有限公司
技术研发日:2022.04.20
技术公布日:2022/7/5