用于管理存储空间的装置及方法、计算设备、芯片转让专利

申请号 : CN202211561700.9

文献号 : CN115658328B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 请求不公布姓名

申请人 : 摩尔线程智能科技(北京)有限责任公司

摘要 :

本公开公开了提供了一种用于管理存储空间的装置、计算设备、方法和芯片。装置包括:第一接口,被配置为接收来自外部请求源的空间管理请求;第二接口,连接包括存储空间的存储器;本地索引存储器,被配置为:响应于其剩余空间的大小满足第一条件,经由第二接口从存储空间的第一存储区域读取存储单元索引,以及响应于其剩余空间的大小满足第二条件,经由第二接口向存储空间的第一存储区域写入存储单元索引,每个存储单元索引表征存储空间的第二存储区域中的一个具有预设大小的存储单元;空间管理模块,被配置为:基于空间管理请求管理本地索引存储器中的存储单元索引。这有助于降低路径延迟,降低对存储器的访问频率,提升管理效率。

权利要求 :

1.一种用于管理存储空间的装置,包括:

第一接口,连接外部请求源,并被配置为接收来自所述外部请求源的空间管理请求;

第二接口,连接存储器,所述存储器包括所述存储空间;

本地索引存储器,被配置为:响应于所述本地索引存储器的剩余空间满足第一条件,经由所述第二接口从所述存储空间的第一存储区域向所述本地索引存储器读取存储单元索引,以及,响应于所述本地索引存储器的剩余空间的大小满足第二条件,经由所述第二接口从所述本地索引存储器向所述存储空间的第一存储区域写入存储单元索引,其中,每个存储单元索引用于表征所述存储空间的第二存储区域中的一个具有预设大小的存储单元;

空间管理模块,被配置为:基于所述空间管理请求,管理所述本地索引存储器中的存储单元索引。

2.根据权利要求1所述的装置,其中,所述响应于所述本地索引存储器的剩余空间的大小满足第一条件,经由所述第二接口从所述存储空间的第一存储区域向所述本地索引存储器读取存储单元索引包括:当所述本地索引存储器的剩余空间大于第一阈值且未接收到来自所述空间管理模块的索引写入请求时,经由所述第二接口从所述存储空间的第一存储区域向所述本地索引存储器读取第一预设数量的存储单元索引。

3.根据权利要求2所述的装置,其中,所述响应于所述本地索引存储器的剩余空间的大小满足第一条件,经由所述第二接口从所述存储空间的第一存储区域向所述本地索引存储器读取存储单元索引还包括:当所述本地索引存储器的剩余空间大于第一阈值时,响应于接收到来自所述空间管理模块的索引写入请求,优先写入与所述索引写入请求相关的存储单元索引。

4.根据权利要求2所述的装置,其中,所述第一预设数量与所述本地索引存储器的剩余空间的比值大于0且小于1。

5.根据权利要求1所述的装置,其中,所述响应于所述本地索引存储器的剩余空间的大小满足第二条件,经由所述第二接口从所述本地索引存储器向所述存储空间的第一存储区域写入存储单元索引包括:当所述本地索引存储器的剩余空间小于第二阈值且未接收到来自所述空间管理模块的索引读出请求时,经由所述第二接口从所述本地索引存储器向所述存储空间的第一存储区域写入第二预设数量的存储单元索引。

6.根据权利要求5所述的装置,其中,所述响应于所述本地索引存储器的剩余空间的大小满足第二条件,经由所述第二接口从所述本地索引存储器向所述存储空间的第一存储区域写入存储单元索引包括:当所述本地索引存储器的剩余空间小于第二阈值时,响应于接收到来自所述空间管理模块的索引读出请求,优先读出与所述索引读出请求相关的存储单元索引。

7.根据权利要求5所述的装置,其中,所述第二预设数量与所述本地索引存储器的占用空间的比值大于0且小于1。

8.根据权利要求1所述的装置,其中,所述本地索引存储器还被配置为维护第一指针和第二指针,所述经由所述第二接口从所述存储空间的第一存储区域向所述本地索引存储器读取存储单元索引包括:经由所述第二接口,根据所述第一指针指向的位置从所述第一存储区域向所述本地索引存储器读取存储单元索引,所述经由所述第二接口从所述本地索引存储器向所述存储空间的第一存储区域写入存储单元索引包括:经由所述第二接口,根据所述第二指针指向的位置从所述本地索引存储器向所述第一存储区域写入存储单元索引。

9.根据权利要求1所述的装置,其中,所述空间管理请求包括空间分配请求,所述空间管理模块包括空间分配模块,所述空间分配模块被配置为:响应于与所述空间分配请求相关的存储单元索引已分配完毕,反馈完成信号;

响应于与所述空间分配请求相关的存储单元索引未分配完毕且所述本地索引存储器非空,从所述本地索引存储器读取一个或多个存储单元索引;

响应于与所述空间分配请求相关的存储单元索引未分配完毕且所述本地索引存储器为空,等待直至所述本地索引存储器非空。

10.根据权利要求9所述的装置,其中,所述空间分配模块包括至少两个子分配模块,每个子分配模块与预设大小集合中的一种预设大小相对应,并被配置为接收与相应预设大小对应的子分配请求。

11.根据权利要求1所述的装置,其中,所述空间管理请求包括空间回收请求,所述空间管理模块包括空间回收模块,所述空间回收模块被配置为:响应于与所述空间回收请求相关的存储单元索引已回收完毕,反馈完成信号;

响应于与所述空间回收请求相关的存储单元索引未回收完毕且所述本地索引存储器非满,向所述本地索引存储器写入一个或多个存储单元索引;

响应于与所述空间回收请求相关的存储单元索引未回收完毕且所述本地索引存储器为满,等待直至所述本地索引存储器非满。

12.根据权利要求11所述的装置,其中,所述空间回收模块包括至少两个子回收模块,每个子回收模块与预设大小集合中的一种预设大小相对应,并被配置为接收与相应预设大小对应的子回收请求。

13.根据权利要求10或12所述的装置,其中,所述本地索引存储器包括至少两个子索引存储器,每个子索引存储器与所述预设大小集合中的一种预设大小相对应,并被配置为:经由所述第二接口从所述第一存储区域的一子区域向该子索引存储器读取存储单元索引,以及经由所述第二接口从该子索引存储器向所述第一存储区域的该子区域写入存储单元索引。

14.根据权利要求10或12所述的装置,还包括请求分类模块,所述请求分类模块被配置为:响应于接收到空间分配请求,根据所述空间分配请求所请求分配的空间的大小,将所述空间分配请求拆分为一个或多个子分配请求,其中,每个子分配请求与所述预设大小集合中的一种预设大小相对应;

响应于接收到空间回收请求,根据所述空间回收请求所请求回收的空间对应的存储单元索引,将所述空间回收请求拆分为一个或多个子回收请求,其中,每个子回收请求与所述预设大小集合中的一种预设大小相对应。

15.根据权利要求1所述的装置,还包括:

初始化模块,被配置为:在所述装置上电后,经由所述第二接口向所述存储空间的第一存储区域和/或向所述本地索引存储器中写入多个存储单元索引。

16.根据权利要求1所述的装置,其中,所述空间管理模块包括索引生成模块,所述索引生成模块被配置为根据预设规则生成存储单元索引,以及其中,所述空间管理模块被配置为:响应于所述空间管理请求为空间分配请求,并且存储单元索引的已分配数量低于阈值数量,令所述索引生成模块生成一个或多个存储单元索引,所述存储单元索引的已分配数量为已分配至所述外部请求源的存储单元索引的累计数量。

17.一种计算设备,包括根据权利要求1‑16中任一项所述的用于管理存储空间的装置。

18.一种用于管理存储空间的方法,包括:

接收来自外部请求源的空间管理请求;

