CN113778688B - 内存管理***、内存管理方法、内存管理装置 - Google Patents
内存管理***、内存管理方法、内存管理装置 Download PDFInfo
- Publication number
- CN113778688B CN113778688B CN202111091447.0A CN202111091447A CN113778688B CN 113778688 B CN113778688 B CN 113778688B CN 202111091447 A CN202111091447 A CN 202111091447A CN 113778688 B CN113778688 B CN 113778688B
- Authority
- CN
- China
- Prior art keywords
- memory
- container
- functional module
- manager
- containers
- 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 1511
- 238000007726 management method Methods 0.000 title claims abstract description 182
- 238000009826 distribution Methods 0.000 claims abstract description 13
- 238000003860 storage Methods 0.000 claims description 44
- 238000000034 method Methods 0.000 claims description 36
- 239000000523 sample Substances 0.000 claims 1
- 230000007246 mechanism Effects 0.000 description 33
- 238000012545 processing Methods 0.000 description 27
- 238000010586 diagram Methods 0.000 description 22
- 238000004891 communication Methods 0.000 description 20
- 230000006870 function Effects 0.000 description 18
- 238000010295 mobile communication Methods 0.000 description 18
- 230000008569 process Effects 0.000 description 14
- 230000004044 response Effects 0.000 description 14
- 238000004590 computer program Methods 0.000 description 7
- 101000617124 Mus musculus Stromal cell-derived factor 1 Proteins 0.000 description 5
- 238000013467 fragmentation Methods 0.000 description 5
- 238000006062 fragmentation reaction Methods 0.000 description 5
- 238000005516 engineering process Methods 0.000 description 4
- 239000012634 fragment Substances 0.000 description 2
- 230000003993 interaction Effects 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 238000005192 partition Methods 0.000 description 2
- KLDZYURQCUYZBL-UHFFFAOYSA-N 2-[3-[(2-hydroxyphenyl)methylideneamino]propyliminomethyl]phenol Chemical compound OC1=CC=CC=C1C=NCCCN=CC1=CC=CC=C1O KLDZYURQCUYZBL-UHFFFAOYSA-N 0.000 description 1
- 230000001133 acceleration Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 201000001098 delayed sleep phase syndrome Diseases 0.000 description 1
- 208000033921 delayed sleep phase type circadian rhythm sleep disease Diseases 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 230000007717 exclusion Effects 0.000 description 1
- 238000002955 isolation Methods 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 238000011084 recovery Methods 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5016—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5022—Mechanisms to release resources
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System (AREA)
Abstract
本申请实施例公开了一种内存管理***、内存管理方法、内存管理装置,内存管理***包括处理器、N个内存管理器以及N个功能模块,N个内存管理器和N个功能模块分别一一对应连接,N为大于1的整数;处理器,用于分别为N个功能模块分配内存容器;第一内存管理器,用于根据第一功能模块的内存分配请求,从第一功能模块对应的第一内存容器中为第一功能模块分配内存块;其中,第一内存管理器为N个内存管理器中的任意一个内存容器,第一功能模块为N个功能模块中的、与第一内存容器对应的一个功能模块;第一功能模块,用于向内存块写入数据。
Description
技术领域
本发明涉及芯片设计领域,尤其涉及一种内存管理***、内存管理方法、内存管理装置。
背景技术
随着***移动通信技术(the 4th generation mobile communicationtechnology,4G)/第五代移动通信技术(5th Generation Mobile CommunicationTechnology,5G)高速移动通信的普及,以及自动驾驶,工业互联网,物联网等新型业务模型的出现,越来越多的处理任务被下放到功能模块。
相应地,针对新型移动通信业务进行设计时,例如对内存的分配、释放时间提出了更高的要求。而传统的由处理器执行的内存管理机制已经无法满足移动通信装置在性能、成本以及可扩展性等方面所面临新的要求。
发明内容
本申请实施例提供了一种内存管理***、内存管理方法、内存管理装置,实现了内存管理硬件化的机制,进而能够满足移动通信装置在性能、成本以及可扩展性等方面所面临新的要求。
本申请实施例的技术方案是这样实现的:
第一方面,本申请实施例提供了一种内存管理***,其特征在于,所述内存管理***包括处理器、N个内存管理器以及N个功能模块,所述N个内存管理器和所述N个功能模块分别一一对应连接,N为大于1的整数;
所述处理器,用于分别为所述N个功能模块分配内存容器;
第一内存管理器,用于根据第一功能模块的内存分配请求,从所述第一功能模块对应的第一内存容器中为所述第一功能模块分配内存块;其中,所述第一内存管理器为所述N个内存管理器中的任意一个内存容器,所述第一功能模块为所述N个功能模块中的、与所述第一内存容器对应的一个功能模块;
所述第一功能模块,用于向所述内存块写入数据。
第二方面,本申请实施例提供了一种内存管理方法,所述内存管理方法应用于内存管理***,所述内存管理***包括处理器、N个内存管理器以及N个功能模块,所述N个内存管理器和所述N个功能模块分别一一对应连接,N为大于1的整数,所述方法包括:
所述处理器分别为所述N个功能模块分配内存容器;
第一内存管理器根据第一功能模块的内存分配请求,从所述第一功能模块对应的第一内存容器中为所述第一功能模块分配内存块;其中,所述第一内存管理器为所述N个内存管理器中的任意一个内存容器,所述第一功能模块为所述N个功能模块中的、与所述第一内存容器对应的一个功能模块;
所述第一功能模块向所述内存块写入数据。
第三方面,本申请实施例提供了一种内存管理装置,所述内存管理装置包括:分配单元,N个管理单元,N个写入单元,其中,N为大于1的整数,
所述分配单元,用于分别为所述N个功能模块分配内存容器;
所述N个管理单元,用于根据内存分配请求,从所述N个功能模块对应的内存容器中为所述N个功能模块分配内存块;
所述N个写入单元,用于向所述内存块写入数据。
本申请实施例提供了一种内存管理***、内存管理方法、内存管理装置,内存管理***包括处理器、N个内存管理器以及N个功能模块,N个内存管理器和N个功能模块分别一一对应连接,N为大于1的整数;处理器,用于分别为N个功能模块分配内存容器;第一内存管理器,用于根据第一功能模块的内存分配请求,从第一功能模块对应的第一内存容器中为第一功能模块分配内存块;其中,第一内存管理器为N个内存管理器中的任意一个内存容器,第一功能模块为N个功能模块中的、与第一内存容器对应的一个功能模块;第一功能模块,用于向内存块写入数据。也就是说,在本申请的实施例中,通过功能模块设置的一一对应的内存管理器可以实现对功能模块的硬件内存管理机制,降低了对CPU和微处理器的性能需求;同时,内存管理器能够以内存容器为单位进行内存的分配和释放,降低了内存功耗,并提高了内存管理的效率和性能。可见,本申请提出的内存管理方法,实现了内存管理硬件化的机制,进而能够满足移动通信装置在性能、成本以及可扩展性等方面所面临新的要求。
附图说明
图1为软件内存管理器与硬件交互的示意图;
图2为内存管理***的组成结构示意图一;
图3为内存管理***的示意图一;
图4为内存管理***的示意图二;
图5内存管理方法的实现流程示意图;
图6为32K字节的内存容器的变长分配场景示意图;
图7为内存管理装置的组成结构示意图;
图8为内存管理***的组成结构示意图二。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述。可以理解的是,此处所描述的具体实施例仅用于解释相关申请,而非对该申请的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与有关申请相关的部分。
除非另有定义,本文所使用的所有的技术和科学术语与属于本申请的技术领域的技术人员通常理解的含义相同。本文中所使用的术语只是为了描述本申请实施例的目的,不是旨在限制本申请。
在以下的描述中,涉及到“一些实施例”,其描述了所有可能实施例的子集,但是可以理解,“一些实施例”可以是所有可能实施例的相同子集或不同子集,并且可以在不冲突的情况下相互结合。还需要指出,本申请实施例所涉及的术语“第一\第二\第三”仅是用于区别类似的对象,不代表针对对象的特定排序,可以理解地,“第一\第二\第三”在允许的情况下可以互换特定的顺序或先后次序,以使这里描述的本申请实施例能够以除了在这里图示或描述的以外的顺序实施。
在传统的移动通信装置中,主要有以下几种类型的基于软件的内存管理机制:
1、标准C中的malloc()函数或者与之类似的嵌入式实时操作***提供的内存管理,malloc()最主要问题是会导致内存碎片(fragmentation)。
2、两级内存隔离匹配算法(Two-Level Segregated Fit,TLSF),TLSF算法采用Good-fit的分配策略保证***运行时不会产生过多碎片,而且内存的分配与回收时间满足嵌入式实时***的时间确定性需要。但是TLSF复杂度高,不易用硬件实现。
3、定长分配的内存池
因为***动态运行,很难精确估计好每种大小对象的数量。只能定义有限个不同大小的内存池。而预先分配的固定长度的内存如果不能完全利用便会导致浪费。
其中,malloc()函数和TLSF主要用于分配内存给软件使用,定长分配主要用于分配内存给硬件使用。
随着4G/5G高速移动通信的普及,以及自动驾驶,工业互联网,物联网等新型业务模型的出现,越来越多的处理任务从中央处理器(Central Processing Unit,CPU)下放到功能模块。例如,图1为软件内存管理器与硬件交互的示意图,如图1所示,典型场景为软件内存管理器分配定长内存,提供给功能模块使用,以使功能模块基于分配的内存进行数据的读写。
针对新型移动通信业务进行设计时,在性能、成本以及可扩展性等方面都面临着新的要求。具体地,在性能方面,5G峰值速率可以达到10Gbps。对内存的分配、释放时间提出了更高的要求。如果由软件处理,会对CPU的处理能力提出很高的要求。在成本方面,基带处理器应该减少对动态随机存取存储器(Dynamic Random Access Memory,DRAM)的大小的需求。尤其是对于M2M(Machineto Machine),物联网(Internet of Things,IOT)设备这种类别的移动通信装置。在满足应用功能的前提下,控制移动设备DRAM的容量,进而控制成本。在可扩展性、可维护性方面,统一内存管理机制。跨不同的处理器平台,不同的处理器使用相同的内存管理机制,简化维护工作。
目前,传统的内存管理机制已经无法满足移动通信装置在性能、成本以及可扩展性等方面所面临新的要求。
为了解决上述问题,在本申请的实施例中,通过功能模块设置的一一对应的内存管理器可以实现对功能模块的硬件内存管理机制,降低了对CPU和微处理器的性能需求;同时,内存管理器能够以内存容器为单位进行内存的分配和释放,降低了内存功耗,并提高了内存管理的效率和性能。可见,本申请提出的内存管理方法,实现了内存管理硬件化的机制,进而能够满足移动通信装置在性能、成本以及可扩展性等方面所面临新的要求。
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述。
本申请一实施例提供了一种内存管理***,图2为内存管理***的组成结构示意图一,如图2所示,内存管理***10可以包括处理器11、N个内存管理器12以及N个功能模块13,N个内存管理器12和N个功能模块13可以分别一一对应连接,其中,N为大于1的整数。
进一步地,在本申请的实施例中,内存管理***可以为终端、芯片、集成电路(integrated circuit,IC)、专用集成电路(Application Specific Integrated Circuit,ASIC)等任意的形式。
需要说明的是,在本申请的实施例中,每一个功能模块对应的内存管理器均可以用于对该功能模块的内存进行管理,具体包括内存的分配和收回。
可以理解的是,在本申请的实施例中,内存管理***中存在多个功能模块分别配置有对应的内存管理器,因此这些功能模块与内存管理器的数量的相同的。但在具体实现中,除了多个配置有内存管理器的功能模块外,内存管理***中也可能存在未配置内存管理器的功能模块,本申请对此并不多做限制。
例如,图3为内存管理***的示意图一,如图3所示,内存管理***中可以包括有多个功能模块,例如功能模块1、功能模块2、功能模块3,其中,每一个功能模块均对应配置一个内存管理器,例如硬件内存管理器1、硬件内存管理器2、硬件内存管理器3。
进一步地,在本申请的实施例中,处理器,可以用于分别为N个功能模块分配内存容器;第一内存管理器,可以用于根据第一功能模块的内存分配请求,从第一功能模块对应的第一内存容器中为第一功能模块分配内存块;第一功能模块,可以用于向内存块写入数据。
需要说明的是,在本申请的实施例中,第一内存管理器可以为N个内存管理器中的任意一个内存容器,第一功能模块可以为N个功能模块中的、与第一内存容器对应的一个功能模块。
进一步地,在本申请的实施例中,第一内存容器可以为功能模块对应的至少一个内存容器。其中,第一内存容器既可为功能模块对应的已有的内存容器,也可以为功能模块获取的新的内存容器。
也就是说,对于内存管理***中的第一功能模块,既可以预先从内存容器池中获取第一内存容器,然后在获取内存分配请求之后,对应的第一内存管理器基于该第一内存容器进行相应地内存分配处理;也可以在获取内存分配请求之后从内存容器池中获取新的第一内存容器,对应的第一内存管理器基于该新的第一内存容器进行相应地内存分配处理。
需要说明的是,在本申请的实施例中,一个功能模块可以对应有至少一个内存容器。具体地,内存管理***中的每一个功能模块均可以预先被处理器分配至少一个内存容器。
可以理解的是,在本申请的实施例中,处理器可以先从内存容器池选择至少一个内存容器分配给一个功能模块。也就是说,内存管理***配置有内存容器池,内存管理***中的处理器可以将内存容器池中的内存容器分配给不同的功能模块,其中,不同的功能模块之间不共享同一个内存容器。
也就是说,在本申请的实施例中,处理器具体用于向不同功能模块分配内存容器池中的不同内存容器。可见,在进行内存容器的预分配时,处理器可以从内存容器池中选择不同的内存容器分配给不同的功能模块。
进一步地,在本申请的实施例中,内存容器池中的多个内存容器的长度是相同的,可以均为预设内存长度,例如,预设内存长度可以为32千字节(Kbytes)。
可以理解的是,在本申请的实施例中,内存管理***中的处理器在预先从内存容器池中向功能模块分配内存容器时,可以按照每一个功能模块对应的通信能力和速率,向不同功能模块动态分配不同数量的内存容器。其中,最小的分配单位可以为一个内存容器。
进一步地,在本申请的实施例中,内存管理***在***初始化的时候,处理器可以将***中所有可用的内存容器链接起来构成可用容器链表。其中,通过可用容器链表的查询,可以确定出每一个内存容器对应的具体内存地址。
在本申请的实施例中,图4为内存管理***的示意图二,如图4所示,功能模块可以从内存容器池中获取不同的内存容器,在内存容器释放之后,功能模块也可以将内存容器返回至内存容器池。具体地,内存管理***可以通过配置的CPU对内存容器池进行管理,并进一步完成对功能模块进行内存容器的分配。例如,功能模块1对应的内存管理器从内存容器池中获取1个内存容器,功能模块2对应的内存管理器从内存容器池中获取3个内存容器。
基于上述图1可知,在传统的内存管理方式中,内存管理器把***中的内存作为一个整体进行管理。内存池是一段连续的内存,以字节为单位。当需要分配内存时,由内存管理器从整个内存池中查找合适的内存块返回。这种对内存池的统一管理使得传统的内存管理器实现非常复杂。
可以理解的是,在本申请的实施例中,内存管理***不再对内存池进行统一的管理,而是预先将***内存划分为预设内存长度的内存容器。其中,预设内存长度可以使一个内存容器的大小远远大于应用层硬件或者软件的请求分配大小。例如,预设内存长度可以为32千字节(Kbytes),即全部内存容器的大小均可以为32Kbytes,远大于一个正常IP分组的大小。
可以理解的是,在本申请的实施例中,内存管理***划分***内存获得的多个内存容器共同构成了内存容器池,然后便可以将内存容器池中的内存容器分配给不同的功能模块。
由此可见,本申请实施例提出的内存管理方法,处理器只需要对***内存进行简单地划分,获得多个大小相同的内存容器,以将不同的内存容器提供给不同的功能模块使用。而传统的内存管理方法,处理器需要对***内存进行管理和分配,相比之下,本申请提出的内存管理方法大大简化了软件的处理流程,进而降低了对软件性能的要求。
进一步地,在本申请的实施例中,第一内存管理器具体用于根据第一功能模块的内存分配请求,确定第一功能模块所需的内存块大小;然后按照第一功能模块所需的内存块大小,从第一内存容器中为第一功能模块分配内存块。
需要说明的是,在本申请的实施例中,在获取到第一功能模块的内存分配请求之后,该第一功能模块对应的第一内存管理器可以根据该内存分配请求确定出满足该内存分配请求的内存大小,即确定出第一功能模块所需的内存块大小,然后便可以从第一功能模块对应的第一内存容器中划分获得对应的内存块。
进一步地,在本申请的实施例中,第一内存管理器还用于当第一内存容器的可用存储空间小于第一功能模块所需的内存块大小时,向处理器发送分配请求;处理器,还用于在收到分配请求之后,为第一功能模块分配新的第一内存容器。
需要说明的是,在响应第一功能模块的内存分配请求向第一功能模块分配内存时,第一内存管理器可以先确定第一功能模块对应的第一内存容器的可用存储空间,如果第一内存容器的可用存储空间无法满足对应的第一功能模块的内存分配请求,那么第一内存管理器需要向处理器请求新的第一内存容器,因此第一内存管理器可以向处理器发送分配请求;相应地,处理器在接收到该分配请求之后,便可以进一步为该第一功能模块重新分配新的第一内存容器,进而可以使第一内存管理器从新的第一内存容器中为第一功能模块分配内存块。
可以理解的是,在本申请的实施例中,第一内存管理器在确定第一功能模块对应的第一内存容器的可用存储空间之后,如果第一内存容器的可用存储空间小于该第一功能模块所需的内存块大小,那么可以认为第一内存容器的可用存储空间无法满足对应的第一功能模块的内存分配请求。
进一步地,在本申请的实施例中,在响应对应的第一功能模块的内存分配请求向第一功能模块分配内存时,如果第一内存容器的可用存储空间大于或者等于该第一功能模块所需的内存块大小,即第一内存容器的可用存储空间能够满足对应的第一功能模块的内存分配请求,那么第一内存管理器可以直接从第一内存容器的可用存储空间中为第一功能模块分配内存块。
示例性的,在本申请的实施例中,第一功能模块对应有3个内存容器,分别为内存容器1、内存容器2、内存容器3,其中,内存容器1和内存容器2已经完全被分配,无可用存储空间,内存容器3部分被分配,存在可用存储空间。当获取到第一功能模块的内存分配请求时,第一内存管理器可以先确定内存容器3的剩余的可用存储空间是否能够满足内存分配请求所需要的内存大小,如果满足,即从内存容器3中可以分配出一个完整的内存块以响应该内存分配请求,那么第一内存管理器便可以从内存容器3的可用存储空间中划分出内存块,确定该内存块的内存地址,并对内存容器3的、表征分配的内存块数量的计数器的取值加1;如果不满足,即从内存容器3中无法分配出一个完整的内存块以响应该内存分配请求,那么第一内存管理器可以通过向处理器发送中断请求来从内存容器池中获取一个新的第一内存容器,如内存容器4,然后从内存容器4中划分出内存块,确定该内存块的内存地址,并将内存容器4的、表征分配的内存块数量的计数器的第一数值设置为1。
需要说明的是,在本申请的实施例中,第一内存管理器还用于记录从第一内存容器中分配的内存块的数量,和/或,第一内存容器已释放的内存块的数量。
进一步地,在本申请的实施例中,第一内存管理器用于当从第一内存容器中分配一个内存块时,对第一内存容器对应的第一数值进行加1处理;其中,第一数值用于确定从第一内存容器中分配的内存块的数量。
进一步地,在本申请的实施例中,第一内存管理器用于当第一内存容器对应的一个内存块被释放时,对第一内存容器对应的第二数值进行加1处理;其中,第二数值用于确定第一内存容器对应的已释放的内存块的数量。
也就是说,在本申请的实施例中,第一内存管理器可以使用第一数值确定从第一内存容器中分配的内存块的数量,还可以使用第二数值确定第一内存容器对应的已释放的内存块的数量。
例如,在本申请的实施例中,对于一个功能模块的每一个内存容器,对应的内存管理器均可以维护两个计数器,其中,一个计数器的数值,即第一数值,用于确定从内存容器中分配的内存块的数量,另一个计数器的数值,即第二数值,用于确定释放返回给内存容器的内存块的数量。
也就是说,在本申请的实施例中,第一内存管理器在维护对应的第一功能模块的每一个内存容器的两个计数器时,如果第一内存管理器从一个内存容器中分配出一个内存块,那么第一内存管理器可以对该内存容器对应的、表征已分配内存块数量的第一数值进行加1处理;如果第一内存管理器确定一个内存块被释放返回至一个内存容器,那么第一内存管理器可以对该内存容器对应的、表征已释放内存块数量的第二数值进行加1处理。
需要说明的是,在本申请的实施例中,第一功能模块还用于当第一内存容器中连续释放的内存块数量达到数量阈值时,向第一内存管理器发送更新指示;相应地,第一内存管理器具体用于根据更新指示更新第一内存容器已释放的内存块的数量。
具体来说,在本申请的实施例中,第一功能模块用于当第一内存容器对应的一个内存块被释放时,对第一内存容器对应的第三数值进行加1处理。当第三数值大于或者等于第一内存容器对应的数量阈值时,第一功能模块还可以将第三数值发送至第一内存管理器。
可以理解的是,在本申请的实施例中,对于第一功能模块的每一个内存容器,第一功能模块均可以在本地维护一个对应的计数器,如第三计数器,该计数器的第三数值可以用于在本地更新对应的内存容器的被释放的内存块的数量。例如,一个内存容器每有一个内存块被释放,就对该本地的计数器的第三数值进行加1处理。
需要说明的是,在本申请的实施例中,第三数值也可以用于确定第一内存容器对应的已释放的内存块的数量。与第二数值不同的是,第三数值可以为第一功能模块在本地维护和更新的、表征第一内存容器释放的内存块数量的数值。
可以理解的是,在本申请的实施例中,如果第三数值大于或者等于第一内存容器对应的数量阈值,那么可以认为第一内存容器已经完成了大部分或者全部内存块的释放。
需要说明的是,在本申请的实施例中,对于每一个内存容器,均可以设置对应的数量阈值。其中,数量阈值可以用于确定一个内存容器是否完成大部分或者全部内存块的释放。不同的内存容器对应的数量阈值可以相同,也可以不同。
例如,在本申请的实施例中,可以根据对应的内存容器所划分的内存块的数量来进行数量阈值的设置。例如,如果第一内存容器划分了10个内存块,那么可以设置第一内存容器对应的数量阈值为10。
进一步地,在本申请的实施例中,第一内存管理器具体用于根据第三数值更新第二数值。
也就是说,在本申请的实施例中,第一内存容器中的内存块依次被释放时,第一功能模块可以持续更新本地维护的第三计数器,直到第三数值大于或者等于第一内存容器对应的数量阈值之后,第一内存管理器便可以进一步基于第三数值对第二数值进行更新处理。
可以理解的是,在本申请的实施例中,当第三数值大于或者等于第一内存容器对应的数量阈值时,第一功能模块将第三数值发送至第一内存管理器;进而可以使得第一内存管理器根据第三数值更新第二数值。
需要说明的是,在本申请的实施例中,当第一内存管理器接收到第一功能模块上报的第三数值之后,可以使用该第三数值对对应的第二数值进行更新。具体地,第一内存管理器可以将第三数值与初始的第二数值进行加法运算,最终完成对第二数值的更新,以确定新的第二数值。
也就是说,在本申请的实施例中,当第一内存容器的单个内存块被释放时,第一内存管理器并不立即更新第一内存容器对应的第二数值,而是由第一功能模块及时对第一内存容器对应的第三数值进行更新,直到第三数值大于或者等于第一内存容器对应的数量阈值之后,第一内存管理器便可以进一步基于第三数值对第二数值进行更新处理。
举例说明,假设数量阈值为20,当前的第二数值为80,当第一内存容器的单个内存块被释放时,第一功能模块可以对第三数值进行更新,直到第三数值到达20(数量阈值)时,指示第一内存管理器更新第二数值,第一内存管理器进而可以将第二数值由80更新为100(80+20)。
可以理解的是,在本申请的实施例中,如果前一个释放的内存块属于第一内存容器,而当前释放的内存块属于第二内存容器(第一功能模块对应的、第一内存容器以外的另一个内存容器),那么可以将第二内存容器对应的第四计数器的第四数值设置为1。其中,第四计数器可以为第一功能模块在本地维护的、用于确定第二内存容器释放的内存块数量的计数器,第四数值可以用于确定第二内存容器对应的已释放的内存块的数量。
也就是说,在本申请的实施例中,如果当前释放的内存块与前一个释放的内存块并不属于同一个内存容器,那么第一功能模块便可以重新在本地维护一个当前释放的内存块所属的内存容器的、用于在本地更新被释放的内存块数量的计数器,然后将该计数器的数值设置为1。
例如,在本申请的实施例中,如果确定上一个被释放的内存块属于第一内存容器,而当前被释放的内存块属于第二内存容器,那么第一内存管理器并不立即更新第二内存容器对应的、表征被释放内存块数量的计数器的数值,而是将第二内存容器对应的、由第一功能模块维护在本地的第四数值设置为1,然后继续处理下一个要释放的内存块。如果下一个被释放的内存块也属于第二内存容器,第一内存管理器依然不立即更新第二内存容器对应的、表征被释放内存块数量的计数器的数值,而是选择由第一功能模块对第四计数器的第四数值进行加1操作,直到第四数值大于或者等于第二内存容器对应的数量阈值。
由此可见,本申请实施例提出的一种内存管理方法,通过第一功能模块在本地维护计数器来更新被释放内存块的数量,可以在内存释放的过程中大幅降低第一功能模块释放内存花费的时间,同时减少内存释放时对内存容器对计数器的操作,节约了内存带宽,降低了内存访问功耗。
进一步地,在本申请的实施例中,第一内存管理器还用于若从第一内存容器中分配的内存块的数量与第一内存容器已释放的内存块的数量相同,则循环使用第一内存容器;或者,释放第一内存容器。
需要说明的是,在本申请的实施例中,第一内存管理器可以向内存容器池释放第一内存容器。
可以理解的是,在本申请的实施例中,如果从第一内存容器中分配的内存块的数量与第一内存容器已释放的内存块的数量相同,说明此时第一内存容器中并没有存储第一功能模块写入的数据。
那么在此情况下,第一内存管理器既可以选择继续基于该第一内存容器进行内存分配请求的响应,即内存管理器循环使用第一内存容器,也可以选择不再使用该第一内存容器,即第一内存管理器将第一内存容器返回至内存容器池。
也就是说,在本申请的实施例中,当第一内存容器对应的第一数值和第二数值相同时,便可以认为从第一内存容器中分配出的内存块均已经被释放,因此,第一内存管理器便可以选择循环使用该第一内存容器,或者将该第一内存容器释放回内存管理***的内存容器池中。
本申请实施例提供了一种内存管理***,该内存管理***包括处理器、N个内存管理器以及N个功能模块,N个内存管理器和N个功能模块分别一一对应连接,N为大于1的整数;处理器,用于分别为N个功能模块分配内存容器;第一内存管理器,用于根据第一功能模块的内存分配请求,从第一功能模块对应的第一内存容器中为第一功能模块分配内存块;其中,第一内存管理器为N个内存管理器中的任意一个内存容器,第一功能模块为N个功能模块中的、与第一内存容器对应的一个功能模块;第一功能模块,用于向内存块写入数据。也就是说,在本申请的实施例中,通过功能模块设置的一一对应的内存管理器可以实现对功能模块的硬件内存管理机制,降低了对CPU和微处理器的性能需求;同时,内存管理器能够以内存容器为单位进行内存的分配和释放,降低了内存功耗,并提高了内存管理的效率和性能。可见,本申请提出的内存管理方法,实现了内存管理硬件化的机制,进而能够满足移动通信装置在性能、成本以及可扩展性等方面所面临新的要求。
基于上述实施例,本申请另一实施例提供了一种内存管理方法,该内存管理方法可以应用于内存管理***,其中,该内存管理***包括处理器、N个内存管理器以及N个功能模块,N个内存管理器和N个功能模块分别一一对应连接,N为大于1的整数。
图5内存管理方法的实现流程示意图,如图5所示,在本申请的实施例中,内存管理***进行内存管理的方法可以包括以下步骤:
步骤101、处理器分别为N个功能模块分配内存容器。
在本申请的实施例中,对于内存管理***中的每一个功能模块,处理器均可以预先从内存容器池中向该功能模块分配至少一个内存容器,即处理器可以预先从内存容器池向功能模块分配内存容器,从而可以完成对功能模块的内存分配。
需要说明的是,在本申请的实施例中,不同功能模块对应的内存容器不相同,即任意两个功能模块之间均不会共享同一个内存容器。
进一步地,在本申请的实施例中,内存容器池中的多个内存容器的长度是相同的,可以均为预设内存长度,例如,预设内存长度可以为32千字节(Kbytes)。
可以理解的是,在本申请的实施例中,处理器在预先从内存容器池中向功能模块分配内存容器时,可以按照每一个功能模块对应的通信能力和速率向不同功能模块动态分配不同数量的内存容器。其中,最小的分配单位可以为一个内存容器。
进一步地,在本申请的实施例中,内存管理***在***初始化的时候,可以通过软件将***中所有可用的内存容器链接起来构成可用容器链表。其中,通过可用容器链表的查询,可以确定出每一个内存容器对应的具体内存地址。
步骤102、第一内存管理器根据第一功能模块的内存分配请求,从第一功能模块对应的第一内存容器中为第一功能模块分配内存块;其中,第一内存管理器为N个内存管理器中的任意一个内存容器,第一功能模块为N个功能模块中的、与第一内存容器对应的一个功能模块。
在本申请的实施例中,第一内存管理器可以根据对应的第一功能模块的内存分配请求,从第一功能模块对应的第一内存容器中为功能模块分配内存块。
可以理解的是,在本申请的实施例中,第一内存管理器为N个内存管理器中的任意一个内存容器,第一功能模块为N个功能模块中的、与第一内存容器对应的一个功能模块。
需要说明的是,在本申请的实施例中,第一内存管理器可以先根据对应的第一功能模块的内存分配请求,确定第一功能模块所需的内存块大小;然后可以按照第一功能模块所需的内存块大小,从第一内存容器中为第一功能模块分配内存块。
可以理解的是,在本申请的实施例中,当第一功能模块对应的第一内存容器的可用存储空间小于第一功能模块所需的内存块大小时,第一内存管理器向处理器发送分配请求;相应地,在收到分配请求之后,处理器为第一功能模块分配新的第一内存容器,进而可以使得第一内存管理器从新的第一内存容器中为功能模块分配内存块。
步骤103、第一功能模块向内存块写入数据。
在本申请的实施例中,在第一内存管理器响应对应的内存分配请求,向第一功能模块分配内存块之后,第一功能模块便可以向内存块写入数据。
进一步地,在本申请的实施例中,第一内存管理器可以通过两个不同的数值来对从内存容器中分配的内存块的数量和返回给内存容器的内存块的数量进行记录。例如,第一内存管理器可以使用第一数值确定从第一内存容器中分配的内存块的数量,同时可以使用第二数值确定第一内存容器对应的已释放的内存块的数量。
也就是说,在本申请的实施例中,第一内存管理器还可以记录从第一内存容器中分配的内存块的数量,和/或,第一内存容器已释放的内存块的数量。
需要说明的是,在本申请的实施例中,当从第一内存容器中分配一个内存块时,第一内存管理器对第一内存容器对应的第一数值进行加1处理;当第一内存容器对应的一个内存块被释放时,第一内存管理器对第一内存容器对应的第二数值进行加1处理。
进一步地,在本申请的实施例中,当第一内存容器中连续释放的内存块数量达到数量阈值时,第一功能模块还可以向第一内存管理器发送更新指示;相应地,第一内存管理器可以根据更新指示更新第一内存容器已释放的内存块的数量。
也就是说,在本申请的实施例中,第一功能模块还可以在本地维护一个不同于第二数值的第三数值,来对返回给第一内存容器的内存块的数量进行记录。具体地,当第一内存容器对应的一个内存块被释放时,第一功能模块对第一内存容器对应的第三数值进行加1处理;当第三数值大于或者等于第一内存容器对应的数量阈值时,第一功能模块将第三数值发送至第一内存管理器,进而可以使得第一内存管理器根据第三数值更新第二数值。
进一步地,在本申请的实施例中,若从第一内存容器中分配的内存块的数量与第一内存容器已释放的内存块的数量相同,第一内存管理器则循环使用第一内存容器;或者,释放第一内存容器。
需要说明的是,在本申请的实施例中,第一内存管理器可以向内存容器池释放第一内存容器。
可以理解的是,在本申请的实施例中,如果第一数值与第二数值相同,那么可以认为第一内存容器分配出去的内存块已经全部被释放返回,此时,第一内存管理器既可以选择继续基于该第一内存容器进行内存分配请求的响应,即内存管理器循环使用第一内存容器,也可以选择不再使用该第一内存容器,即第一内存管理器将第一内存容器返回至内存容器池。
本申请另一实施例提供了一种内存管理方法,该内存管理方法可以应用于内存管理***,其中,该内存管理***中的多个功能模块中的每一个功能模块均配置一个内存管理器,即多个内存管理器和多个功能模块分别一一对应连接。
需要说明的是,在本申请的实施例中,每一个功能模块对应的内存管理器均可以用于对该功能模块的内存进行管理,具体包括内存的分配和收回。
进一步地,在本申请的实施例中,对于每一个内存管理器,还可以维护对应的内存容器的两个计数器,其中,一个计数器的数值,即第一数值,可以用于对从内存容器中分配出去的内存块的数量进行确定,另一个计数器的数值,即第二数值,可以用于对释放返回给内存容器的内存块的数量进行确定。
进一步地,在本申请的实施例中,内存管理***还可以包括处理器,其中,该处理器可以用于对不同的功能模块进行内存容器的预分配处理。
需要说明的是,在本申请的实施例中,第一内存管理器可以为多个内存管理器中的任意一个内存管理器,第一功能模块可以为多个功能模块中的、与第一内存管理器对应连接的一个功能模块。
进一步地,在本申请的实施例中,内存管理***进行内存管理的方法可以包括以下步骤:
步骤201、响应于第一功能模块的内存分配请求,第一内存管理器基于第一功能模块对应的第一内存容器进行内存划分,确定内存分配请求对应的内存块的内存地址,并更新第一内存容器对应的第一计数器的第一数值;其中,第一数值用于确定从第一内存容器中分配的内存块的数量。
在本申请的实施例中,在获取到内存管理***中的第一功能模块的内存分配请求之后,内存管理***中的第一内存管理器可以响应于该内存分配请求,基于与该第一功能模块对应的第一内存容器进行内存的划分处理,从而可以确定出满足于该内存分配请求的、对应的内存块的内存地址,然后可以对该第一内存容器对应的第一计数器的第一数值进行更新处理。
可以理解的是,在本申请的实施例中,内存管理***可以为各种具有通信功能的电子设备,包括但不限于诸如移动电话、笔记本电脑、数字广播接收器、个人数字助理(Personal Digital Assistant,PDA)、平板电脑(PAD)、便携式多媒体播放器(PortableMedia Player,PMP)、车载电子设备(例如车载导航电子设备)等等的移动电子设备以及诸如数字电视(TV)、台式计算机等等的固定电子设备。
进一步地,在本申请的实施例中,在获取到第一功能模块的内存分配请求之后,该第一功能模块对应的第一内存管理器可以根据该内存分配请求确定出满足该内存分配请求的内存大小,然后便可以从第一功能模块对应的第一内存容器中划分获得对应的内存块,即确定出满足该内存分配请求的内存块的内存地址。
需要说明的是,在本申请的实施例中,一个功能模块可以对应有至少一个内存容器。具体地,内存管理***中的每一个功能模块均可以预先被分配至少一个内存容器。
可以理解的是,在本申请的实施例中,功能模块可以先从内存容器池获取至少一个内存容器。也就是说,内存管理***配置有内存容器池,内存管理***中的处理器可以预先将内存容器池中的内存容器分配给不同的功能模块,其中,不同的功能模块之间不共享同一个内存容器。
进一步地,响应于第一功能模块的内存分配请求,第一内存管理器基于第一功能模块对应的第一内存容器进行内存划分,确定内存分配请求对应的内存块的内存地址,并更新第一内存容器对应的第一计数器的第一数值之前,即步骤201之前,内存管理***进行内存管理的方法还可以包括以下步骤:
步骤204、处理器从内存容器池向第一功能模块分配至少一个内存容器,以完成对第一功能模块的内存分配。
在本申请的实施例中,对于内存管理***中的每一个功能模块,处理器均可以预先从内存容器池中向该功能模块分配对应的至少一个内存容器,即内存管理***中的处理器可以预先从内存容器池向功能模块分配内存容器,从而可以完成对功能模块的内存分配。
需要说明的是,在本申请的实施例中,不同功能模块对应的内存容器不相同,即任意两个功能模块之间均不会共享同一个内存容器。
进一步地,在本申请的实施例中,第一内存容器可以为第一功能模块对应的至少一个内存容器。其中,第一内存容器既可为第一功能模块对应的已有的内存容器,也可以为第一功能模块获取的新的内存容器。
需要说明的是,在本申请的实施例中,对于一个功能模块的每一个内存容器,对应的内存管理器均可以维护两个计数器,其中,一个计数器的数值,即第一数值,用于确定从内存容器中分配的内存块的数量,另一个计数器的数值,即第二数值,用于确定释放返回给内存容器的内存块的数量。
示例性的,在本申请的实施例中,可以使用标识信息allocated_counter表示从一个容器中已经分配出去的内存块的数量,即第一数值;使用标识信息freed_counter表示应用已经释放了多少个内存块返回给一个内存容器,即第二数值。
可以理解的是,在本申请的实施例中,对于第一内存容器,可以使用第一计数器的第一数值确定从第一内存容器中分配的内存块的数量,可以使用第二计数器的第二数值确定第一内存容器对应的已释放的内存块的数量。
可以理解的是,在本申请的实施例中,当从第一内存容器中分配一个内存块时,对第一数值进行加1处理;当第一内存容器对应的一个内存块被释放时,对第二数值进行加1处理。
也就是说,在本申请的实施例中,第一内存管理器在维护对应的第一功能模块的每一个内存容器的两个计数器时,如果第一内存管理器从一个内存容器中分配出一个内存块,那么第一内存管理器可以对该内存容器对应的、表征已分配内存块数量的第一数值进行加1处理;如果第一内存管理器确定一个内存块被释放返回至一个内存容器,那么第一内存管理器可以对该内存容器对应的、表征已释放内存块数量的第二数值进行加1处理。
进一步地,在本申请的实施例中,第一内存容器既可为第一功能模块对应的已有的内存容器,也可以为第一功能模块获取的新的内存容器。具体地,第一内存管理器基于第一功能模块对应的第一内存容器进行内存划分,确定内存分配请求对应的内存块的内存地址,并更新第一内存容器对应的第一计数器的第一数值的方法可以包括以下步骤:
步骤301、确定第一内存容器的可用存储空间。
步骤302、若可用存储空间满足内存分配请求对应的分配条件,则从可用存储空间中确定内存块的内存地址,并更新第一内存容器的第一计数器。
步骤303、若可用存储空间不满足内存分配请求对应的分配条件,则从内存容器池获取新的第一内存容器,并从新的第一内存容器中确定内存块的内存地址,并更新新的第一内存容器的第一计数器的第一数值。
在本申请的实施例中,当第一功能模块获取到内存分配请求之后,第一内存管理器可以先确定第一功能模块对应的第一内存容器的可用存储空间。如果第一内存容器的可用存储空间满足内存分配请求对应的分配条件,那么第一内存管理器便可以直接从可用存储空间中确定内存块的内存地址,然后更新该第一内存容器的第一计数器;如果第一内存容器的可用存储空间不满足内存分配请求对应的分配条件,那么第一内存管理器便需要先从内存容器池获取新的第一内存容器,然后再从新的第一内存容器中确定内存块的内存地址,然后更新该新的第一内存容器的第一计数器。
需要说明的是,在本申请的实施例中,第一内存管理器在确定出第一内存容器的可用存储空间,即确定出第一内存容器剩余的可分配的内存大小之后,便可以先对可用存储空间是否满足内存分配请求对应的分配条件进行判断。具体地,如果可用存储空间足够满足该内存分配请求对内存大小的要求,那么可以认为可用存储空间能够满足内存分配请求对应的分配条件;如果可用存储空间并不能满足该内存分配请求对内存大小的要求,那么可以认为可用存储空间无法满足内存分配请求对应的分配条件。
可以理解的是,在本申请的实施例中,如果确定第一内存容器的可用存储空间可以满足内存分配请求来进行内存块的分配,那么第一内存管理器可以直接基于该第一内存容器来进行内存分配,即可以直接从该第一内存容器的可用存储空间中分配出一个完整的内存块来响应该内存分配请求。
可以理解的是,在本申请的实施例中,如果确定第一内存容器的可用存储空间并不能分配一个完整的内存块以响应内存分配请求,那么第一内存管理器便需要获取新的第一内存容器,具体可以从内存容器池获取新的第一内存容器,然后再基于该新的第一内存容器来进行内存分配,即从新获取到的内存中分配出一个完整的内存块来响应该内存分配请求。
需要说明的是,在本申请的实施例中,第一内存管理器在获取新的第一内存容器时,第一内存管理器可以向处理器发送分配请求;相应地,在收到分配请求之后,处理器为第一功能模块分配新的第一内存容器,进而可以使得第一内存管理器从新的第一内存容器中为第一功能模块分配内存块。
步骤202、当根据已释放内存地址确定第一内存容器对应的内存块已释放时,第一内存管理器更新第一内存容器对应的第二计数器的第二数值;其中,第二数值用于确定第一内存容器对应的已释放的内存块的数量。
在本申请的实施例中,内存管理***中的第一内存管理器在响应第一功能模块的内存分配请求,基于第一功能模块对应的第一内存容器进行内存划分,确定内存分配请求对应的内存块的内存地址,并更新第一内存容器对应的第一计数器的第一数值之后,当根据已释放内存地址确定第一内存容器对应的内存块已释放时,第一内存管理器可以更新第一内存容器对应的第二计数器的第二数值。
需要说明的是,在本申请的实施例中,当有内存块被释放时,第一内存管理器可以先根据该内存块的内存地址确定被释放的内存块属于哪一个内存容器,然后便可以对相应地内存容器的、用于表征释放的内存块数量的计数器的第二数值进行更新处理。
可以理解的是,在本申请的实施例中,如果根据已释放内存地址确定第一内存容器对应的一个内存块已经被释放,那么第一内存管理器可以对该第一内存容器对应的、用于确定第一内存容器对应的已释放的内存块的数量的第二数值进行加1处理。例如,第一功能模块对应有2个内存容器,分别为内存容器1和内存容器2,当内存块1被释放时,第一内存管理器根据内存块1对应的内存地址确定该内存块1属于内存容器2,那么第一内存管理器可以直接对内存容器2的、表征被释放内存块数量的计数器的第二数值加1;当内存块5被释放时,第一内存管理器根据内存块5对应的内存地址确定该内存块5属于内存容器1,那么第一内存管理器可以直接对内存容器1的、表征被释放内存块数量的计数器的第二数值加1。
考虑到内存管理***是连续接收数据分组,并且连续分配内存,连续处理,最后连续释放内存的,因此可以认为内存管理***中绝大多数的分组数据和这个分组数据之前以及之后的分组数据在内存空间上是存在关联关系的。进而在本申请的实施例中,当单个内存被释放时,内存管理***中的内存管理器也可以选择不立即执行对应的内存容器的计数器的第二数值更新处理,而是选择在同一个内存容器对应的多个内存块依次被释放之后,再更行对应的计数器的第二数值,从而可以大大减少更新的处理流程,进而减小内存带宽。
可以理解的是,在本申请的实施例中,当根据已释放内存地址确定第一内存容器对应的内存块已释放时,第一内存管理器更新第一内存容器对应的第二计数器的第二数值的方法可以包括以下步骤:
步骤202a、在根据前一个释放的内存地址确定前一个内存块属于第一内存容器之后,若根据当前释放的内存地址确定当前内存块属于第一内存容器,则第一功能模块对第一内存容器对应的第三计数器的第三数值进行加1处理。
在本申请的实施例中,如果根据前一个释放的内存地址确定出前一个被释放的内存块是属于第一内存容器的,并根据当前释放的内存地址确定出当前被释放的内存块也是属于第一内存地址的,那么第一功能模块可以对第一内存容器对应的第三计数器的第三数值进行加1处理。
需要说明的是,在本申请的实施例中,第三计数器的第三数值为第一功能模块在本地维护的、用于确定第一内存容器释放的内存块数量。
步骤202b、当第三数值大于或者等于第一内存容器对应的数量阈值时,第一内存管理器根据第三数值更新第二数值。
在本申请的实施例中,当第三数值大于或者等于第一内存容器对应的数量阈值时,那么第一内存管理器便可以根据第三数值更新第二数值。
需要说明的是,在本申请的实施例中,对于每一个内存容器,均可以设置对应的数量阈值。其中,数量阈值可以用于确定一个内存容器是否完成大部分或者全部内存块的释放。不同的内存容器对应的数量阈值可以相同,也可以不同。
可以理解的是,在本申请的实施例中,如果第三数值大于或者等于第一内存容器对应的数量阈值,那么可以认为第一内存容器已经完成了大部分或者全部内存块的释放,因此可以进一步根据第三数值对第二数值进行确定。
也就是说,在本申请的实施例中,当第一内存容器的单个内存块被释放时,第一内存管理器并不立即更新第一内存容器的第二计数器,而是选择由第一功能模块在本地维护一个第一内存容器的上下文,即第三计数器,并由第一功能模块更新第三计数器的第三数值,然后继续处理下一个要释放的内存块。如果下一个需要释放的内存块仍然属于第一内存容器,那么第一内存管理器依然不立即更新第一内存容器的第二计数器,而是选择由第一功能模块对第三计数器的第三数值进行加1操作。
需要说明的是,在本申请的实施例中,第一内存管理器在根据第三数值对第二数值进行更新处理时,可以将第三数值与原有的第二数值进行加法运算,最终完成对第二数值的更新,以确定新的第二数值。
可以理解的是,在本申请的实施例中,在根据前一个释放的内存地址确定前一个内存块属于第一内存容器之后,如果根据当前释放的内存地址确定当前内存块属于第二内存容器,那么可以将第二内存容器对应的第四计数器的第四数值设置为1。
需要说明的是,在本申请的实施例中,第二内存容器为第一功能模块对应的至少一个内存容器中的、第一内存容器以外的另一个内存容器。第四计数器可以为第一功能模块在本地维护的、用于确定第二内存容器释放的内存块数量的计数器。
也就是说,在本申请的实施例中,如果当前释放的内存块与前一个释放的内存块并不属于同一个内存容器,那么便可以重新在本地维护一个当前释放的内存块所属的内存容器的、用于在本地更新内存容器的被释放的内存块数量的计数器,然后将该数值设置为1。
示例性的,在本申请的实施例中,如果确定上一个被释放的内存块属于第一内存容器,而当前被释放的内存块属于第二内存容器,那么第一内存管理器并不立即更新第二内存容器对应的、表征被释放内存块数量的计数器的数值,而是将第二内存容器对应的、由第一功能模块维护在本地的第四数值设置为1,然后继续处理下一个要释放的内存块。如果下一个被释放的内存块也属于第二内存容器,第一内存管理器依然不立即更新第二内存容器对应的、表征被释放内存块数量的计数器的数值,而是选择由第一功能模块对第四计数器的第四数值进行加1操作,直到第四数值大于或者等于第二内存容器对应的数量阈值。
步骤203、若第一数值与第二数值相同,则循环使用第一内存容器,或者,释放第一内存容器。
在本申请的实施例中,内存管理***中的第一内存管理器在按照上述步骤201和步骤202分别完成了相应地第一功能模块的内存的分配和释放,并更新了该第一功能模块对应的第一数值和第二数值之后,如果第一数值和第二数值相同,那么第一内存管理器便可以选择循环使用第一内存容器,或者释放该第一内存容器。
可以理解的是,在本申请的实施例中,第一内存管理器可以选择继续基于该第一内存容器进行内存分配请求的响应,即第一内存管理器循环使用第一内存容器。
可以理解的是,在本申请的实施例中,第一内存管理器还可以选择不再使用该第一内存容器,即第一内存管理器将第一内存容器返回至内存容器池。
也就是说,在本申请的实施例中,当第一内存容器对应的第一数值和第二数值相同时,便可以认为从第一内存容器中分配出的内存块均已经被释放,此时,第一内存管理器既可以选择继续基于该第一内存容器进行内存分配请求的响应,即内存管理器循环使用第一内存容器,也可以选择不再使用该第一内存容器,即第一内存管理器将第一内存容器返回至内存容器池。
综上所述,基于上述步骤201至步骤204、步骤301至步骤303提出的内存管理方法,通过针对功能模块设置对应的内存管理器,可以将内存管理硬件化,即本申请提出的内存管理方法是基于硬件实现的内存管理机制;与常见的基于软件的内存管理机制相比,在本申请中,可以基于内存容器为基本单元进行内存管理。其中,通过每个内存管理器实例的单独配置,能够灵活的支持定长分配和变长分配,分配释放时间不变;不产生内存碎片;使得硬件的复杂度得以降低,大幅提高了可实现性;分配释放效率大幅提高,仅仅需要几个时钟就能完成内存分配和释放;进一步地,通过预先进行内存容器的配置,均能够大幅提高内存管理的性能。
进一步地,本申请实施例提出的内存管理方法,能够支持全硬化的4G/5G基带处理器数据处理通路方案;与传统的malloc/TLSF机制相比,大大降低了内存管理的复杂度:且不需要硬件管理链表结构,以及变长链表带来的描述符管理问题;不需要硬件进行空闲内存的合并和碎片处理。因此硬件的可实现性增强。
进一步地,本申请实施例提出的内存管理方法,通过一一对应的内存管理器对功能模块进行内存分配的机制,使得分配和释放的效率大幅提高,仅仅需要几个时钟周期就能完成内存分配和释放;进而无需软件参与就能同步处理4G/5G,USB/PCIe传输过程中的内存管理。不再需要CPU和微处理器的参与高速实时的内存管理减少***中CPU和微处理器的负载;因此降低了对CPU和微处理器和性能需求。
进一步地,本申请实施例提出的内存管理方法,通过针对功能模块设置对应的内存管理器的硬件内存管理机制,能够快速分配和释放内存,回收的静态随机存取存储器(Static Random-Access Memory,SRAM)内存可以快速重新利用,使得***整体存储器的功耗在峰值速率下可以降低约30~40%,有效减少内存功耗。
本申请实施例提供了一种内存管理方法,应用于内存管理***,内存管理***包括处理器、N个内存管理器以及N个功能模块,N个内存管理器和N个功能模块分别一一对应连接,N为大于1的整数;处理器,用于分别为N个功能模块分配内存容器;第一内存管理器,用于根据第一功能模块的内存分配请求,从第一功能模块对应的第一内存容器中为第一功能模块分配内存块;其中,第一内存管理器为N个内存管理器中的任意一个内存容器,第一功能模块为N个功能模块中的、与第一内存容器对应的一个功能模块;第一功能模块,用于向内存块写入数据。也就是说,在本申请的实施例中,通过功能模块设置的一一对应的内存管理器可以实现对功能模块的硬件内存管理机制,降低了对CPU和微处理器的性能需求;同时,内存管理器能够以内存容器为单位进行内存的分配和释放,降低了内存功耗,并提高了内存管理的效率和性能。可见,本申请提出的内存管理方法,实现了内存管理硬件化的机制,进而能够满足移动通信装置在性能、成本以及可扩展性等方面所面临新的要求。
基于上述实施例,本申请的再一实施例提出的内存管理方法应用于配置有内存管理***的通信装置中,其中,该内存管理***包括处理器、N个内存管理器以及N个功能模块,N个内存管理器和N个功能模块分别一一对应连接,N为大于1的整数。具体地,在本申请中,每一个功能模块对应的内存管理器均可以为硬件变长内存管理器,能够响应功能模块的内存分配请求,从功能模块对应的内存容器中进行相应长度的内存块的划分。
进一步地,在本申请的实施例中,通信装置进行内存管理的方法可以包括以下步骤:
步骤401、向功能模块分配至少一个内存容器。
在本申请的实施例中,通信装置可以预先向配置的功能模块中的至少一个功能模块分配至少一个内存容器。
可以理解的是,在本申请的实施例中,内存管理***可以预先对***内存进行划分处理,获得多个内存容器存储在内存容器池中。其中,内存容器池中的多个内存容器的长度是相同的,可以均为预设内存长度,预设内存长度可以为32Kbytes。
进一步地,在本申请的实施例中,在完成对***内存的划分之后,内存管理***中的处理器可以向功能模块预先进行内存容器的分配,其中,最小的分配单位可以为一个内存容器。
可以理解的是,在本申请的实施例中,通信装置可以仅对部分功能模块分配内存容器,也可以对全部的功能模块分配内存容器;通信装置可以预先向功能模块分配一个内存容器,也可以预先向功能模块配置多个内存容器。
需要说明的是,在本申请的实施例中,通信装置可以将一个或者多个内存容器分配给功能模块所对应的内存管理器。其中,每个功能模块具有独立的内存管理器实例,不同的功能模块之间不共享内存容器,进而可以有效避免的内存分配的互斥操作,提高了性能。
进一步地,在本申请的实施例中,每一个内存容器的大小可以均为预设内存长度,可以设置预设内存长度可以远远大于单次申请分配内存块的大小,即内存容器的大小远远大于单次申请分配内存块的大小,从而可以使得内存管理器在进行内存分配时能够基于内存容器的颗粒度来分配内存,大幅减少分配的次数,减少软硬件的交互,进而降低CPU的负担。
可以理解的是,在本申请的实施例中,为功能模块分配内存容器的过程是在功能模块获取内存分配请求之前执行的,相比于接收到用户请求分配内存块时才开始在内存池中进行查找的传统的内存管理机制,本申请提出的内存管理方法通过提前执行内存容器的分配过程来减少5G高速通信的分配时延。
进一步地,在本申请的实施例中,每一个功能模块配置有用于进行内存划分处理的硬件内存管理器,因此通信装置不再需要通过处理器来执行全部功能模块的内存的分配,处理器仅仅将***内存划分为长度固定的内存容器即可,因此软件的实现非常简单。
需要说明的是,在本申请的实施例中,通信装置在***初始化的时候,可以通过处理器将***中所有可用的内存容器链接起来构成可用容器链表。
步骤402、当获取到功能模块的内存分配请求时,内存管理器基于功能模块对应的至少一个内存容器中确定目标内存容器。
在本申请的实施例中,当获取到功能模块的内存分配请求时,对应的内存管理器可以先在该功能模块对应的至少一个内存容器中确定出一个目标内存容器。其中,目标内存容器可以为功能模块的已有内存容器,也可以为功能模块新获取的新内存容器;目标内存容器用于响应该内存分配请求。
具体地,在本申请的实施例中,当获取到功能模块的内存分配请求之后,内存管理器可以先确定功能模块对应的已有内存容器的可用存储空间。如果已有内存容器的可用存储空间满足内存分配请求对应的分配条件,那么内存管理器便可以直接将已有内存容器确定为对应的目标内存容器;如果已有内存容器的可用存储空间不满足内存分配请求对应的分配条件,那么内存管理器便需要先从内存容器池获取新的内存容器,并将该新的内存容器确定为对应的目标内存容器。
也就是说,在本申请的实施例中,如果确定已有内存容器的可用存储空间可以满足内存分配请求来进行内存块的分配,那么内存管理器可以将该已有内存容器作为目标内存容器;如果确定已有内存容器的可用存储空间并不能分配一个完整的内存块以响应内存分配请求,那么内存管理器可以将重新获取的新的内存容器作为目标内存容器。即如果功能模块的已有内存容器剩余空间不足,无法分配一个完整的内存块给请求者,那么内存管理器需要再申请一个新的内存容器用于进行内存分配。
步骤403、内存管理器从目标内存容器中确定内存块的内存地址,并更新目标内存容器的第一计数器的第一数值。
在本申请的实施例中,内存管理器在确定功能模块对应的目标内存容器之后,可以响应上述内存分配请求,从目标内存容器中确定内存块的内存地址,并更新目标内存容器的第一计数器的第一数值。
需要说明的是,在本申请的实施例中,由于一个内存容器的容量远远大于正常用户请求的大小,即一个容器可以进行多次分配,因此内存管理器可以直接从一个内存容器中找到一段可用的内存用于响应内存分配请求。
可以理解的是,在本申请的实施例中,响应于不同的内存分配请求,内存管理器划分的内存块的大小可以是不同的,即内存管理器可以进行变长内存分配处理。
在本申请的实施例中,图6为32K字节的内存容器的变长分配场景示意图,如图6所示,响应于不同的应用层硬件或者软件的内存分配请求,内存管理器从该内存容器分配的每个小的内存块大小是不固定的,如内存块1、内存块2、……、内存块6。且由于32Kbytes的内存容器的大小远远大于应用层硬件或者软件的请求分配大小,因此在经过多次分配之后,内存容器仍然还剩余有可用存储空间用于继续进行分配处理。
由此可见,在本申请的实施例中,相比定长内存分配的方式,内存管理器通过使用变长内存分配的方案,可以大幅提高内存的使用效率。
进一步地,在本申请的实施例中,对于每个内存容器,内存管理器实例可以维护用于确定从内存容器中分配的内存块的数量的第一计数器的第一数值。其中,可以使用标识信息allocated_counter表示从一个容器中已经分配出去的内存块的数量。
示例性的,在本申请的实施例中,当从内存容器中分配一个内存块时,对第一数值进行加1处理。
可以理解的是,在本申请的实施例中,无论是预先对功能模块进行内存容器的配置的机制,或是使用一一对应的内存管理器对功能模块进行内存分配的机制,还是基于预设内存长度的内存容器的颗粒度进行内存分配的机制,均能够大幅提高内存管理的性能。例如传统的内存分配机制需要上百个时钟周期,而本申请实施例提出的内存管理方法只需要几个时钟周期就可以完成。
进一步地,在本申请的实施例中,通信装置进行内存管理的方法可以包括以下步骤:
步骤501、确定当前释放的内存块所属的内存容器。
在本申请的实施例中,内存管理器可以先确定当前释放的内存块所属的内存容器。
具体地,在本申请的实施例中,由于内存容器在***内存中可以按固定大小连续存放,因此根据内存容器空间内的任一地址,可用计算出这个地址属于哪一个内存容器。进而,内存管理器实例可以根据当前释放的内存地址计算对应的当前释放的内存块属于哪一个内存容器。
步骤502、更新当前释放的内存块所属的内存容器的第二计数器。
在本申请的实施例中,内存管理器在确定当前释放的内存块所属的内存容器之后,便可以更新该内存块所属的内存容器的第二计数器的第二数值。
进一步地,在本申请的实施例中,对于每个内存容器,内存管理器实例可以维护用于确定内存容器对应的已释放的内存块的数量的第二计数器。其中,可以使用标识信息freed_counter表示应用已经释放了多少个内存块返回给一个内存容器。
示例性的,在本申请的实施例中,当内存容器对应的一个内存块被释放时,对第二数值进行加1处理。
步骤503、若当前释放的内存块所属的内存容器的第一数值和第二数值相同,则循环使用内存容器,或者,释放内存容器。
在本申请的实施例中,如果当前释放的内存块所属的内存容器的第一数值和第二数值相同,那么内存管理器便可以认为从该内存容器中分配出的内存块均已经被释放,因此,内存管理器便可以选择循环使用该内存容器,也可以选择将该内存容器释放回通信装置的内存容器池中。
在本申请的实施例中,在确定当前释放的内存块对应的内存容器之后,内存管理器可以获取该内存容器的描述符,即allocated_couter(第一数值)和freed_counter(第二数值),并对freed_counter进行加1操作;然后比较allocated_couter和freed_counter的大小,如果该内存容器的描述符allocated_couter等于freed_counter,那么可以确定内存容器可以被循环使用或者被返回给***内存容器池。
对于高速数据通信,通信装置是连续接收数据分组,并且连续分配内存,连续处理,最后连续释放。所以除了少数特殊的数据分组之外,可以认为***中绝大多数的分组数据和这个分组数据之前以及之后的分组数据在内存空间上是存在关联关系的。也就是说,当需要释放一批内存块地址时,有极大的概率这些内存地址是从同一个内存容器中,或者几个相邻的内存容器中连续分配出来的。
相应地,在本申请的实施例中,针对数据流的特性,释放单个内存块时,可以选择不立即更新该内存块所属的内存容器描述符中的freed_counter计数器(第二计数器)。而是选择在本地维护该内存容器的一个上下文(如上述第三计数器),只在本地进行更新freed_counter,然后继续处理下一个要释放的内存块。由于下一个需要释放的内存块极有可能仍然处在同一个内存容器中,因此,仅仅需要将同一个上下文中的freed_counter进行加1操作。
需要说明的是,在本申请的实施例中,如果当前释放的内存块和前一个释放的内存块不属于同一个内存容器,那么就需要在本地新分配一个上下文(如上述第四计数器),使用这个新的上下文,将其free_counter设置为1,然后继续处理下一个要释放的内存块。
进一步地,在本申请的实施例中,当本地维护的内存容器上下文的数量大于等于设定的门限(该内存容器对应的数量阈值)时,便可以利用所有本地内存释放记录的信息来更新该内存容器对应的第二计数器。
需要说明的是,在本申请的实施例中,内存管理器可以将内存容器在本地上下文中的free_couner(如上述第三数值)和该内存容器实际的free_counter(如上述第二数值)相加,获得合并后的freed_counter。相应地,如果合并后的freed_counter等于allocated_counter(如上述第一数值),则表示该内存容器已经不再被使用,进而可以确定功能模块可用循环使用该内存容器或者将该内存容器释放回***内存容器池。
由此可见,在本申请的实施例中,通过在本地维护的计数器的方式,可以大大减少内存释放时对内存容器中计数器的操作,既可以大幅降低功能模块释放内存的时间,同时可以节约内存带宽,降低了内存访问功耗。
可以理解的是,在本申请的实施例中,可以选择以内存容器的大小进行内存释放,即使长时间运行,也不会产生内存碎片的问题。
可以理解的是,传统的2G、3G中使用的硬件加速相对4G、5G少很多,除了加解密和完整性保护之外大都是软件实现。而本申请实施例提出的内存管理方法的分配流程和释放流程对于硬件或者软件机制是通用的,即可以用软件实现和硬件变长内存管理器完全相同机制。硬件机制和软件机制共享***容器池。
具体地,为了实现向后兼容,替换原有代码中的malloc()/free()两个函数就可以迁移旧的软件代码到新型内存管理机制上。实现比传统内存管理方案更低的分配时延,更小的内存需求和避免内存碎片。
本申请实施例提供了一种内存管理方法,通过功能模块设置的一一对应的内存管理器可以实现对功能模块的硬件内存管理机制,降低了对CPU和微处理器的性能需求;同时,内存管理器能够以内存容器为单位进行内存的分配和释放,降低了内存功耗,并提高了内存管理的效率和性能。可见,本申请提出的内存管理方法,实现了内存管理硬件化的机制,进而能够满足移动通信装置在性能、成本以及可扩展性等方面所面临新的要求。
基于上述实施例,在本申请的另一实施例中,基于上述图2,图7为内存管理装置的组成结构示意图,如图7示,本申请实施例提出的内存管理装置20可以包括分配单元21,N个管理单元22,N个写入单元23,其中,N为大于1的整数,
所述分配单元21,用于分别为所述N个功能模块分配内存容器;
所述N个管理单元22,用于根据内存分配请求,从所述N个功能模块对应的内存容器中为所述N个功能模块分配内存块;
所述N个写入单元23,用于向所述内存块写入数据。
在本申请的实施例中,进一步地,图8为内存管理***的组成结构示意图二,如图8所示,本申请实施例提出的内存管理***10还可以包括存储有处理器11可执行指令的存储器14,进一步地,内存管理***10还可以包括通信接口15,和用于连接处理器11、存储器14以及通信接口15的总线16。
在本申请的实施例中,上述处理器11可以为特定用途集成电路(ApplicationSpecific Integrated Circuit,ASIC)、数字信号处理器(Digital Signal Processor,DSP)、数字信号处理装置(Digital Signal Processing Device,DSPD)、可编程逻辑装置(ProgRAMmable Logic Device,PLD)、现场可编程门阵列(Field ProgRAMmable GateArray,FPGA)、中央处理器(Central Processing Unit,CPU)、控制器、微控制器、微处理器中的至少一种。可以理解地,对于不同的设备,用于实现上述处理器功能的电子器件还可以为其它,本申请实施例不作具体限定。内存管理***10还可以包括存储器14,该存储器14可以与处理器11连接,其中,存储器14用于存储可执行程序代码,该程序代码包括计算机操作指令,存储器14可能包含高速RAM存储器,也可能还包括非易失性存储器,例如,至少两个磁盘存储器。
在本申请的实施例中,总线16用于连接通信接口15、处理器11以及存储器14以及这些器件之间的相互通信。
在本申请的实施例中,存储器14,用于存储指令和数据。
在实际应用中,上述存储器14可以是易失性存储器(volatile memory),例如随机存取存储器(Random-Access Memory,RAM);或者非易失性存储器(non-volatile memory),例如只读存储器(Read-Only Memory,ROM),快闪存储器(flash memory),硬盘(Hard DiskDrive,HDD)或固态硬盘(Solid-State Drive,SSD);或者上述种类的存储器的组合,并向处理器11提供指令和数据。
另外,在本实施例中的各功能模块可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。
集成的单元如果以软件功能模块的形式实现并非作为独立的产品进行销售或使用时,可以存储在一个计算机可读取存储介质中,基于这样的理解,本实施例的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或processor(处理器)执行本实施例方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read OnlyMemory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
本申请实施例提供了一种内存管理装置和内存管理***,通过功能模块设置的一一对应的内存管理器可以实现对功能模块的硬件内存管理机制,降低了对CPU和微处理器的性能需求;同时,内存管理器能够以内存容器为单位进行内存的分配和释放,降低了内存功耗,并提高了内存管理的效率和性能。可见,本申请提出的内存管理方法,实现了内存管理硬件化的机制,进而能够满足移动通信装置在性能、成本以及可扩展性等方面所面临新的要求。
本领域内的技术人员应明白,本申请的实施例可提供为方法、***、或计算机程序产品。因此,本申请可采用硬件实施例、软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器和光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(***)、和计算机程序产品的实现流程示意图和/或方框图来描述的。应理解可由计算机程序指令实现流程示意图和/或方框图中的每一流程和/或方框、以及实现流程示意图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在实现流程示意图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在实现流程示意图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在实现流程示意图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
以上所述,仅为本申请的较佳实施例而已,并非用于限定本申请的保护范围。
Claims (15)
1.一种内存管理***,其特征在于,所述内存管理***包括内存容器池、处理器、N个内存管理器以及N个功能模块,所述内存容器池包括多个内存容器,所述多个内存容器的长度相同,所述多个内存容器包括第一内存容器,所述N个内存管理器和所述N个功能模块分别一一对应连接,N为大于1的整数;
所述处理器,用于分别为所述N个功能模块分配所述内存容器;
第一内存管理器,用于根据第一功能模块的内存分配请求,从所述第一功能模块对应的所述第一内存容器中为所述第一功能模块分配内存块;其中,所述第一内存管理器为所述N个内存管理器中的任意一个内存管理器,所述第一功能模块为所述N个功能模块中的、与所述第一内存容器对应的一个功能模块;
所述第一内存管理器,还用于记录从所述第一内存容器中分配的内存块的数量;
所述第一功能模块,用于向所述内存块写入数据。
2.根据权利要求1所述的内存管理***,其特征在于,
所述第一内存管理器,具体用于根据所述第一功能模块的内存分配请求,确定所述第一功能模块所需的内存块大小;按照所述第一功能模块所需的内存块大小,从所述第一内存容器中为所述第一功能模块分配内存块。
3.根据权利要求2所述的内存管理***,其特征在于,
所述第一内存管理器,还用于当所述第一内存容器的可用存储空间小于所述第一功能模块所需的内存块大小时,向所述处理器发送分配请求;
所述处理器,还用于在收到所述分配请求之后,为所述第一功能模块分配新的第一内存容器。
4.根据权利要求1所述的内存管理***,其特征在于,
所述第一内存管理器,还用于记录所述第一内存容器已释放的内存块的数量。
5.根据权利要求4所述的内存管理***,其特征在于,
所述第一功能模块,还用于当所述第一内存容器中连续释放的内存块数量达到数量阈值时,向所述第一内存管理器发送更新指示;
所述第一内存管理器,具体用于根据所述更新指示更新所述第一内存容器已释放的内存块的数量。
6.根据权利要求4或5所述的内存管理***,其特征在于,
所述第一内存管理器,还用于若从所述第一内存容器中分配的内存块的数量与所述第一内存容器已释放的内存块的数量相同,则循环使用所述第一内存容器,或者,释放所述第一内存容器。
7.根据权利要求6所述的内存管理***,其特征在于,
所述第一内存管理器,具体用于向内存容器池释放所述第一内存容器;
所述处理器,具体用于从所述内存容器池中向不同功能模块分配不同内存容器。
8.一种内存管理方法,其特征在于,所述内存管理方法应用于内存管理***,所述内存管理***包括内存容器池、处理器、N个内存管理器以及N个功能模块,所述内存容器池包括多个内存容器,所述多个内存容器的长度相同,所述多个内存容器包括第一内存容器,所述N个内存管理器和所述N个功能模块分别一一对应连接,N为大于1的整数,所述方法包括:
所述处理器分别为所述N个功能模块分配所述内存容器;
第一内存管理器根据第一功能模块的内存分配请求,从所述第一功能模块对应的所述第一内存容器中为所述第一功能模块分配内存块;其中,所述第一内存管理器为所述N个内存管理器中的任意一个内存管理器,所述第一功能模块为所述N个功能模块中的、与所述第一内存容器对应的一个功能模块;
所述第一内存管理器记录从所述第一内存容器中分配的内存块的数量;
所述第一功能模块向所述内存块写入数据。
9.根据权利要求8所述的方法,其特征在于,第一内存管理器根据第一功能模块的内存分配请求,从所述第一功能模块对应的第一内存容器中为所述第一功能模块分配内存块,包括:
所述第一内存管理器根据所述第一功能模块的内存分配请求,确定所述第一功能模块所需的内存块大小;
所述第一内存管理器按照所述第一功能模块所需的内存块大小,从所述第一内存容器中为所述第一功能模块分配内存块。
10.根据权利要求9所述的方法,其特征在于,所述方法还包括:
当所述第一内存容器的可用存储空间小于所述第一功能模块所需的内存块大小时,所述第一内存管理器向所述处理器发送分配请求;
在收到所述分配请求之后,所述处理器为所述第一功能模块分配新的第一内存容器。
11.根据权利要求8所述的方法,其特征在于,所述方法还包括:
所述第一内存管理器记录所述第一内存容器已释放的内存块的数量。
12.根据权利要求11所述的方法,其特征在于,所述方法还包括:
当所述第一内存容器中连续释放的内存块数量达到数量阈值时,所述第一功能模块向所述第一内存管理器发送更新指示;
所述第一内存容器根据所述更新指示更新所述第一内存容器已释放的内存块的数量。
13.根据权利要求11或12所述的方法,其特征在于,所述方法还包括:
若从所述第一内存容器中分配的内存块的数量与所述第一内存容器已释放的内存块的数量相同,则所述第一内存管理器循环使用所述第一内存容器;或者,释放所述第一内存容器。
14.根据权利要求13所述的方法,其特征在于,
所述第一内存管理器向内存容器池释放所述第一内存容器;
所述处理器从所述内存容器池中向不同功能模块分配不同内存容器。
15.一种内存管理装置,其特征在于,所述内存管理装置包括:分配单元,N个管理单元,N个写入单元,其中,N为大于1的整数,
所述分配单元,用于分别为N个功能模块分配内存容器;内存容器池包括多个所述内存容器,所述多个内存容器的长度相同,所述多个内存容器包括第一内存容器;
所述N个管理单元,用于根据内存分配请求,从所述N个功能模块对应的内存容器中为所述N个功能模块分配内存块;所述N个管理单元,还用于记录从所述第一内存容器中分配的内存块的数量;所述N个写入单元,用于向所述内存块写入数据。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111091447.0A CN113778688B (zh) | 2021-09-17 | 2021-09-17 | 内存管理***、内存管理方法、内存管理装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111091447.0A CN113778688B (zh) | 2021-09-17 | 2021-09-17 | 内存管理***、内存管理方法、内存管理装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113778688A CN113778688A (zh) | 2021-12-10 |
CN113778688B true CN113778688B (zh) | 2024-06-14 |
Family
ID=78851669
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111091447.0A Active CN113778688B (zh) | 2021-09-17 | 2021-09-17 | 内存管理***、内存管理方法、内存管理装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113778688B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116361234B (zh) * | 2023-06-02 | 2023-08-08 | 深圳中安辰鸿技术有限公司 | 内存管理方法、装置及芯片 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105354147A (zh) * | 2014-08-20 | 2016-02-24 | 腾讯科技(深圳)有限公司 | 一种内存池管理方法及管理*** |
CN106354661A (zh) * | 2016-09-13 | 2017-01-25 | 郑州云海信息技术有限公司 | 一种针对存储软件的内存分配方法及装置 |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101901191A (zh) * | 2010-05-31 | 2010-12-01 | 深圳市茁壮网络股份有限公司 | 嵌入式***多类内存管理方法及装置 |
CN102184139A (zh) * | 2010-06-22 | 2011-09-14 | 上海盈方微电子有限公司 | 一种硬件动态内存池管理方法和*** |
WO2016019566A1 (zh) * | 2014-08-08 | 2016-02-11 | 华为技术有限公司 | 内存管理方法、装置和***、以及片上网络 |
CN104468833B (zh) * | 2014-12-26 | 2018-05-29 | 北京奇虎科技有限公司 | 请求信息统一处理的方法和装置 |
CN104951370B (zh) * | 2015-06-02 | 2018-08-21 | 大唐移动通信设备有限公司 | 一种内存管理方法及装置 |
CN105094751B (zh) * | 2015-07-20 | 2018-01-09 | 中国科学院计算技术研究所 | 一种用于流式数据并行处理的内存管理方法 |
CN108132889B (zh) * | 2017-12-20 | 2020-07-10 | 东软集团股份有限公司 | 内存管理方法、装置、计算机可读存储介质及电子设备 |
-
2021
- 2021-09-17 CN CN202111091447.0A patent/CN113778688B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105354147A (zh) * | 2014-08-20 | 2016-02-24 | 腾讯科技(深圳)有限公司 | 一种内存池管理方法及管理*** |
CN106354661A (zh) * | 2016-09-13 | 2017-01-25 | 郑州云海信息技术有限公司 | 一种针对存储软件的内存分配方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN113778688A (zh) | 2021-12-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN114115747B (zh) | 存储器***及控制方法 | |
US9792227B2 (en) | Heterogeneous unified memory | |
TWI684098B (zh) | 記憶體系統及控制非揮發性記憶體之控制方法 | |
KR102077149B1 (ko) | 메모리 관리 방법 및 장치 | |
CN110858162B (zh) | 内存管理方法及装置、服务器 | |
CN106557427B (zh) | 共享内存数据库的内存管理方法及装置 | |
KR20200065489A (ko) | 데이터 처리 시스템 내 자원 사용에 대응하여 데이터 패스를 동적 할당하는 방법 및 장치 | |
CN113204407A (zh) | 一种内存超配管理方法及装置 | |
CN113778688B (zh) | 内存管理***、内存管理方法、内存管理装置 | |
US20240241644A1 (en) | Storage device and storage system | |
CN110928803A (zh) | 一种内存管理方法及装置 | |
CN105469173A (zh) | 一种静态内存进行优化管理的方法 | |
CN111562883B (zh) | 固态硬盘的缓存管理***、方法、装置 | |
US10152258B1 (en) | Big block allocation of persistent main memory | |
CN106537321B (zh) | 存取文件的方法、装置和存储*** | |
WO2023124423A1 (zh) | 一种存储空间分配方法、装置、终端设备及存储介质 | |
CN116401045A (zh) | 一种对msix中断向量弹性池化管理的方法及装置 | |
US10949340B2 (en) | Block mapping systems and methods for storage device | |
CN117130955A (zh) | 用于管理相关联的存储器的方法和*** | |
CN113268356B (zh) | 基于LINUX***的多GPU板卡bounding的***、方法及介质 | |
CN113849311B (zh) | 内存空间管理方法、装置、计算机设备和存储介质 | |
CN114518962A (zh) | 内存的管理方法及装置 | |
CN116048377A (zh) | 固态硬盘的数据处理方法及相关设备 | |
CN107766262B (zh) | 调节并发写命令数量的方法与装置 | |
CN115794417A (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 |