CN118210632A - 内存分配方法、装置、电子设备及存储介质 - Google Patents
内存分配方法、装置、电子设备及存储介质 Download PDFInfo
- Publication number
- CN118210632A CN118210632A CN202410518880.5A CN202410518880A CN118210632A CN 118210632 A CN118210632 A CN 118210632A CN 202410518880 A CN202410518880 A CN 202410518880A CN 118210632 A CN118210632 A CN 118210632A
- Authority
- CN
- China
- Prior art keywords
- memory
- target
- allocation
- task
- memory block
- 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.)
- Pending
Links
- 230000015654 memory Effects 0.000 title claims abstract description 648
- 238000000034 method Methods 0.000 title claims abstract description 113
- 230000008569 process Effects 0.000 claims abstract description 58
- 238000004364 calculation method Methods 0.000 claims abstract description 15
- 238000009434 installation Methods 0.000 claims description 25
- 238000004590 computer program Methods 0.000 claims description 16
- 239000002699 waste material Substances 0.000 abstract description 7
- 238000004891 communication Methods 0.000 description 6
- 238000010586 diagram Methods 0.000 description 5
- 239000012634 fragment Substances 0.000 description 2
- 238000013467 fragmentation Methods 0.000 description 2
- 238000006062 fragmentation reaction Methods 0.000 description 2
- 230000003993 interaction Effects 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 101150083764 KCNK9 gene Proteins 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000006467 substitution reaction Methods 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
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/06—Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
- G06F12/0646—Configuration or reconfiguration
-
- 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/50—Indexing scheme relating to G06F9/50
- G06F2209/5011—Pool
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System (AREA)
Abstract
本发明涉及计算机技术领域,提供一种内存分配方法、装置、电子设备及存储介质,该方法首先接收目标设备的进程发送的内存分配请求;然后在目标设备的任务队列拥有的空闲内存块中,选取满足内存分配请求的第一目标内存块进行分配。该方法借助于用于提交计算任务的任务队列所具有的先进先出语义,可以使内存块的分配与使用具有时序性,避免同一内存块的分配与使用发生冲突。而且,该方法通过在任务队列拥有的空闲内存块中,选取满足内存分配请求的第一目标内存块进行分配,可以在队列作用域对空闲内存块进行安全的重复使用,不仅可以大大提高内存分配效率,还可以避免内存的浪费。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种内存分配方法、装置、电子设备及存储介质。
背景技术
在传统的内存分配策略中,内存的分配是全局作用域可见的,意味着无论是为程序中哪个部分分配的内存块,都可以直接在其他地方使用。而且,均通过向系统发出内存申请请求的方式实现内存分配。
由于每次申请内存都需要与系统进行交互,涉及到复杂的底层操作,如查找空闲内存块、更新内存管理表等,这些操作通常需要耗费较多的计算资源和时间。特别是在大量或频繁的申请内存的场景下,这种方式的分配耗时会变得尤为显著,从而影响到程序的执行效率。
此外,传统的内存分配策略还可能引发内存碎片问题。随着内存的不断分配和释放,空闲的内存空间可能会被分割成许多小的碎片,这些碎片可能无法满足后续较大的内存申请需求,从而导致内存资源的浪费。
发明内容
本发明提供一种内存分配方法、装置、电子设备及存储介质,用以解决直接向系统申请内存时内存分配耗时长、内存资源浪费的缺陷。
本发明提供一种内存分配方法,包括:
接收目标设备的进程发送的内存分配请求;
在所述目标设备的任务队列拥有的空闲内存块中,选取满足所述内存分配请求的第一目标内存块进行分配;
其中,所述空闲内存块包括所述任务队列上使用后释放的内存块。
根据本发明提供的一种内存分配方法,所述方法还包括:
确定所述空闲内存块中不存在所述第一目标内存块或所述任务队列未拥有所述空闲内存块,向所述内存池的管理系统发送所述内存分配请求;所述内存池中存储有多个内存块;
接收所述管理系统基于所述内存分配请求提供的第二目标内存块;
将所述第二目标内存块进行分配。
根据本发明提供的一种内存分配方法,所述第二目标内存块为所述内存池内满足所述内存分配请求的内存块;
或者,所述第二目标内存块为所述内存池内不存在所述第二目标内存块的情况下,由所述管理系统向所述目标设备的安装系统发送所述内存分配请求后所述安装系统为所述内存池分配的内存块。
根据本发明提供的一种内存分配方法,所述任务队列包括按顺序排列的分配任务、计算任务以及释放任务;在所述任务队列拥有的空闲内存块中,选取满足所述内存分配请求的第一目标内存块进行分配,具体包括:
执行所述分配任务,在所述任务队列拥有的空闲内存块中,选取所述第一目标内存块进行分配;
在所述任务队列拥有的空闲内存块中,选取满足所述内存分配请求的第一目标内存块进行分配,之后包括:
在所述计算任务基于所述第一目标内存块执行结束后,执行所述释放任务,将所述第一目标内存块作为所述空闲内存块释放至所述任务队列。
根据本发明提供的一种内存分配方法,所述任务队列的数量为多个;在所述任务队列拥有的空闲内存块中,选取满足所述内存分配请求的第一目标内存块进行分配,还具体包括:
在所述内存分配请求对应的任务队列拥有的空闲内存块中,选取满足所述内存分配请求的第一目标内存块进行分配。
根据本发明提供的一种内存分配方法,所述任务队列的数量为多个,多个所述任务队列之间具有任务依赖关系;
在所述任务队列拥有的空闲内存块中,选取满足所述内存分配请求的第一目标内存块进行分配,还具体包括:
在多个所述任务队列拥有的空闲内存块中,选取满足所述内存分配请求的内存块作为所述第一目标内存块进行分配。
根据本发明提供的一种内存分配方法,所述内存分配请求包括所述目标设备的进程所需的内存大小;
所述第一目标内存块为所述空闲内存块中与所述内存大小相同的内存块。
本发明还提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如上述任一种所述的内存分配方法。
本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如上述任一种所述的内存分配方法。
本发明还提供一种计算机程序产品,包括计算机程序,所述计算机程序被处理器执行时实现如上述任一种所述的内存分配方法。
本发明提供的内存分配方法、装置、电子设备及存储介质,该方法首先接收目标设备的进程发送的内存分配请求;目标设备基于任务队列提交计算任务;然后在任务队列拥有的空闲内存块中,选取满足内存分配请求的第一目标内存块进行分配。该方法借助于用于提交计算任务的任务队列所具有的先进先出语义,可以使内存块的分配与使用具有时序性,避免同一内存块的分配与使用发生冲突。而且,该方法通过在任务队列拥有的空闲内存块中,选取满足内存分配请求的第一目标内存块进行分配,可以在队列作用域对空闲内存块进行安全的重复使用,不仅可以大大提高内存分配效率,还可以避免内存的浪费。
附图说明
为了更清楚地说明本发明或相关技术中的技术方案,下面将对实施例或相关技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明提供的内存分配方法的流程示意图;
图2是本发明提供的各任务队列之间的任务依赖关系示意图;
图3是本发明提供的内存分配方法的实现架构图;
图4是本发明提供的内存分配装置的结构示意图;
图5是本发明提供的电子设备的结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明中的附图,对本发明中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明的说明书和权利要求书中的术语“第一”、“第二”的特征可以明示或者隐含地包括一个或者更多个该特征。在发明的描述中,除非另有说明,“多个”的含义是两个或两个以上。此外,说明书以及权利要求中“和/或”表示所连接对象的至少其中之一,字符“/”,一般表示前后关联对象是一种“或”的关系。
由于相关技术中在对主机进程进行内存分配时,需要与系统进行交互,向系统发出内存分配申请,系统则涉及到复杂的底层操作,如查找空闲内存块、更新内存管理表等,并将合适的内存分配给主机进程。然而,上述复杂的底层操作通常需要耗费较多的计算资源和时间,进而影响主机进程的执行效率,也容易引发内存碎片问题,从而导致内存资源的浪费。
为此,本发明实施例中提供了一种内存分配方法。
图1为本发明实施例中提供的一种内存分配方法的流程示意图,如图1所示,该方法包括:
S1,接收目标设备的进程发送的内存分配请求;
S2,在所述目标设备的任务队列拥有的空闲内存块中,选取满足所述内存分配请求的第一目标内存块进行分配;
其中,所述空闲内存块包括所述任务队列上使用后释放的内存块。
具体地,本发明实施例中提供的内存分配方法,其执行主体为内存分配器,该内存分配器可以配置于目标设备的运行时系统(Runtime System)内,用于为目标设备上各进程分配所需的内存。其中,运行时系统主要负责在进程运行期间处理和管理底层的计算机资源。
该目标设备可以是图形处理器(Graphics Processing Unit,GPU)、通用图形处理器(General-purpose Computing on Graphics Processing Unit,GPGPU)、中央处理器(Central Processing Unit,CPU)、微处理器(Microprocessor Unit,MPU)等基于任务队列提交计算任务的设备。不同类别的目标设备可以构成异构系统。
提交计算任务所采用的任务队列可以是用户通过目标设备的运行时系统的应用程序编程接口(Application Programming Interface,API),向目标设备的运行时系统发送任务请求,目标设备的运行时系统可以接收用户的任务请求,分配和管理任务队列,确保计算任务能够正确地被调度到目标设备上执行。
首先执行步骤S1,目标设备在需要利用其安装系统的内存处理计算任务时,目标设备的进程(Process)可以向内存分配器发送内存分配请求,该内存分配请求可以包括进程的内存需求,例如可以是进程所需的内存大小。其中,目标设备的进程是指目标设备中用于申请分配内存和使用内存的用户程序。目标设备的安装系统可以包括Linux系统、windows系统等操作系统,此处不作具体限定。
由于目标设备通过任务队列提交计算任务,则也可以通过任务队列提交分配任务,使内存分配器为目标设备的进程分配合适的内存,即任务队列包括按先后顺序排列的分配任务和计算任务。此处,目标设备的进程可以通过向内存分配器发送内存分配请求的方式,使内存分配器执行分配任务。
目标设备的进程向内存分配器发送内存分配请求后,内存分配器则接收该进程发送的内存分配请求。
然后执行步骤S2,内存分配器确定目标设备的任务队列拥有的空闲内存块。该空闲内存块可以包括任务队列上的计算任务被执行时使用的、在使用后被释放回任务队列的内存块。该任务队列还可以在计算任务之后包括释放任务,在释放任务被执行时,使用后的内存块被释放回任务队列,而不会被直接释放回目标设备的安装系统。
此后,内存分配器在任务队列拥有的空闲内存块中,选取第一目标内存块进行分配。该第一目标内存块是指满足内存分配请求的内存块,即满足目标设备的进程的内存需求的内存块,可以是与目标设备的进程所需的内存大小相同的内存块。
对第一目标内存块进行分配,即将第一目标内存块分配至发送内存分配请求的目标设备的进程,使进程可以利用第一目标内存块处理任务队列中的计算任务。
可以理解的是,由于该任务队列具有先进先出的队列语义,由此该内存分配器可以被认为是具有队列语义的内存分配器。
本发明实施例中提供的内存分配方法,首先接收目标设备的进程发送的内存分配请求;目标设备基于任务队列提交计算任务;然后在任务队列拥有的空闲内存块中,选取满足内存分配请求的第一目标内存块进行分配。该方法借助于用于提交计算任务的任务队列所具有的先进先出语义,可以使内存块的分配与使用具有时序性,避免同一内存块的分配与使用发生冲突。而且,该方法通过在任务队列拥有的空闲内存块中,选取满足内存分配请求的第一目标内存块进行分配,可以在队列作用域对空闲内存块进行安全的重复使用,不仅可以大大提高内存分配效率,还可以避免内存的浪费。
在上述实施例的基础上,该内存分配方法还包括:
确定所述空闲内存块中不存在所述第一目标内存块或所述任务队列未拥有所述空闲内存块,向所述内存池的管理系统发送所述内存分配请求;所述内存池中存储有多个内存块;
接收所述管理系统基于所述内存分配请求提供的第二目标内存块;
将所述第二目标内存块进行分配。
具体地,为了提高任务队列上内存块分配和释放的效率,可以引入内存池,该内存池中可以存储多个内存块。该内存池可以通过内存池的管理系统向目标设备的安装系统申请内存,并将申请到的内存划分为多个内存块构建得到。内存池中不同内存块的大小可以相同,也可以不同,此处不作具体限定。
在接收目标设备的进程发送的内存分配请求之后,若任务队列没有空闲内存块或任务队列拥有的空闲内存块中没有满足内存分配请求的第一目标内存块,则内存分配器向内存池的管理系统发送内存分配请求,该内存分配请求与目标设备的进程向内存分配器发送的内存分配请求相同,均包括目标设备的进程的内存需求。
此后,内存池的管理系统可以在内存池中选取满足内存分配请求的内存块,若内存池中存在满足内存分配请求的内存块,则将该内存块作为第二目标内存块。若内存池中不存在满足内存分配请求的内存块,则内存池的管理系统可以进一步向目标设备的安装系统请求满足内存分配请求的内存作为第二目标内存块,如此可以保证第二目标内存块始终不为空,为内存分配提供兜底方案。
此后,内存池的管理系统可以将第二目标内存块提供给内存分配器,通过内存分配器将该第二目标内存块分配给发送内存分配请求的目标设备的进程,内存池的管理系统也可以直接将该第二目标内存块分配给发送内存分配请求的目标设备的进程,此处不作具体限定。
本发明实施例中,在确定第一目标内存块为空,即任务队列中没有满足内存分配请求的空闲内存块的情况下,才向内存池的管理系统发送内存分配请求,以通过内存池的管理系统提供第二目标内存块。该过程可以优先考虑任务队列中是否存在满足内存分配请求的空闲内存块,提高内存分配效率,并且通过内存池可以实现内存块的快速分配及释放,还可以避免出现内存碎片。
在上述实施例的基础上,所述第二目标内存块为所述内存池内满足所述内存分配请求的内存块;
或者,所述第二目标内存块为所述内存池内不存在所述第二目标内存块的情况下,由所述管理系统向所述目标设备的安装系统发送所述内存分配请求后所述安装系统为所述内存池分配的内存块。
具体地,在内存池的管理系统接收到内存分配器发送的内存分配请求之后,内存池的管理系统优先从内存池中选择满足内存分配请求的内存块作为第二目标内存块供内存分配器进行分配。
若内存池的管理系统判断内存池中不存在满足内存分配请求的内存块,则向目标设备的安装系统发送内存分配请求,目标设备的安装系统在接收到内存分配请求之后,向内存池提供满足内存分配请求的内存块,以使内存池的管理系统将安装系统提供的内存块作为第二目标内存块供内存分配器进行分配。
可以理解的是,本发明实施例中,所涉及的内存包括安装系统的系统内存、内存池上的内存块以及任务队列上的内存块。
系统内存由安装系统统一管理,安装系统中的各进程共用。
内存池上的内存块由内存池的管理系统进行管理,目标设备的进程内向内存池请求的内存分配从这里分配。
任务队列上的内存块由内存分配器管理,能够保证对任务队列上的空闲内存块进行重复应用。
在进行内存分配时,各内存的优先级由高到低的顺序依次为任务队列上的空闲内存块、内存池上的内存块以及系统内存。即只有在任务队列上不存在满足内存分配请求的第一目标内存块、内存池上也不存在满足内存分配请求的内存块的情况下,才会通过内存池的管理系统向安装系统请求满足内存分配请求的内存。
本发明实施例中,通过考虑不同位置的内存的优先级的方式,为目标设备的进程分配合适的内存块,优先考虑对任务队列上的空闲内存池进行重复使用,其次考虑对内存池中的内存块的使用,可以提高内存分配效率,避免直接将系统内存进行分配导致的分配效率低的问题出现。
在上述实施例的基础上,所述任务队列包括按顺序排列的分配任务、计算任务以及释放任务;在所述任务队列拥有的空闲内存块中,选取满足所述内存分配请求的第一目标内存块进行分配,具体包括:
执行所述分配任务,在所述任务队列拥有的空闲内存块中,选取所述第一目标内存块进行分配;
在所述任务队列拥有的空闲内存块中,选取满足所述内存分配请求的第一目标内存块进行分配,之后包括:
在所述计算任务基于所述第一目标内存块执行结束后,执行所述释放任务,将所述第一目标内存块作为所述空闲内存块释放至所述任务队列。
具体地,该任务队列可以包括按顺序排列的分配任务、计算任务以及释放任务。
内存分配器通过执行分配任务,在任务队列拥有的空闲内存块中,选取第一目标内存块进行分配。
若确定第一目标内存块不为空,则内存分配器将该第一目标内存块分配给发送内存分配请求的目标设备的进程,以使目标设备的进程利用第一目标内存块执行计算任务。
在计算任务基于第一目标内存块执行结束后,内存分配器执行释放任务,将第一目标内存块作为空闲内存块释放至任务队列。
由此,内存块的分配和释放均在任务队列中对应有任务,可以避免内存块的分配和释放产生冲突。
在上述实施例的基础上,所述任务队列的数量为多个;
在所述任务队列拥有的空闲内存块中,选取满足所述内存分配请求的第一目标内存块进行分配,还具体包括:
在所述内存分配请求对应的任务队列拥有的空闲内存块中,选取满足所述内存分配请求的第一目标内存块进行分配。
具体地,任务队列的数量可以包括多个,即目标设备可以基于多个任务队列同步提交不同的计算任务。
此时,内存分配请求与任务队列一一对应。步骤S2具体可以在内存分配请求对应的任务队列拥有的空闲内存块中,选取满足内存分配请求的第一目标内存块进行分配,如此可以避免不同任务队列中的空闲内存块的使用出现冲突。
在上述实施例的基础上,所述任务队列的数量为多个,多个所述任务队列之间具有任务依赖关系;
在所述任务队列拥有的空闲内存块中,选取满足所述内存分配请求的第一目标内存块进行分配,还具体包括:
在多个所述任务队列拥有的空闲内存块中,选取满足所述内存分配请求的内存块作为所述第一目标内存块进行分配。
具体地,在任务队列的数量包括多个且各任务队列之间存在任务依赖关系的情况下,步骤S2还可以在各任务队列拥有的空闲内存块中,选取满足目标设备的进程的内存需求的内存块作为第一目标内存块进行分配。
可以理解的是,各任务队列之间的任务依赖关系可以通过在每个任务队列中添加事件(event)的记录指令以及等待指令实现,即如图2所示,存在第一任务队列(queue0)和第二任务队列(queue1),第一任务队列中包括多个任务,分别为任务0(Task0)、任务1(Task1)、任务2(Task2)以及任务3(Task3),在第一任务队列中加入事件的记录指令。在第二任务队列中加入事件的等待指令,此后在第二任务队列中加入任务4(Task4)。
在第一任务队列和第二任务队列中引入事件,通过事件的记录指令和等待指令,可以确定第一任务队列和第二任务队列之间的任务依赖关系,即第一任务队列中事件的记录指令执行时,说明此前的任务0、任务1、任务2以及任务3均已执行完成。
第二任务队列中事件的等待指令执行时,说明已等到任务3执行完成,此时可以执行任务4,如此可以保证任务4在任务3之后执行,得到第一任务队列和第二任务队列之间的任务依赖关系,即任务1至任务4是顺序执行的。
由此,由于各任务队列之间具有任务依赖关系,则在接收到目标设备的进程发送的内存分配请求之后,各任务队列拥有的空闲内存块均可用于分配至目标设备的进程中。因此,可以判断每个任务队列拥有的空闲内存块中是否存在能够满足内存分配请求的内存块,如果存在则可以将其作为第一目标内存块进行分配。如果所有任务队列拥有的空闲内存块中均不存在能够满足内存分配请求的内存块,即第一目标内存块为空,则可以向内存池的管理系统发送内存分配请求。
本发明实施例中,由于各任务队列之间具有任务依赖关系,可以使各任务队列拥有的空闲内存块均可用于分配至目标设备的进程中,可以进一步扩大空闲内存块的范围和数量,便于快速找到合适的内存块并进行分配,更加有助于提高内存分配效率。
在上述实施例的基础上,所述内存分配请求包括所述目标设备的进程所需的内存大小;
所述第一目标内存块为所述空闲内存块中与所述内存大小相同的内存块。
具体地,本发明实施例中,由于内存分配请求可以是目标设备的进程所需的内存大小,因此满足所述内存分配请求的第一目标内存块可以是目标设备的任务队列拥有的空闲内存块中,与内存分配请求中目标设备的进程所需的内存大小相同的内存块,即在目标设备的任务队列拥有的空闲内存块中,需要选取与目标设备的进程所需的内存大小相同的内存块作为第一目标内存块。
该方法中,通过目标设备的进程所需的内存大小,在目标设备的任务队列拥有的空闲内存块中选取匹配该内存大小的第一目标内存块进行分配,可以在队列作用域对空闲内存块进行安全的重复使用,不仅可以大大提高内存分配效率,还可以避免内存的浪费。
在上述实施例的基础上,如图3所示,本发明实施例中提供的内存分配方法中,涉及的内存包括目标设备的安装系统的系统内存、内存池上的内存块以及任务队列上的内存块。在内存池创建时,内存池的管理系统可以向目标设备的安装系统请求分配一定数量的系统内存,该过程如图3中的箭头1。
本发明实施例中提供的内存分配方法的实现流程包括:
第一步,目标设备的进程向内存分配器发送内存分配请求,该内存分配请求可以包括目标设备的进程的内存需求。
第二步,内存分配器在与内存分配请求对应的任务队列中查找还没有被释放到内存池的空闲内存块,判断是否存在空闲内存块以及在存在空闲内存块的情况下,空闲内存块释放满足内存分配请求,如果空闲内存块符合内存分配请求,则可以直接从该任务队列中分配内存块。例如,目标设备的三个进程分别向内存分配器发送其内存分配请求,内存分配器可以从各自内存分配请求对应的任务队列中直接分配。如图3所示,箭头2、3、4分别表示从对应的任务队列中直接分配。
第三步,如果内存分配请求对应的任务队列中不存在空闲内存块,或存在的空闲内存块不满足内存分配请求,则内存分配器继续向内存池的管理系统发送内存分配请求,以向内存池请求内存块。
如果内存池的管理系统确定在内存池中存在满足内存分配需求的内存块,则将其提供给内存分配器,以使内存分配器将其分配给目标设备的进程。此处,为目标设备的进程分配的内存块来自于内存池,如图3中的箭头5所示。
第四步,如果内存池的管理系统确定在内存池中不存在满足内存分配需求的内存块,则内存池的管理系统可以继续向目标设备的安装系统发送内存分配请求,通过安装系统在系统内存中查找符合内存分配请求的内存块,然后经过内存池,由内存分配器分配给目标设备的进程。如图3中箭头1所示。
第五步,释放分配的内存块即将目标设备的进程使用完的内存块移动到对应的任务队列中,如图3中箭头7、8、9所示。
上述第一步至第五步的内存分配和释放动作可以重复进行,由于内存分配器会首先到任务队列拥有的空闲内存块中分配内存,这样即可达到内存重复使用的目的。
又由于可以从内存池中分配内存块,这样能够提高分配效率,因为典型的应用场景是在一系列的异步接口调用中分配和释放内存块,必须保证分配和释放任务在合适的时长内完成。
第六步,在任务队列拥有的所有内存块均为空闲内存块,则可以将该任务队列拥有的所有内存块释放至内存池,成为未被占用的内存池内存,即如图3中箭头11所示。
第七步,在内存池内的各内存块均完成使用,即均未被占用,则将内存池内的各内存块释放至安装系统,成为未被占用的系统内存,即图3中箭头10所示。
综上所述,本发明实施例中,通过考虑不同位置的内存的优先级的方式,为目标设备的进程分配合适的内存块,优先考虑对任务队列上的空闲内存池进行重复使用,其次考虑对内存池中的内存块的使用,最后采用安装系统的系统内存作为兜底,不仅可以实现内存的重复使用,节约内存资源,还可以提高内存分配效率,避免直接将系统内存进行分配导致的分配效率低、成本高的问题出现。
如图4所示,在上述实施例的基础上,本发明实施例中提供了一种内存分配装置,包括:
请求接收模块41,用于接收目标设备的进程发送的内存分配请求;
内存分配模块42,用于在所述目标设备的任务队列拥有的空闲内存块中,选取满足所述内存分配请求的第一目标内存块进行分配;
其中,所述空闲内存块包括所述任务队列上使用后释放的内存块。
在上述实施例的基础上,本发明实施例中提供的内存分配装置,所述内存分配模块还用于:
确定所述空闲内存块中不存在所述第一目标内存块或所述任务队列未拥有所述空闲内存块,向所述内存池的管理系统发送所述内存分配请求;所述内存池中存储有多个内存块;
接收所述管理系统基于所述内存分配请求提供的第二目标内存块;
将所述第二目标内存块进行分配。
在上述实施例的基础上,本发明实施例中提供的内存分配装置,所述第二目标内存块为所述内存池内满足所述内存分配请求的内存块;或者,
所述第二目标内存块为所述内存池内不存在所述第二目标内存块的情况下,由所述管理系统向所述目标设备的安装系统发送所述内存分配请求后所述安装系统为所述内存池分配的内存块。
在上述实施例的基础上,本发明实施例中提供的内存分配装置,所述任务队列包括按顺序排列的分配任务、计算任务以及释放任务;
所述内存分配模块还具体用于:
执行所述分配任务,在所述任务队列拥有的空闲内存块中,选取所述第一目标内存块进行分配;
在所述计算任务基于所述第一目标内存块执行结束后,执行所述释放任务,将所述第一目标内存块作为所述空闲内存块释放至所述任务队列。
在上述实施例的基础上,本发明实施例中提供的内存分配装置,所述任务队列的数量为多个;
所述内存分配模块还具体用于:
在所述内存分配请求对应的任务队列拥有的空闲内存块中,选取满足所述内存分配请求的第一目标内存块进行分配。
在上述实施例的基础上,本发明实施例中提供的内存分配装置,所述任务队列的数量为多个,多个所述任务队列之间具有任务依赖关系;
所述内存分配模块还具体用于:
在多个所述任务队列拥有的空闲内存块中,选取满足所述内存分配请求的内存块作为所述第一目标内存块进行分配。
在上述实施例的基础上,本发明实施例中提供的内存分配装置,所述内存分配请求包括所述目标设备的进程所需的内存大小;
所述第一目标内存块为所述空闲内存块中与所述内存大小相同的内存块。
具体地,本发明实施例中提供的内存分配装置中各模块的作用与上述方法类实施例中各步骤的操作流程是一一对应的,实现的效果也是一致的,具体参见上述实施例,本发明实施例中对此不再赘述。
图5示例了一种电子设备的实体结构示意图,如图5所示,该电子设备可以包括:处理器(Processor)510、通信接口(Communications Interface)520、存储器(Memory)530和通信总线540,其中,处理器510,通信接口520,存储器530通过通信总线540完成相互间的通信。处理器510可以调用存储器530中的逻辑指令,以执行上述各实施例中提供的内存分配方法。
此外,上述的存储器530中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对相关技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
另一方面,本发明还提供一种计算机程序产品,所述计算机程序产品包括计算机程序,计算机程序可存储在非暂态计算机可读存储介质上,所述计算机程序被处理器执行时,计算机能够执行上述各实施例中提供的内存分配方法。
又一方面,本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现以执行上述各实施例中提供的内存分配方法。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对相关技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
Claims (10)
1.一种内存分配方法,其特征在于,包括:
接收目标设备的进程发送的内存分配请求;
在所述目标设备的任务队列拥有的空闲内存块中,选取满足所述内存分配请求的第一目标内存块进行分配;
其中,所述空闲内存块包括所述任务队列上使用后释放的内存块。
2.根据权利要求1所述的内存分配方法,其特征在于,所述方法还包括:
确定所述空闲内存块中不存在所述第一目标内存块或所述任务队列未拥有所述空闲内存块,向内存池的管理系统发送所述内存分配请求;所述内存池中存储有多个内存块;
接收所述管理系统基于所述内存分配请求提供的第二目标内存块;
将所述第二目标内存块进行分配。
3.根据权利要求2所述的内存分配方法,其特征在于,所述第二目标内存块为所述内存池内满足所述内存分配请求的内存块;
或者,所述第二目标内存块为所述内存池内不存在所述第二目标内存块的情况下,由所述管理系统向所述目标设备的安装系统发送所述内存分配请求后所述安装系统为所述内存池分配的内存块。
4.根据权利要求1-3中任一项所述的内存分配方法,其特征在于,所述任务队列包括按顺序排列的分配任务、计算任务以及释放任务;在所述任务队列拥有的空闲内存块中,选取满足所述内存分配请求的第一目标内存块进行分配,具体包括:
执行所述分配任务,在所述任务队列拥有的空闲内存块中,选取所述第一目标内存块进行分配;
在所述任务队列拥有的空闲内存块中,选取满足所述内存分配请求的第一目标内存块进行分配,之后包括:
在所述计算任务基于所述第一目标内存块执行结束后,执行所述释放任务,将所述第一目标内存块作为所述空闲内存块释放至所述任务队列。
5.根据权利要求1-3中任一项所述的内存分配方法,其特征在于,所述任务队列的数量为多个;
在所述任务队列拥有的空闲内存块中,选取满足所述内存分配请求的第一目标内存块进行分配,还具体包括:
在所述内存分配请求对应的任务队列拥有的空闲内存块中,选取满足所述内存分配请求的第一目标内存块进行分配。
6.根据权利要求1-3中任一项所述的内存分配方法,其特征在于,所述任务队列的数量为多个,多个所述任务队列之间具有任务依赖关系;
在所述任务队列拥有的空闲内存块中,选取满足所述内存分配请求的第一目标内存块进行分配,还具体包括:
在多个所述任务队列拥有的空闲内存块中,选取满足所述内存分配请求的内存块作为所述第一目标内存块进行分配。
7.根据权利要求1-3中任一项所述的内存分配方法,其特征在于,所述内存分配请求包括所述目标设备的进程所需的内存大小;
所述第一目标内存块为所述空闲内存块中与所述内存大小相同的内存块。
8.一种电子设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求1-7中任一项所述的内存分配方法。
9.一种非暂态计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1-7中任一项所述的内存分配方法。
10.一种计算机程序产品,包括计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1-7中任一项所述的内存分配方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410518880.5A CN118210632A (zh) | 2024-04-26 | 2024-04-26 | 内存分配方法、装置、电子设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410518880.5A CN118210632A (zh) | 2024-04-26 | 2024-04-26 | 内存分配方法、装置、电子设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN118210632A true CN118210632A (zh) | 2024-06-18 |
Family
ID=91456345
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202410518880.5A Pending CN118210632A (zh) | 2024-04-26 | 2024-04-26 | 内存分配方法、装置、电子设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN118210632A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN118363542A (zh) * | 2024-06-19 | 2024-07-19 | 上海燧原科技股份有限公司 | 任务运行时的动态存储管理方法、装置、设备及介质 |
-
2024
- 2024-04-26 CN CN202410518880.5A patent/CN118210632A/zh active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN118363542A (zh) * | 2024-06-19 | 2024-07-19 | 上海燧原科技股份有限公司 | 任务运行时的动态存储管理方法、装置、设备及介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP3786793B1 (en) | Task processing method and device, and computer system | |
US9875139B2 (en) | Graphics processing unit controller, host system, and methods | |
WO2022247105A1 (zh) | 一种任务调度方法、装置、计算机设备和存储介质 | |
CN109240825B (zh) | 弹性任务调度方法、装置、设备及计算机可读存储介质 | |
KR102338849B1 (ko) | 실시간 운영 체제에서 스택 메모리 관리를 제공하는 방법 및 시스템 | |
US20090260008A1 (en) | Virtual machine management system and method for managing processor resources thereof | |
US20170344398A1 (en) | Accelerator control device, accelerator control method, and program storage medium | |
US20160371123A1 (en) | Data Processing Method and Apparatus | |
CN110162397B (zh) | 资源分配方法、装置及系统 | |
CN118210632A (zh) | 内存分配方法、装置、电子设备及存储介质 | |
US9740530B2 (en) | Decreasing the priority of a user based on an allocation ratio | |
CN112286688A (zh) | 一种内存管理和使用方法、装置、设备和介质 | |
CN115509704A (zh) | 一种任务调度方法、装置、设备及存储介质 | |
US20150212859A1 (en) | Graphics processing unit controller, host system, and methods | |
CN114721818A (zh) | 一种基于Kubernetes集群的GPU分时共享方法和系统 | |
US9367326B2 (en) | Multiprocessor system and task allocation method | |
CN110175078B (zh) | 业务处理方法及装置 | |
CN117311939A (zh) | 一种客户端请求的处理方法、计算设备及存储介质 | |
CN113268356B (zh) | 基于LINUX系统的多GPU板卡bounding的系统、方法及介质 | |
WO2021253875A1 (zh) | 内存管理方法和相关产品 | |
CN114816741A (zh) | Gpu资源管理方法、装置、系统与可读存储介质 | |
CN112948069A (zh) | 用于运行计算单元的方法 | |
US8566829B1 (en) | Cooperative multi-level scheduler for virtual engines | |
US20240176666A1 (en) | Workspace processing method and device | |
JP2001142723A (ja) | 資源配分方法、計算機システム及び記録媒体 |
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 |