响应于本地索引存储器的剩余空间的大小满足第一条件,从所述存储空间的第一存储区域向所述本地索引存储器读取存储单元索引,其中,每个存储单元索引用于表征所述存储空间的第二存储区域中的一个具有预设大小的存储单元;

响应于所述本地索引存储器的剩余空间的大小满足第二条件,从所述本地索引存储器向所述存储空间的第一存储区域写入存储单元索引;

基于所述空间管理请求,管理所述本地索引存储器中的存储单元索引。

19.一种芯片,包括如权利要求1至16中任一项所述的用于管理存储空间的装置。

说明书 :

用于管理存储空间的装置及方法、计算设备、芯片

技术领域

[0001] 本公开涉及计算机技术领域,具体地,涉及一种用于管理存储空间的装置、计算设备、用于管理存储空间的方法和芯片。

背景技术

[0002] 随着计算机技术的发展,在人们的生活、工作、学习中,出现了越来越多的各种各样的计算设备。一般而言,在这些计算设备中,存在各种形式的处理器、控制器或微控制器,当它们运行应用程序以实现某种功能时,需要向内存请求一定的空间,当应用程序运行结束后,相应空间可以被释放。这便涉及到对内存空间的管理。
[0003] 目前,内存空间的管理一般通过软件方式实现,即由CPU(central processing unit,中央处理器)或MCU(Microcontroller Unit,微控制单元)等运行内存管理策略,并发出指令,进而由硬件系统对指令进行处理,再通过总线实现对内存的读写操作。在这类软件实现的内存管理方案中,通常存在路径长,延时高,结构复杂等问题。

发明内容

[0004] 有鉴于此,本公开提供了一种用于管理存储空间的装置、用于管理存储空间的方法、计算设备和芯片,可以缓解、减轻或甚至消除上述问题。
[0005] 根据本公开的一方面,提供了一种用于管理存储空间的装置,包括:第一接口,连接外部请求源,并被配置为接收来自外部请求源的空间管理请求;第二接口,连接存储器,存储器包括存储空间;本地索引存储器,被配置为:响应于本地索引存储器的剩余空间的大小满足第一条件,经由第二接口从存储空间的第一存储区域读取存储单元索引,以及,响应于本地索引存储器的剩余空间的大小满足第二条件,经由第二接口向存储空间的第一存储区域写入存储单元索引,其中,每个存储单元索引用于表征存储空间的第二存储区域中的一个具有预设大小的存储单元;空间管理模块,被配置为:基于空间管理请求,管理本地索引存储器中的存储单元索引。
[0006] 在一些实施例中,响应于本地索引存储器的剩余空间的大小满足第一条件,经由第二接口从存储空间的第一存储区域读取存储单元索引包括:当本地索引存储器的剩余空间大于第一阈值且未接收到来自空间管理模块的索引写入请求时,经由第二接口从存储空间的第一存储区域读取第一预设数量的存储单元索引。
[0007] 在一些实施例中,响应于本地索引存储器的剩余空间的大小满足第一条件,经由第二接口从存储空间的第一存储区域读取存储单元索引还包括:当本地索引存储器的剩余空间大于第一阈值时,响应于接收到来自空间管理模块的索引写入请求,优先写入与索引写入请求相关的存储单元索引。
[0008] 在一些实施例中,第一预设数量与本地索引存储器的剩余空间的比值大于0且小于1。
[0009] 在一些实施例中,响应于本地索引存储器的剩余空间的大小满足第二条件,经由第二接口向存储空间的第一存储区域写入存储单元索引包括:当本地索引存储器的剩余空间小于第二阈值且未接收到来自空间管理模块的索引读出请求时,经由第二接口向存储空间的第一存储区域写入第二预设数量的存储单元索引。
[0010] 在一些实施例中,响应于本地索引存储器的剩余空间的大小满足第二条件,经由第二接口向存储空间的第一存储区域写入存储单元索引包括:当本地索引存储器的剩余空间小于第二阈值时,响应于接收到来自空间管理模块的索引读出请求,优先读出与索引读出请求相关的存储单元索引。
[0011] 在一些实施例中,第二预设数量与本地索引存储器的占用空间的比值大于0且小于1。
[0012] 在一些实施例中,本地索引存储器还被配置为维护第一指针和第二指针,所述经由第二接口从存储空间的第一存储区域读取存储单元索引包括:经由第二接口,根据第一指针指向的位置从第一存储区域读取存储单元索引,经由第二接口向存储空间的第一存储区域写入存储单元索引包括:经由第二接口,根据第二指针指向的位置向第一存储区域写入存储单元索引。
[0013] 在一些实施例中,空间管理请求包括空间分配请求,空间管理模块包括空间分配模块,空间分配模块被配置为:响应于与空间分配请求相关的存储单元索引已分配完毕,反馈完成信号;响应于与空间分配请求相关的存储单元索引未分配完毕且本地索引存储器非空,从本地索引存储器读取一个或多个存储单元索引;响应于与空间分配请求相关的存储单元索引未分配完毕且本地索引存储器为空,等待直至本地索引存储器非空。
[0014] 在一些实施例中,空间分配模块包括至少两个子分配模块,每个子分配模块与预设大小集合中的一种预设大小相对应,并被配置为接收与相应预设大小对应的子分配请求。
[0015] 在一些实施例中,空间管理请求包括空间回收请求,空间管理模块包括空间回收模块,空间回收模块被配置为:响应于与空间回收请求相关的存储单元索引已回收完毕,反馈完成信号;响应于与空间回收请求相关的存储单元索引未回收完毕且本地索引存储器非满,向本地索引存储器写入一个或多个存储单元索引;响应于与空间回收请求相关的存储单元索引未回收完毕且本地索引存储器为满,等待直至本地索引存储器非满。
[0016] 在一些实施例中,空间回收模块包括至少两个子回收模块,每个子回收模块与预设大小集合中的一种预设大小相对应,并被配置为接收与相应预设大小对应的子回收请求。
[0017] 在一些实施例中,本地索引存储器包括至少两个子索引存储器,每个子索引存储器与预设大小集合中的一种预设大小相对应,并被配置为:经由第二接口从第一存储区域的一子区域读取存储单元索引,以及经由第二接口向第一存储区域的该子区域写入存储单元索引。
[0018] 在一些实施例中,上述装置还包括请求分类模块,请求分类模块被配置为:响应于接收到空间分配请求,根据空间分配请求所请求分配的空间的大小,将空间分配请求拆分为一个或多个子分配请求,其中,每个子分配请求与预设大小集合中的一种预设大小相对应;响应于接收到空间回收请求,根据空间回收请求所请求回收的空间对应的存储单元索引,将空间回收请求拆分为一个或多个子回收请求,其中,每个子回收请求与所述预设大小集合中的一种预设大小相对应。
[0019] 在一些实施例中,上述装置还包括:初始化模块,被配置为:在装置上电后,经由第二接口在存储空间的第一存储区域和/或所述本地索引存储器中写入多个存储单元索引。
[0020] 在一些实施例中,空间管理模块包括索引生成模块,索引生成模块被配置为根据预设规则生成存储单元索引,以及其中,空间管理模块被配置为:响应于空间管理请求为空间分配请求,并且存储单元索引的已分配数量低于阈值数量,令索引生成模块生成一个或多个存储单元索引,存储单元索引的已分配数量为已分配至外部请求源的存储单元索引的累计数量。
[0021] 根据本公开的另一方面,提供了一种计算设备,包括根据前述方面所描述的用于管理存储空间的装置。
[0022] 根据本公开的又一方面,提供了一种用于管理存储空间的方法,包括:接收来自外部请求源的空间管理请求;响应于本地索引存储器的剩余空间的大小满足第一条件,从存储空间的第一存储区域读取存储单元索引,其中,每个存储单元索引用于表征存储空间的第二存储区域中的一个具有预设大小的存储单元;响应于本地索引存储器的剩余空间的大小满足第二条件,向存储空间的第一存储区域写入存储单元索引;基于空间管理请求,管理本地索引存储器中的存储单元索引。
[0023] 根据本公开的又一方面,提供了一种芯片,包括根据前述方面的各种实施例所描述的用于管理存储空间的装置。
[0024] 由本公开提供的用于管理存储空间的装置可以接收来自外部请求源的空间管理请求,并基于空间管理请求管理本地索引存储器中的存储单元索引,例如分配本地索引存储器中的存储单元索引,或将存储单元索引回收至本地索引存储器,以完成对应的存储单元的分配或回收,其中,本地索引存储器可以在剩余空间满足预设条件时从存储器读取存储单元索引或向存储器写入存储单元索引,以保持本地索引存储器中的存储单元索引数量或剩余空间量在预设范围内浮动,以便满足正常空间管理的需求。由此,可以高效地经由硬件装置基于诸如CPU、MCU等的请求源的请求来管理存储器中存储空间的分配与回收,可以减少软件方式所带来的路径长、延时高等问题,从而有助于提升存储空间的管理效率,进而有助于提升整个计算系统的运行速度。同时,借助单独的硬件装置实施内存管理可以释放处理器、控制器或微控制器的资源,有助于实现其资源的优化配置,从而有助于提升计算系统的整体性能。此外,本公开提供的用于管理存储空间的装置在本地缓存部分存储单元索引,使得涉及少量存储单元索引的管理可以仅通过与本地索引存储器的交互来实现,而无需访问外部的存储器,这有助于缩短存储单元索引的读写路径,降低读写时间,并允许仅在必要时访问存储器,从而可以减少装置与存储器的频繁交互,减少对存储器的读写访问频次,降低对存储器的读写带宽的占用时长,进而有助于减少空间管理过程中的路径延迟,并有助于提升空间管理效率和整体系统运行效率。
[0025] 根据在下文中所描述的实施例,本公开的这些和其它方面将是清楚明白的,并且将参考在下文中所描述的实施例而被阐明。

附图说明

[0026] 在下面结合附图对于示例性实施例的描述中,本公开的更多细节、特征和优点被公开,在附图中:
[0027] 图1示例性示出了相关技术中的内存管理架构的示意图;
[0028] 图2A、2B、2C、2D、2E示意性示出了根据本公开的一些实施例的存储空间管理系统的示例框图;
[0029] 图3A和图3B示意性示出了根据本公开的一些实施例的存储空间的划分方案;
[0030] 图4示意性示出了借助第一指针和第二指针管理存储单元索引的示例方案;
[0031] 图5示意性示出了根据本公开的一些实施例的本地索引存储器的示例架构;
[0032] 图6示意性示出了根据本公开的一些实施例的空间分配模块的示例状态机;
[0033] 图7示意性示出了根据本公开的一些实施例的空间回收模块的示例状态机;
[0034] 图8示意性示出了根据本公开的一些实施例的请求分类模块的示例框图;
[0035] 图9示意性示出了根据本公开的一些实施例的空间分配模块的内部结构的另一示例框图;
[0036] 图10示意性示出了根据本公开的一些实施例的计算设备的示例框图;
[0037] 图11示意性示出了根据本公开的一些实施例的用于管理存储空间的方法的示例流程图。

具体实施方式

[0038] 下面将结合本公开实施例中的附图,对本公开实施例中的技术方案进行清楚、完整地描述。应理解,所描述的实施例仅仅是本公开的一部分实施例,而不是全部的实施例。基于本公开中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本公开保护的范围。
[0039] 图1示例性示出了相关技术中的内存管理架构100的示意图。如图1所示,在相关技术中,内存110可以直接由处理器120或类似结构经由总线130管理。示例性地,当处理器120需要向内存空间写入数据时,可以根据内部存储的内存空间管理策略确定可使用的空间,进而发出向相应内存空间写入数据的指令,该指令可以由硬件处理,并经由总线130发送至内存110,以实现数据写入。数据读取、删除等过程可以类似地实施。然而,申请人发现,通过这类方式执行内存管理存在以下缺点:第一,需占用处理器(或控制器、微控制器等)的资源来执行空间分配、回收等操作,不利于其资源的高效利用;第二,通过软件实施内存空间的分配和回收,需要硬件对指令进行处理,进而通过总线来在内存空间中进行读写操作,存在路径长、延时高、结构复杂等特点;第三,通过软件方式管理内存难以实现空间回收与空间分配的并行操作,限制了操作效率的提升;等等。
[0040] 基于以上考虑,申请人提出了一种新的通过硬件电路实现内存管理的方案,其有助于解决或缓解上述各种问题。本公开实施例,用于管理存储空间的装置无需频繁访问存储器,以读写存储单元索引,能够减少占用存储器的读写带宽,并且无需耗费大量时间对存储器进行读写访问,能够有效提升空间管理效率以及整体系统性能。
[0041] 图2A示意性示出了根据本公开的一些实施例的存储空间管理系统200A的示例框图。该存储空间管理系统200包括用于管理存储空间的装置210,其可以接收来自外部请求源220的空间管理请求,并对所接收的空间管理请求进行处理,以管理存储器230中的存储空间。示例性地,存储器230可以是各种用作内存的存储器,例如双倍速率(Double Data Rate,DDR)同步动态随机存储器等,或者也可以是其他类型的存储器。示例性地,外部请求源220可以是任何可以发起空间管理请求的设备,例如CPU、GPU、MCU等。此外,虽然在本公开的附图中仅示出了一个外部请求源,但是,可以根据具体应用需求,使用本公开的实施例所提供的装置210来接收并处理来自多个外部请求源的空间管理请求。
[0042] 如图2A所示,用于管理存储空间的装置210可以包括第一接口211、第二接口212、本地索引存储器213和空间管理模块214。第一接口211可以与外部请求源220相连接,例如通过专用线路或公用线路(比如总线)相连接,并用于实现外部请求源220与装置210之间的通信,例如通过握手方式实现数据通信。第一接口211可以被配置为接收来自外部请求源220的空间管理请求,并可以被配置为将来自空间管理模块的管理结果反馈至外部请求源
220。空间管理请求可以为空间分配请求或空间回收请求,管理结果可以为例如指示所分配空间的存储单元索引、空间分配失败、空间回收成功等的信息。第二接口212可以被配置为与存储器230相连接,并用于实现存储器230与装置210之间的通信,例如可以将来自装置
210的读取或写入请求发送至存储器230、接收来自存储器230的读取数据、接收来自存储器
230的指示写入结果的信息等。
[0043] 在本公开中,空间管理可以包括空间分配和空间回收两个方面,空间分配可以借由存储单元索引的分配来实施,空间回收可以借由存储单元索引的回收来实施。进一步地,存储单元索引的分配可以理解为由空间分配模块从本地索引生成模块或存储器获取存储单元索引并反馈至外部请求源的过程,而存储单元索引的回收可以理解为由空间回收模块将与来自外部请求源的空间回收请求所请求回收的空间相对应的存储单元索引写入存储器的过程。外部请求源可以通过空间分配请求来发起空间分配,以及通过空间回收请求来发起空间回收。空间分配请求可以指用于请求分配诸如存储器230中的一定大小的空间以供使用的请求,空间回收请求(或称为空间释放请求)可以指用于请求回收(或请求释放)诸如存储器230中的使用完毕的空间的请求。
[0044] 本地索引存储器213可以被配置为:响应于本地索引存储器213的剩余空间的大小满足第一条件,经由第二接口212从存储器230的存储空间的第一存储区域读取存储单元索引,以及,响应于本地索引存储器213的剩余空间的大小满足第二条件,经由第二接口212向存储器230的存储空间的第一存储区域写入存储单元索引。每个存储单元索引可以用于表征存储空间的第二存储区域中的一个具有预设大小的存储单元。可选地,本地索引存储器213可以是FIFO(First in first out,先进先出)或其他类型的存储器。本地索引存储器
213的占用空间可以指其当前因存储存储单元索引所占用的空间,剩余空间可以指用于容纳存储单元索引的空间中的当前未被存储单元索引占用的空间。示例性地,本地索引存储器213的剩余空间或占用空间的大小可以通过其实际大小(比如以字节、千字节等为单位)或以可容纳存储单元索引的数量来表示,或者也可以以其他方式来表示。示例性地,假设本地索引存储器213总共可容纳218个存储单元索引,当前存储了100个存储单元索引,则其占用空间可以记为100,剩余空间可以记为118。
[0045] 可选地,第一条件及第二条件可以是固定的,可以是可由用户配置的,或者也可以是由装置根据预设规则自动确定的。示例性地,第一条件可以通过如下方式中的至少一种来限定:剩余空间大于或等于某个值、剩余空间占总空间的比例大于或等于某个值、剩余空间大于占用空间(或占用空间与某个值的和、积等)等等。可选地,剩余空间是否满足第一条件也可以借助总空间与剩余空间的差值所满足的条件来判断,即,也可以通过占用空间所满足的条件来判断。例如,假设总空间为218,第一条件为剩余空间大于或等于118,则也可以通过占用空间是否小于100来判断剩余空间是否满足第一条件。以及,示例性地,第二条件可以通过类似方式来限定,并且第一条件的限定方式与第二条件的限定方式可以相同或不同。
[0046] 可选地,在第一条件被满足时从存储器读取的存储单元索引的数量以及在第二条件被满足时向存储器写入的存储单元索引的数量可以是固定的,可以是可由用户配置,或者也可以是由装置根据预设规则自动确定的。示例性地,所读取的存储单元索引的数量可以通过如下方式中的至少一种来确定:固定的预设数值、本地索引存储器当前存储的存储单元索引数量与阈值数量的差值、剩余空间或占用空间与某值的积或和等等。以及,示例性地,所写入的存储单元索引的数量可以通过类似方式来确定,并且所读取的存储单元索引的数量和所写入的存储单元索引的数量的确定方式可以相同或不同。
[0047] 示例性地,经由第二接口212从存储器230的存储空间的第一存储区域读取存储单元索引可以通过对存储器230发起读请求并接收其反馈数据来实施,经由第二接口212向存储器230的存储空间的第一存储区域写入存储单元索引可以通过对存储器230发起写请求并向其发送数据来实施。
[0048] 空间管理模块214可以被配置为:基于空间管理请求,管理本地索引存储器213中的存储单元索引。示例性地,空间管理模块214可以基于空间管理请求,从本地索引存储器213读取存储单元索引或向其写入存储单元索引,以完成对存储器230中的相应存储单元的分配和回收。
[0049] 示例性地,存储空间管理装置210可以被实现为各种类型的硬件电路,例如形成为集成电路、封装为芯片结构等,从而可以根据需求而被使用,例如被焊接到电路板的相应引脚处或插入到电路板的相应插口中等。
[0050] 通过装置210,可以通过硬件方式对存储器230(例如,诸如DDR的内存储器)的存储空间进行管理,可以减少软件管理方式的弊端,并可以提供一种更便捷的管理方式,有利于提升空间管理效率,节省CPU或MCU等主控制单元的处理资源,进而提升整个计算系统的操作效率,优化整个计算系统的资源配置。同时,通过存储空间管理装置210,允许在本地存储部分存储单元索引,仅在本地存储的存储单元索引过多或不足时通过访问存储器230来向其写入或从其读取存储单元索引。由此,在接收到空间管理请求时,可以仅通过本地读写存储单元索引的操作来管理存储单元索引,而无需频繁访问存储器230。这可以减少装置与存储器的频繁交互,减少对存储器的读写访问频次,降低对存储器的读写带宽的占用时长,并从而有助于减少空间管理过程中的路径延迟,并有助于提升空间管理效率和整体系统运行效率。
[0051] 根据本公开的一些实施例,本地索引存储器213可以借助指针来从存储器的特定区域读取存储单元索引或向该特定区域写入存储单元索引。示意性地,图3A、图3B及图4示出了根据本公开实施例的存储空间的划分方案以及基于指针的存储单元索引管理方案。
[0052] 如图3A所示,存储空间300可以包括第一存储区域310和第二存储区域320。可选地,存储空间300还可以包括留作他用的其他存储区域330。第二存储区域320可以被划分为多个存储单元,每个存储单元可以具有预设大小,该预设大小可以根据具体需求设置,例如被设置为4 KB,或者被设置为2 KB、8 KB、16 KB、32 KB等。第一存储区域310可以被写入多个存储单元索引,每个存储单元索引可以表征第二存储区域320中的一个存储单元。例如,当第二存储区域的大小为8 GB时,假设以4 KB粒度将其划分为多个存储单元,则共可划分为2097152个存储单元,从而共需2097152个存储单元索引。每个存储单元索引可以以4个字节(byte)存储在第一存储区域中,则在上述示例中,第一存储区域的大小可以为8 MB。
[0053] 在一些实施例中,第二存储区域320可以被划分为多个存储单元,其中,每个存储单元具有预设大小集合中的一种预设大小。预设大小集合可以根据具体需求设置,例如可以被设置为包括2 MB、512 KB、128 KB、64 KB、16 KB、4 KB中的一个或多个,或者也可以包括其他预设大小。例如,当第二存储区域的大小为8 GB时,假设以2 MB粒度划分4 Gb存储空间、以512 KB粒度划分2 GB存储空间、以128 KB粒度划分1 GB存储空间、以64 KB粒度划分512 MB存储空间、以16 KB粒度划分256 MB存储空间、以4KB粒度划分256 MB存储空间,则共可划分为2048个2 MB存储单元、4096个512 KB存储单元、8192个128 KB存储单元、8192个64 KB存储单元、16384个16 KB存储单元、65536个4 KB存储单元。若为每个存储单元分配一个4字节(byte)的存储单元索引,则2 MB存储单元对应的存储单元索引需8 KB进行存储、512 KB存储单元对应的存储单元索引需16 KB进行存储、8192个128 KB存储单元对应的存储单元索引需32 KB进行存储、64 KB存储单元对应的存储单元索引需32 KB进行存储、16 KB存储单元对应的存储单元索引需64 KB进行存储、4 KB存储单元对应的存储单元索引需256 KB进行存储。由此,在上述示例中,第一存储区域的大小可以为408 KB。在这种实施例中,如图3B所示,第一存储区域310可以被划分为多个子区域311、312等,每个子区域可以仅写入与相同预设大小对应的存储单元索引。以前文所述的示例为例,可以将第一存储区域划分为6个子区域,分别存储2 MB、512 KB、128 KB、64 KB、16 KB、4 KB的存储单元所对应的存储单元索引。此外,在这种实施例中,为了标识对应于不同预设大小的存储单元索引,可以在各存储单元索引中包含指示预设大小的标识符。例如,可以将存储单元索引划分为标识符部分和单元索引部分,标识符部分可以用于存放指示预设大小的标识符,单元索引部分可以用于存放具有相应预设大小的存储单元的索引值。示例性地,在上文描述的具有2 MB、
512 KB、128 KB、64 KB、16 KB、4 KB这6种预设大小、并以4个字节表示存储单元索引的示例中,针对每个存储单元索引,可以以高3位表示预设大小,例如,可以以000表示4 KB、以001表示16 KB、以010表示64 KB、以011表示128 KB、以100表示512 KB、以101表示2 MB,其余29位则可以表示具体的索引值。
[0054] 示例性地,前述装置210可以包括索引配置寄存器,其可以用于基于用户输入来配置上述一种或多种存储单元索引的数量和/或所对应存储单元的大小,例如,可以基于用户输入存储一种或多种存储单元索引的配置数量,并在装置上电后下发至装置210,比如下发至其中的本地索引存储器213和/或空间管理模块214,以允许根据具体需求来灵活调整存储空间的划分方式。
[0055] 基于上述空间划分方案,假设不存在本地索引存储器213,以涉及2 MB存储空间的管理的请求为例,在上文所描述的8 GB空间全部被划分为4 KB存储单元的示例中,则共需读/写512个存储单元索引;在上文所描述的8 GB空间被划分为2 MB、512 KB、128 KB、64 KB、16 KB、4 KB六种大小的存储单元的示例中,则可能共需读/写1个对应于2 MB存储单元的存储单元索引。进一步示例性地,在存储单元索引的读写通过总线完成的情况下,针对前者,若总线突发长度为128,则共需触发4次读/写请求;针对后者,总线突发长度可设置为1,并共需触发1次读/写请求。这种读/写过程一方面会占用存储器的读写带宽,另一方面需要耗费较多时间。虽然相较而言,将存储空间划分为多种预设大小的存储单元可以有助于降低读写次数及时间,但仍无法完全解决该问题,并且,当所涉及的存储单元索引数量较大时,读写次数及时间可能仍会较高。相比之下,使用本公开实施例所描述的用于管理存储空间的装置,例如图2所示的装置210,可以由本地索引存储器213存储部分存储单元索引以供分配/回收操作,能够有效减少对存储器的频繁访问,并缩短存储单元索引管理过程中的读写路径,从而提升空间管理效率,提升系统整体性能。
[0056] 示例性地,图4示意性示出了本地索引存储器213借助一组第一指针和第二指针在第一存储区域或其子区域中读取和写入存储单元索引的示例方案400。如子图A所示,当装置上电后,第一指针和第二指针可以被初始化为指向区域410中的相同位置,例如均指向区域410的最小地址,或者也可以指向其他位置。如子图B所示,当本地索引存储器向存储器请求读取存储单元索引时,来自区域410的一定数量的存储单元索引可以被读取,此时第一指针将向下偏移,例如指向下一个可被读取的存储单元索引的位置。如子图C所示,当本地索引存储器向存储器请求写入存储单元索引时,相应的存储单元索引将被写入区域410,此时第二指针将向下偏移,例如指向下一个可写入存储单元索引的位置。如子图D所示,当第一指针和/或第二指针偏移到区域410的最大地址后,将绕回到起始位置。以上描述仅仅是示例性的,第一指针和第二指针也可以以其他方式随存储单元索引的读取和写入而偏移。应理解,图4所示的区域410可以为图3A所示的区域310,或者也可以为图3B所示的区域310的子区域311、312等。此外,示例性地,装置210还可以包括地址配置寄存器,其可以用于基于用户输入配置上述第一存储区域310或其各子区域311、312等的起始地址和终止地址(比如上文所述的最小地址和最大地址),例如,基于用户输入存储起始地址和/或终止地址,并在装置上电后向装置210(比如向其中的本地索引存储器213)下发所存储的起始地址和/或终止地址,使得第一指针和第二指针可以在相应区域的起始地址和终止地址之间移动,从而允许根据具体需求灵活配置各起始地址和终止地址。
[0057] 在通过指针读写存储单元索引的实施例中,本地索引存储器213可以被配置为维护第一指针和第二指针,例如根据参考图4所描述的实施例来维护第一指针和第二指针。由此,可以通过如下方式读取存储单元索引:经由第二接口212,根据第一指针指向的位置从存储器230中的第一存储区域读取存储单元索引;以及可以通过如下方式写入存储单元索引:经由第二接口212,根据第二指针指向的位置向存储器230中的第一存储区域写入存储单元索引。
[0058] 在一些实施例中,本地索引存储器213从存储器230读取存储单元索引的触发条件(即前述第一条件)可以为:本地索引存储器213的剩余空间大于第一阈值。该触发条件可以等价于:本地索引存储器213的占用空间小于或等于总空间与第一阈值的差,总空间可以理解为本地索引存储器213中用于容纳存储单元索引的空间总量。本地索引存储器213向存储器230写入存储单元索引的触发条件(即前述第二条件)可以为:本地索引存储器213的剩余空间小于第二阈值。该触发条件可以等价于:本地索引存储器213的占用空间大于或等于总空间与第二阈值的差。在一些实施例中,在第一条件满足时,本地索引存储器213从存储器230读取的存储单元索引的数量可以根据剩余空间的大小来确定,例如确定为剩余空间与某预设值的乘积,该预设值可以为0至1之间的值;类似地,在第二条件满足时,本地索引存储器213向存储器写入的存储单元索引的数量可以根据占用空间的大小来确定,例如确定为占用空间与某预设值的乘积,该预设值可以为0至1之间的值。
[0059] 示例性地,假设本地索引存储器213的总空间为至多可容纳128个存储单元索引,可以设定当剩余空间小于10时,发起对存储器230的写入流程,以将本地索引存储器213中的存储单元索引的2/3写入存储器230,以及可以设定当剩余空间大于118时,发起对存储器230的读取流程,以从存储器230读取数量为剩余空间的2/3的存储单元索引。应理解,以上第一阈值10、第二阈值118以及比值2/3仅仅是示例性地,可以根据实际应用需求来灵活设定。
[0060] 通过设定第一阈值和第二阈值,可以便捷地确定何时应向存储器写入存储单元索引以及何时应从存储器读取存储单元索引,从而将本地索引存储器中的存储单元索引的数量控制在一定范围内,以满足存储单元索引的分配和回收需求。通过将写入存储单元数量设定为与本地存储器中的存储单元索引数量成比例,可以方便地确定应写入存储器的存储单元的数量,并快速将本地存储器中的存储单元索引数量调节至所需范围内;类似地,通过将读取存储单元数量设定为与本地存储器中的剩余空间成比例,可以方便地确定应从存储器读取的存储单元的数量,并快速将本地存储器中的存储单元索引数量调节至所需范围内。
[0061] 示意性地,图5示出了根据本公开的一些实施例的本地索引存储器213的示例架构。如图5所示,本地索引存储器213存在两种写入场景,即:基于空间回收请求的回收写入,当本地索引存储器213的剩余空间满足第一条件并向存储器发起针对存储单元索引的读取请求时的存储器写入;以及,本地索引存储器213存在两种读出场景,即:基于空间分配请求的分配读出,当本地索引存储器213的剩余空间满足第二条件并向存储器发起针对存储单元索引的写入请求时的存储器读出。可选地,当上述回收写入与存储器写入冲突时,可以优先回收写入;当上述分配读出和存储器读出冲突时,可以优先分配读出。通过优先回收写入和分配读出,可以优先空间管理操作,并进一步降低针对存储器的读写频率。
[0062] 由此,示例性地,上述响应于本地索引存储器的剩余空间的大小满足第一条件,经由第二接口从存储空间的第一存储区域读取存储单元索引可以包括:当本地索引存储器的剩余空间大于第一阈值且未接收到来自空间管理模块的索引写入请求时,经由第二接口从存储空间的第一存储区域读取第一预设数量的存储单元索引。以及,其还可以包括:当本地索引存储器的剩余空间大于第一阈值时,响应于接收到来自空间管理模块的索引写入请求,优先写入与索引写入请求相关的存储单元索引。可以理解,当本地索引存储器的剩余空间大于第一阈值但接收到来自空间管理模块的索引写入请求时,若该索引写入请求被执行,则本地索引存储器的剩余空间可能不再大于第一阈值,也即可能无需再执行从存储器写入存储单元索引的操作;而若优先从存储器读取存储单元并写入本地索引存储器,则可能导致,当后续与索引写入请求相关的存储单元索引被写入后,本地索引存储器的剩余空间将低于第二阈值,从而又需向存储器写入存储单元索引。由此,在两者发生冲突时,优先写入与索引写入请求相关的存储单元索引有助于降低与存储器的交互频次,减少从存储器读取或向其写入存储单元索引的次数和索引量。进一步地,本地索引存储器的剩余空间大于第一阈值这一条件可以理解为本地索引存储器的当前剩余空间大于第一阈值且当前不存在潜在的使其剩余空间减小的因素。
[0063] 类似地,示例性地,上述响应于本地索引存储器的剩余空间的大小满足第二条件,经由第二接口向存储空间的第一存储区域写入存储单元索引可以包括:当本地索引存储器的剩余空间小于第二阈值且未接收到来自空间管理模块的索引读出请求时,经由第二接口向存储空间的第一存储区域写入第二预设数量的存储单元索引。以及,其还可以包括:当本地索引存储器的剩余空间小于第二阈值时,响应于接收到来自空间管理模块的索引读出请求,优先读出与索引读出请求相关的存储单元索引。可以理解,当本地索引存储器的剩余空间小于第二阈值但接收到来自空间管理模块的索引读出请求时,若该索引读出请求被执行,则本地索引存储器的剩余空间可能不再小于第二阈值,也即可能无需再执行向存储器写入存储单元索引的操作;而若优先向存储器写入存储单元,则可能导致,当后续与索引读出请求相关的存储单元索引被读出后,本地索引存储器的剩余空间将高于第一阈值,从而又需从存储器读取存储单元索引。由此,在两者发生冲突时,优先读出与索引读出请求相关的存储单元索引有助于降低与存储器的交互频次,减少从存储器读取或向其写入存储单元索引的次数和索引量。进一步地,本地索引存储器的剩余空间小于第二阈值这一条件可以理解为本地索引存储器的当前剩余空间小于第二阈值且当前不存在潜在的使其剩余空间增大的因素。
[0064] 图2B示意性示出了根据本公开的一些实施例的存储空间管理系统200B的示例框图。如图所示,空间管理模块214可以进一步包括空间分配模块2141和空间回收模块2142。
[0065] 更具体地,在一些实施例中,如前文所提及的,空间管理请求可以包括空间分配请求,相应地,空间管理模块214可以包括空间分配模块2141。空间分配模块2141可以被配置为:响应于与空间分配请求相关的存储单元索引已分配完毕,反馈完成信号;响应于与空间分配请求相关的存储单元索引未分配完毕且本地索引存储器非空,从本地索引存储器213读取一个或多个存储单元索引;响应于与空间分配请求相关的存储单元索引未分配完毕且本地索引存储器213为空,等待直至本地索引存储器213非空。通过上述过程,可以实现基于空间分配请求从本地索引存储器213读取存储单元索引以完成相应存储单元的分配的操作。示例性地,空间分配请求可以请求一定量的空间,其可以对应于若干个具有预设大小的存储单元,即对应于若干个存储单元索引。与空间分配请求相关的存储单元索引分配完毕可以指已从本地索引存储器获取并向外部请求源反馈该若干个存储单元索引。可选地,向外部请求源反馈存储单元索引的操作可以与反馈完成信号一同执行,或者也可以分开执行。
[0066] 示例性地,图6示意性示出了根据本公开的一些实施例的空间分配模块2141的示例状态机600。
[0067] 如图6所示,当未接收到空间分配请求时,空间分配模块可以处于IDLE状态,即空闲状态。当接收到空间分配请求时,可以判断该空间分配请求所请求分配的存储单元索引是否已完成分配,若是,则向上级电路模块反馈完成(DONE)信号,并跳转回IDLE状态,若否,则跳转至判断本地索引存储器是否为空。可选地,在图6所示的示例中,本地索引存储器被示出为FIFO类型的存储器。若FIFO为空,则跳转至等待状态,若FIFO非空,则跳转至从FIFO读取存储单元索引的状态。在等待状态下,可以等待预设时间量,随后跳转至判断分配是否完成以及判断FIFO是否为空。可选地,用于等待状态的预设时间量可以是固定值、可配置值或者可自适应调整的值。例如,该预设时间量可以根据本地索引存储器的总空间、本地索引存储器一次性从存储器读取存储单元索引的数量、存储空间管理装置与存储器之间的数据传输延时等中的一项或多项来确定。比如,在前述示例中,若本地索引存储器的容量为128个存储单元索引,其一次性从存储器读取的存储单元索引的数量为剩余空间的2/3,则上述预设时间量可以大致确定为128*(2/3)+数据传输延时(例如总线延时)。在从FIFO读取存储单元索引的状态下,可以从本地索引存储器(即该示例中的FIFO)读取存储单元索引。示例性地,每次可以读取一个存储单元索引并进行计数,随后跳转判断分配是否完成以及FIFO是否为空,直至所需数量的存储单元索引读取完毕。
[0068] 在一些实施例中,如前文所提及的,空间管理请求可以包括空间回收请求,相应地,空间管理模块214可以包括空间回收模块2142。空间回收模块2142可以被配置为:响应于与空间回收请求相关的存储单元索引已回收完毕,反馈完成信号;响应于与空间回收请求相关的存储单元索引未回收完毕且本地索引存储器非满,向本地索引存储器写入一个或多个存储单元索引;响应于与空间回收请求相关的存储单元索引未回收完毕且本地索引存储器为满,等待直至本地索引存储器非满。通过上述过程,可以实现基于空间回收请求向本地索引存储器213写入存储单元索引以完成相应存储单元的回收的操作。示例性地,空间回收请求可以请求回收部分空间,其可以对应于若干个具有预设大小的存储单元,即对应于若干个存储单元索引。与空间回收请求相关的存储单元索引回收完毕可以指已向本地索引存储器写入外部请求源所请求回收的该若干个存储单元索引。可选地,在存储单元索引写入完毕后,可以向外部请求源反馈完成信号以指示回收完毕。
[0069] 示例性地,图7示意性示出了根据本公开的一些实施例的空间回收模块2142的示例状态机700。
[0070] 如图7所示,当未接收到空间回收请求时,空间回收模块可以处于IDLE状态,即空闲状态。当接收到空间回收请求时,可以判断该空间回收请求所请求回收的存储单元索引是否已完成回收,若是,则向上级电路模块反馈完成(DONE)信号,并跳转回IDLE状态,若否,则跳转至判断本地索引存储器是否为满。可选地,在图7所示的示例中,本地索引存储器被示出为FIFO类型的存储器。若FIFO为满,则跳转至等待状态,若FIFO非满,则跳转至向FIFO写入存储单元索引的状态。在等待状态下,可以等待预设时间量,随后跳转至判断回收是否完成以及判断FIFO是否为满。可选地,用于等待状态的预设时间量可以是固定值、可配置值或者可自适应调整的值。例如,该预设时间量可以根据本地索引存储器的总空间、本地索引存储器一次性向存储器写入存储单元索引的数量、存储空间管理装置与存储器之间的数据传输延时等中的一项或多项来确定。比如,在前述示例中,若本地索引存储器的容量为128个存储单元索引,其一次性向存储器写入的存储单元索引的数量为剩余空间的2/3,则上述预设时间量可以大致确定为128*(2/3)+数据传输延时(例如总线延时)。在向FIFO写入存储单元索引的状态下,可以向本地索引存储器(即该示例中的FIFO)写入存储单元索引。示例性地,每次可以写入一个存储单元索引并进行计数,随后跳转判断回收是否完成以及FIFO是否为满,直至所有存储单元索引写入完毕。
[0071] 2C示意性示出了根据本公开的一些实施例的存储空间管理系统200C的示例框图。如图所示,相较于图2A、2B所示的存储空间管理系统200A、200B,存储空间管理系统200C还可以包括请求分类模块215、总线216、初始化模块217中的一个或多个。
[0072] 示例性地,如图8所示,请求分类模块215可以设置有第一队列2151和第二队列2152,并被配置为:接收空间管理请求,当空间管理请求为空间分配请求时,将其存储至第一队列2151,以及,当空间管理请求为空间回收请求时,将其存储至第二队列2152。由此,可以对来自外部请求源的空间管理请求进行分类存储,使得空间分配请求和空间回收请求可以同时被传递至后级模块,例如传递至前述空间分配模块2141和空间回收模块2142,从而便利于对空间分配请求和空间回收请求进行并行处理。此外,第一队列2151和第二队列
2152可以对所接收的空间分配请求和空间回收请求进行存储,如此,当外部请求源发起多次请求时,可以减少对外部请求源的反压,提高系统效率。可选地,第一队列2151和第二队列2152可以采取诸如FIFO的存储结构。由于FIFO存储空间的有限性,可以为第一队列2151和第二队列2152设置预满门限。当第一队列2151中所存储的空间分配请求的数量达到相应预满门限(或被称为第一阈值)时,第一队列2151可以进行预满反压,可以不再接收来自外部请求源的空间分配请求;当第二队列2152中所存储的空间回收请求的数量达到相应预满门限(或被称为第二阈值)时,第二队列2152可以进行预满反压,可以不再接收来自外部请求源的空间回收请求。通过反压机制,可以防止请求分类模块215接收到超出其存储能力的空间分配请求和/或空间回收请求,从而减低出现处理错误的概率。
[0073] 示例性地,总线216可以与本地索引存储器213以及其他模块(比如图2C所示的初始化模块217)相连接,以便这些模块可以经由装置210的第二接口(未示出)与存储器230进行数据交互。示例性地,总线216可以是标准的NOC(Network on Chip,片上网络)总线,或者也可以采用其他类型的总线来实现。此外,可选地,总线216还可以连接与本公开描述的各种模块相关或不相关的其他模块。
[0074] 示例性地,初始化模块217可以被配置为:在装置210上电后,经由其第二接口在存储器230的存储空间的第一存储区域和/或本地索引存储器中写入多个存储单元索引。示例性地,当硬件电路上电复位后,初始化模块217可以先将存储单元索引写入存储器230的第一存储区域中,如前文所述,该第一存储区域可以是预先指定的区域,并且其大小和位置可以根据需要进行调整;或者,示例性地,初始化模块217可以将部分存储单元索引写入本地索引存储器213中,并将其余存储单元索引写入存储器230的第一存储区域中;等等。当所有存储单元索引写入完毕后,装置210可以开始响应来自外部请求源220的空间管理请求,并且此后初始化模块217可以不再工作,直至硬件电路断电,并在下次上电后再次启动。示例性地,当初始化模块217完成上述索引写入操作后,可以向前级电路(例如前文描述的请求分类模块215或其他电路模块)发出信号,以告知前级电路可以开始接收空间管理请求。
[0075] 2D示意性示出了根据本公开的一些实施例的存储空间管理系统200D的示例框图。如图2D所示,相较于图2C所示的存储空间管理系统200C,在存储空间管理系统200D中,可以以索引生成模块218替代初始化模块217。
[0076] 示例性地,索引生成模块218可以被配置为根据预设规则生成存储单元索引。相应地,空间分配模块2141可以被配置为:响应于接收到空间分配请求,并且存储单元索引的已分配数量低于存储单元索引的阈值数量,令索引生成模块218生成一个或多个存储单元索引。以及,可选地,空间分配模块2142还可以被配置为:响应于存储单元索引的已分配数量与存储单元索引的待分配数量之和大于阈值数量,经由第二接口从存储器230的存储空间的第一存储区域读取至少一个存储单元索引。存储单元索引的待分配数量可以是基于所接收的空间分配请求所请求分配的空间的大小确定的,例如,假设存储空间被划分为4 KB的存储单元,且空间分配请求所请求分配的空间为64 KB,则待分配数量可以被确定为16。存储单元索引的阈值数量可以是默认值或可配置值,其可以小于或等于存储单元索引的总数量。存储单元索引的总数量与第二存储区域中的具有预设大小的存储单元的数量可以是相对应的,例如是相等的。存储单元索引的已分配数量可以理解为已分配至外部请求源220的存储单元索引的累计数量。比如,假设在装置上电后,累计接收到m个空间分配请求,并成功分配其中n个空间分配请求,则针对该n个空间分配请求所分配的存储单元索引的数量之和可以被视为存储单元索引的已分配数量。由此,可以允许在空间分配过程中,由本地索引生成模块根据预设规则逐步生成存储单元索引并直接用于分配,随后随着空间回收过程而逐步将所生成并分配的存储单元索引写入至存储器中存储空间的相应区域。相较于关于图2C所示的使用初始化模块217的实施例,使用索引生成模块218可以有效提升装置上电后的初始化速度,避免存储单元索引集中写入时对存储器写入带宽的独占,从而有助于提升存储空间管理系统的整体效率。
[0077] 2E示意性示出了根据本公开的一些实施例的存储空间管理系统200E的示例框图。如前文所提到的,存储器230中的存储空间可以被划分为具有不同预设大小的存储单元,从而可以存在对应于不同预设大小的存储单元索引。在这种实施例中,为了更便捷地管理对应于不同预设大小的存储单元索引,如图2E所示,本地索引存储器213可以包括至少两个子索引存储器213‑1至213‑N,N可以为大于零的整数,并可以等于预设大小集合中预设大小的数目。索引存储器213‑1至213‑N中的每个子索引存储器可以与预设大小集合中的一种预设大小相对应,并被配置为:经由第二接口212从存储器230中的存储空间的第一存储区域的一子区域读取存储单元索引,以及经由第二接口212向第一存储区域的该子区域写入存储单元索引。示例性地,在前文所述的存储空间被划分为2 MB、512 KB、128 KB、64 KB、16 KB、
4 KB六种预设大小的存储单元的示例中,可以设置六个子索引存储器213‑1至213‑6,分别对应于2 MB、512 KB、128 KB、64 KB、16 KB、4 KB的预设大小,并分别用于存储与相应预设大小对应的存储单元索引。
[0078] 在图2E所示的示例中,空间分配模块2141可以包括至少两个子分配模块2141‑1至2141‑N,每个子分配模块可以与预设大小集合中的一种预设大小相对应,并被配置为接收与相应预设大小对应的子分配请求。类似地,空间回收模块2142可以包括至少两个子回收模块2142‑1至2142‑N,每个子回收模块与预设大小集合中的一种预设大小相对应,并被配置为接收与相应预设大小对应的子回收请求。示例性地,每个子分配模块及每个子回收模块可以与对应于相同预设大小的子索引存储器交互,以从其读取存储单元索引或向其写入存储单用索引。对应于同一预设大小的子分配模块、子回收模块及子索引存储器的操作类似于前文所描述的空间分配模块、空间回收模块及本多索引存储器,在此不再赘述。
[0079] 在图2E所示的实施例中,可以设置类似图2C、2D所示的请求分类模块215和/或其他电路模块,其可以被配置为接收空间管理请求,将空间管理请求分类为空间分配请求和空间回收请求,以及对空间分配请求和空间回收请求进行预处理。示例性地,该预处理过程可以包括:响应于接收到空间分配请求,根据空间分配请求所请求分配的空间的大小,将空间分配请求拆分为一个或多个子分配请求,其中,每个子分配请求与预设大小集合中的一种预设大小相对应;响应于接收到空间回收请求,根据空间回收请求所请求回收的空间对应的存储单元索引,将空间回收请求拆分为一个或多个子回收请求,其中,每个子回收请求与所述预设大小集合中的一种预设大小相对应。拆分后的一个或多个子分配请求可以被传递至空间分配模块2141,并由相应的子分配模块处理;拆分后的一个或多个子回收请求可以被传递至空间回收模块2142,并由相应的子回收模块处理。
[0080] 示例性地,针对空间分配请求,上述请求分类模块215和/或其他电路模块可以接收空间分配请求,并基于预设大小集合中的预设大小对该空间分配请求所请求分配的空间进行拆分,使得该所请求分配的空间可以被拆分为一个或多个具有相同或不同预设大小的存储单元,从而将该空间分配请求拆分为一个或多个子分配请求,每个子分配请求可以用于请求分配一种预设大小的存储单元索引。可选地,若所接收的空间分配请求无法被完全拆分为预设大小集合中的预设大小的组合,可以向上级电路模块报错;若可以完全拆分,则拆分后的子分配请求可以被传递至空间分配模块2141并由各子分配模块处理,各子分配模块处理完成后可以反馈完成信号,当接收到来自所有子分配模块的完成信号后,该请求分类模块215和/或其他电路模块可以继续处理其他空间分配请求。示例性地,以前文描述的以2 MB、512 KB、128 KB、64 KB、16 KB、4 KB粒度划分存储空间的示例为例,可以判断空间分配请求所请求分配的空间是否满足A*2MB +B*512KB +C*128KB+ D*64KB +E*16KB+F*4KB的规则,其中A、B、C、D、E、F均为大于或等于零的整数。若满足,则可以认为该空间分配请求可完全拆分,若不满足,则可以认为该空间分配请求不可完全拆分。在不可完全拆分的情况下,可以上报指示出错的信息。在可完全拆分的情况下,A、B、C、D、E、F即代表了每种预设大小的存储单元的所需数量。可选地,在对空间分配请求进行拆分时,为了进一步降低所需读取的存储单元索引的数量,并提升读取效率,可以尽可能使拆分后的存储单元的数量被最小化。例如,在上述示例中,可以令A+B+C+D+E+F的值被最小化。
[0081] 示例性地,针对空间回收请求,空间回收请求中可以包含待回收的存储单元索引或可用于推导出待回收的存储单元索引的数据。由此,可以根据待回收的存储单元索引中指示预设大小的标识符或待回收的存储单元索引的所在数值范围等,确定各个待回收的存储单元索引对应的预设大小,并基于此将其划分为多个子回收请求,并传递至空间回收模块中的相应子回收模块处理。类似地,各子回收模块处理完成后可以反馈完成信号,当接收到来自所有子回收模块的完成信号后,该请求分类模块215和/或其他电路模块可以继续处理其他空间回收请求。
[0082] 为进一步便于理解,示意性地,根据上述存储空间被划分为多个预设大小的存储单元的实施例,图9示出了根据本公开的一些实施例的空间分配模块210的部分内部结构的一种示例框图。
[0083] 如图9所示,对应于同一预设大小的子分配模块、子回收模块、子索引存储器可以视为一组模块,其中,子分配模块接收相应预设大小的存储单元索引的分配请求,并基于该请求从子索引存储器读取存储单元索引,子回收末空接收相应预设大小的存储单元索引的回收请求,并基于该请求向子索引存储器写入存储单元索引,子索引存储器存储该相应预设大小的存储单元索引中的一部分,并根据前文所述的阈值机制在需要时经由总线216或以其他方式从存储器的第一存储区域的相应子区域读取存储单元索引或向其写入存储单元索引。由此,该组模块可以完成对相应预设大小的存储单元索引的管理。两组或更多组这种模块可以实现对多种预设大小的存储单元索引的管理,并进而在前级电路模块(诸如前文所描述的请求分类模块)的协调下完成对各种空间管理请求的处理。
[0084] 图10示意性示出了根据本公开的一些实施例的计算设备1000的示例框图。在本公开的一些实施例中,还提供了一种计算设备,其可以包括前文所描述的用于管理存储空间的装置,例如装置210A‑200E等。示意性地,图10示出了计算设备1000的示例框图。如图所示,计算设备1000可以包括用于管理存储空间的装置1010,其可以如前文各种实施例描述的那样执行存储空间管理功能。计算设备1000还可以包括处理器或控制器1020,其可以被实施为CPU、MCU或类似结构,并可以用于执行各种处理或控制操作。计算设备1000还可以包括存储器1030,其可以用于存储数据,例如处理器或控制器1020在执行应用程序时所需的各种程序数据或者应用程序执行过程中使用或产生的数据等。存储器1030例如被实现为单个存储器,或者也可以被实现为两个或更多个存储器的组合。例如,存储器1030可以包括一个或多个内存储器,比如用作内存的DDR存储器或者SDRAM存储器等。用于管理存储空间的装置1010、处理器/控制器1020以及存储器1030可以通过通信线路1040连接在一起,并实现彼此之间的数据传递。示例性地,通信线路1040可以为总线(诸如AXI总线等)或其他类型的通信线路,或者可以为它们的组合。
[0085] 本公开还提供了一种用于管理存储空间的方法,示意性地,图11根据本公开的一些实施例的用于管理存储空间的方法1100的示例流程图。
[0086] 如图11所示,在步骤1110,可以接收来自外部请求源的空间管理请求;在步骤1120,响应于本地索引存储器的剩余空间的大小满足第一条件,可以从存储空间的第一存储区域读取存储单元索引,其中,每个存储单元索引用于表征存储空间的第二存储区域中的一个具有预设大小的存储单元;在步骤1130,响应于本地索引存储器的剩余空间的大小满足第二条件,可以向存储空间的第一存储区域写入存储单元索引;在步骤1140,可以基于空间管理请求,管理本地索引存储器中的存储单元索引。
[0087] 方法1200可以具有与前述用于管理存储空间的装置相同或相似的实施例,并可以具有与之相同或相似的技术效果。为简洁起见,在此不再赘述。此外,应理解,图11虽然顺序示出步骤1110至1140,但这些步骤并非一定按照所示顺序执行,其中部分步骤可以并行执行或以与所示顺序不同的次序来执行。
[0088] 在本公开的一些实施例中,还提供了一种芯片,其可以包括前文各种实施例所描述的用于管理存储空间的装置。示例性地,该芯片可以通过总线或其他方式连接至诸如CPU、MCU等的请求源以及诸如DDR等的存储器,并基于前文描述的各种实施例来根据请求源的空间管理请求管理存储单元索引,进而实现对存储器中的存储空间的管理。可选地,除了上述用于管理存储空间的装置外,该芯片还可以包括实现其他功能的电路模块或装置。
[0089] 在本公开的描述中,术语“上”、“下”、“左”、“右”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本公开而不是要求本公开必须以特定的方位构造和操作,因此不能理解为对本公开的限制。
[0090] 在本说明书的描述中,参考术语“一个实施例”、“另一个实施例”等的描述意指结合该实施例描述的具体特征、结构、材料或者特点包含于本公开的至少一个实施例中。在本说明书中,对上述术语的示意性表述不必须针对的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。另外,需要说明的是,本说明书中,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。
[0091] 此外,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者多个该特征。在本公开的描述中,“多个”的含义是两个或两个以上,除非另有明确具体的限定。
[0092] 在本公开中,除非另有明确的规定和限定,术语“安装”、“相连”、“连接”、“固定”等术语应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或成一体;可以是机械连接,也可以是电连接,还可以是通信;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通或两个元件的相互作用关系。对于本领域的普通技术人员而言,可以根据具体情况理解上述术语在本公开中的具体含义。
[0093] 以上所述,仅为本公开的具体实施方式,但本公开的保护范围并不局限于此。任何熟悉本技术领域的技术人员在本公开揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本公开的保护范围之内。因此,本公开的保护范围应以权利要求的保护范围为准。