用于具有动态分区的共享高速缓存的方法和装置与流程

文档序号:12142040阅读:276来源:国知局
用于具有动态分区的共享高速缓存的方法和装置与流程

本申请与和本申请同时提交的、标题为“Method and Apparatus For Flexible Cache Partitioning By Sets And Ways Into Component Caches”的美国专利申请No.14/333,981相关,故以引用方式将其全部内容明确地并入本文。



背景技术:

高速缓存分区以服务计算系统中的多个客户端进程(“客户端”)具有一些利益。分区大小可以进行变化,以匹配客户端的性能需求。客户端体验稳健的性能,因为其专用缓存中的数据不会由于其他客户端的访问而被驱逐。可以关闭空闲分区以减少功耗。但是,由于完成当前高速缓存分区的方式所造成的限制,这些益处不如它们本可以实现的那么大。

当前高速缓存只能在高速缓存通路(way)上进行分区,这具有多种限制。高速缓存分区数量受到高速缓存通路数量的限制,并且向高速缓存分区添加关联性以减少高速缓存冲突减少高速缓存分区的可能的最大数量。根据该关联性来确定最小通路分区大小。例如,具有8路相连的8个通路的8MB高速缓存的最小分区是1MB。此外,更小的高速缓存分区可能由于碎片化而导致高速缓存空间的丢失。使用同一个示例,将512KB的数据存储在最小的1MB高速缓存分区中,将导致该高速缓存分区中512KB的空间未使用。根据关联性来确定最小通路分区电源崩溃粒度。在相同的示例中,可能发生电源崩溃的最小粒度是1MB高速缓存分区。崩溃粒度的大小影响功率节省/使用,特别是在共享系统高速缓存替代多个专用存储器的情况下,其中所述多个专用存储器可以独立地发生电源崩溃。

在移动片上系统(SoC)计算系统中面临的另一个问题是子系统所产生的不同访问模式。例如,像视频和图形之类的多媒体子系统具有更长的访问时间,并受益于更长的高速缓存线,而来自于应用中央处理单元(CPU)的访问是更随机的,并对于时延是敏感的,并且因此受益于更小的高速缓存线和更高的关联性。并不是所有的潜在访问模式,都能利用依赖于通路高速缓存分区的当前高速缓存分区进行更好地工作。常规的高速缓存分区为所有应用和子系统提供单一大小的高速缓存。该高速缓存分区的大小可能使某些访问模式比其他模式获益更多。另一个示例是在图像处理引擎和显示引擎之间看到的生产者对消费者访问模式,其可以受益于先进先出(FIFO)替换策略。但是,保持这些引擎之间的转换数据的高速缓存可能使该应用程序使用低效的替换策略。



技术实现要素:

各个方面的方法和装置提供用于对系统高速缓存进行动态分区的电路和方法,其可以包括:从客户端接收包括组件高速缓存标识符的系统高速缓存访问请求;从组件高速缓存配置表中,检索所述组件高速缓存配置表中与所述组件高速缓存标识符相关的集合移位特性和集合偏移特性;以及对系统高速缓存中,与由所述集合移位特性和所述集合偏移特性所指示的集合组内的组件高速缓存的通路组的至少一部分相关的位置进行激活。

在一个方面,对系统高速缓存中,与由所述集合移位特性和所述集合偏移特征指示的集合组中的组件高速缓存的通路组的至少一部分相关的所述位置进行激活包括:对系统高速缓存中的所述位置进行预留。在一个方面,对系统高速缓存中的所述位置进行预留包括:针对系统高速缓存中的所述位置,在组件高速缓存预留表中设置预留指示符。

一个方面方法还可以包括:更新所述预留指示符,以改变与所述通路组和所述集合组的更新部分相关的在系统高速缓存中预留的位置的数量。

一个方面方法还可以包括:利用对所述组件高速缓存的所述通路组的活动的所述部分的指示来更新组件高速缓存活动通路表,其中,预留系统高速缓存中的所述位置包括:对组件高速缓存活动通路表的所述指示的所述通路进行预留。

一个方面方法还可以包括:防止另一个客户端访问系统高速缓存中的所述位置。一个方面方法还可以包括:对系统高速缓存中的所述位置的至少一部分进行释放;对系统高速缓存中,与系统高速缓存中的所释放的位置相关的位置进行去激活。

在一个方面,所述组件高速缓存标识符可以是第一组件高速缓存标识符,所述组件高速缓存可以是第一组件高速缓存,所述方法还可以包括:装载针对至少所述第一组件高速缓存标识符的奖励向量,所述奖励向量被配置为指示与所述第一组件高速缓存标识符相关联的所述第一组件高速缓存扩展到其的一个或多个通路;接收针对至少所述第一组件高速缓存标识符的预留向量,所述预留向量被配置为指示被预留用于所述第一组件高速缓存的一个或多个通路;确定所述预留向量的一个或多个通路是否被第二组件高速缓存预留;响应于确定所述第二组件高速缓存已预留所述预留向量的一个或多个通路,对所述第二组件高速缓存进行去激活,以使由所述第二组件高速缓存预留的所述一个或多个通路未被预留;确定使用所述第一组件高速缓存是否包括使用所述奖励向量的所述通路中的一个或多个通路;响应于确定使用所述第一组件高速缓存的所述请求包括对所述奖励向量的所述通路中的一个或多个通路的所述使用,确定所述奖励向量的一个或多个通路是否被所述第二组件高速缓存预留;响应于确定所述第二组件高速缓存已预留所述奖励向量的一个或多个通路,对所述第二组件高速缓存进行去激活,以使由所述第二组件高速缓存预留的所述一个或多个通路未被预留;以及为所述第一组件高速缓存预留一个或多个未被预留的通路。

一个方面包括一种计算设备,该计算设备具有彼此之间通信连接的处理器、系统高速缓存和系统高速缓存控制器,其中,所述系统高速缓存控制器被配置为执行上面所描述的方面方法中的一个或多个的操作。

一个方面包括一种其上存储有处理器可执行软件指令的非暂时性处理器可读介质,所述处理器可执行软件指令使处理器和系统高速缓存控制器执行上面所描述的方面方法中的一个或多个方面方法的操作

一个方面包括一种计算设备,该计算设备具有用于执行上面所描述的方面方法中的一个或多个方面方法的功能的单元。

附图说明

被并入本文并且构成本说明书一部分的附图,描绘了本发明的示例性方面,并且连同上面给出的概括描述以及下面给出的详细描述一起来解释本发明的特征。

图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是示出适合于结合各个方面使用的示例性移动设备的组件框图。

具体实施方式

现在参照附图来详细地描述各个方面。只要有可能,就贯穿附图使用相同的附图标记来指代相同或者类似的部件。对于特定示例和实现方式的引用只是用于说明目的,而不是旨在限制本发明或者权利要求的保护范围。

本文可互换地使用术语“计算设备”和“移动设备”来指代下面中的任何一项或者全部:蜂窝电话、智能电话、个人或移动多媒体播放器、个人数据助理(PDA)、膝上型计算机、平板计算机、智能本、超级本、掌上计算机、无线电子邮件接收机、具备多媒体互联网功能的蜂窝电话、无线游戏控制器、包括存储器和可编程处理器的类似个人电子设备。虽然各个方面对于诸如智能电话之类的移动计算设备(其具有有限的能量资源)特别有用,但这些方面通常也可用于实现多个存储器设备和有限的能量预算的任何电子设备,其中在该情况下,减少存储器设备的功耗可以延长移动计算设备的电池工作时间。

典型地但不排外地,本文使用术语“片上系统”(SoC)指代一组相互连接的电子电路,其通常包括但不限于:硬件内核、存储器和通信接口。硬件内核可以包括各种不同类型的处理器,例如,通用处理器、中央处理单元(CPU)、数字信号处理器(DSP)、图形处理单元(GPU)、加速处理单元(APU)、辅助处理器、单核处理器和多核处理器。此外,硬件内核还可以体现其它硬件和硬件组合,例如,现场可编程门阵列(FPGA)、专用集成电路(ASCI)、其它可编程逻辑器件、分离门逻辑器件、晶体管逻辑器件、性能监控硬件、看门狗硬件和时间基准。可以对集成电路进行配置,使得集成电路的部件位于单片的半导体材料(例如,硅)上。

在一个方面,用于对高速缓存进行分区的方法实现了横跨高速缓存通路并且横跨高速缓存集合进行分区来创建组件高速缓存,这是比用于创建组件高速缓存的传统方法所可实现的更小的组件高速缓存。组件高速缓存配置表可以存储各个组件高速缓存的定义该组件高速缓存的特征的参数,其包括:针对集合的总数或者大小的参数、该组件高速缓存占据的集合的位置、该组件高速缓存占据的通路、该组件高速缓存是使用定制索引(例如,其根据虚拟地址来导出)来访问还是根据物理地址(索引模式)导出的集合索引来访问、以及用于组件高速缓存的替换策略。组件高速缓存配置表可以随着客户端请求高速缓存访问进行动态地填充,或者组件高速缓存配置表可以在启动时间进行填充,其定义组件高速缓存的数量,并在运行时保持静态。每个组件高速缓存被给予组件高速缓存标识符,该组件高速缓存标识符与组件高速缓存配置表中针对该组件高速缓存标识符的一组参数相对应。

为了访问通路和集合分区的组件高速缓存,客户端可以通过互连到系统高速缓存(其被分区成组件高速缓存)的总线来请求访问。访问请求可以包括系统存储器中的物理地址和组件高速缓存标识符。系统高速缓存控制器可以在组件高速缓存配置表中查找针对该组件高速缓存标识符的参数。可以从组件高速缓存配置表中读取用于定义以下各项的参数:系统高速缓存的组的数量或大小、该组件高速缓存在系统高速缓存中占据的集合的位置、以及用于该组件高速缓存的索引模式。系统高速缓存控制器可以计算用于系统高速缓存访问的集合索引和标签。该索引模式可以确定是使用物理地址还是定制索引来计算在系统高速缓存中的位置。在任意情况下,可以直接根据物理地址的多个最低有效位或者根据定制索引来导出该偏移。可以对用于指示集合的数量或大小的参数所确定的物理地址的中间部分中的一些比特进行丢弃,所丢弃的比特可以由指示该组件高速缓存所占据的集合的位置以确定集合索引的参数来替代。可以对物理地址的新形成的中间部分的比特进行重新排序。标签可以包括物理地址的最高有效位附加所丢弃比特。

系统高速缓存控制器可以在运行时实例化组件高速缓存(系统高速缓存的分区)。高速缓存控制器可以基于设备的客户端的任务请求,对组件高速缓存进行激活和去激活。客户端可以为了任务而请求组件高速缓存的激活,并且组件高速缓存激活/去激活控制命令寄存器可以向系统高速缓存控制器发送用于组件高速缓存激活的参数。存储在寄存器中的这些参数可以包括:用于触发该操作的比特、对该组件高速缓存进行激活和去激活的操作码、可以用于标识该组件高速缓存的配置的组件高速缓存标识符、指示在该组件高速缓存中使用的目标通路的目标通路参数、以及向这些目标通路应用操作信息的比特。

组件高速缓存的激活可以导致该组件高速缓存的预留。该激活可以指示被指定由客户端用于任务的高速缓存通路。系统高速缓存控制器可以预留系统高速缓存中与该组件高速缓存相对应的线,特别是该组件高速缓存的指定的通路,以便由请求方客户端进行使用。该预留可以导致高速缓存控制器设置预留比特,以说明高速缓存的一部分被预留用于激活该组件高速缓存的主操作者(master)。当主操作者发出目标针对于该组件高速缓存的写操作时,可以写入到该组件高速缓存的高速缓存线。对组件高速缓存进行预留,避免与想要向该组件高速缓存的预留线写入数据的其它客户端发生冲突。组件高速缓存活动通路表可以用于指示活动的高速缓存通路,并用于通过尝试向相同占据的组件高速缓存分配线来避免客户端冲突。组件高速缓存激活/去激活控制状态寄存器可以指示任务是否完成。当客户端的任务需要更多或者更少的高速缓存存储器时,可以对组件高速缓存的预留空间(其部分地通过目标高速缓存通路来指定)进行动态改变,来支持该客户端的任务。在完成该任务时,高速缓存存储器控制器可以使组件高速缓存去激活,这使得子高速缓存的先前预留部分可用于任何客户端进行使用。组件高速缓存可以占据系统高速缓存的连续部分,或者可以占据系统高速缓存的非连续部分。

图1示出了适合于结合各个方面使用的一种系统,其包括与远程计算设备50进行通信的计算设备10。计算设备10可以包括具有处理器14、存储器16、通信接口18和存储器接口20的SoC 12。该计算设备还可以包括诸如有线或无线调制解调器之类的通信组件22、存储器组件24、用于建立到无线网络30的无线连接32的天线26、和/或用于连接到至互联网40的有线连接44的网络接口28。处理器14可以包括各种硬件内核中的任何硬件内核,以及多个处理器内核。SoC 12可以包括一个或多个处理器14。计算设备10可以包括多于一个SoC 12,从而增加处理器14和处理器内核的数量。计算设备10还可以包括不与SoC 12相关联的处理器内核14。各个处理器14可以是如下面参照图2所描述的多核处理器。处理器14可以各自被配置为用于特定目的,其可以与计算设备10的其它处理器14相同或者不同。可以将相同或不同配置的处理器14和处理器内核中的一个或多个组合在一起,作为如下面参照图3所描述的计算设备10的一个或多个子系统的一部分。

SoC 12的存储器16可以是配置用于存储由处理器14进行访问的数据和处理器可执行代码的易失性或者非易失性存储器。在一个方面,存储器16可以被配置为至少临时地存储数据结构,例如,用于管理高速缓存存储器的组件高速缓存的表,其中该高速缓存存储器根据集合和通路被分区,如下面参照图5、13和图14所描述的。如下面所进一步详细讨论的,处理器内核中的每个处理器内核可以访问高速缓存存储器的各个组件高速缓存。

计算设备10和/或SoC 12可以包括配置为用于各种目的的一个或多个存储器16。在一个方面,一个或多个存储器16可以被配置为专用于以下面的方式来保存用于存储组件高速缓存信息的数据结构:使该数据结构信息能被访问以管理处理器14的组件高速缓存请求。当存储这些数据结构的存储器16是非易失性的时,即使在计算设备10的电源关闭之后,存储器16也可以保持这些数据结构的信息。当电源被再次打开并且计算设备10重新启动时,非易失性存储器16中存储的这些数据结构的信息可以可用于计算设备10。

通信接口18、通信组件22、天线26和/或网络接口28可以一致地工作,使计算设备10能够经由无线连接32通过无线网络30和/或通过有线网络44,与远程计算设备50进行通信。可以使用各种无线通信技术(例如,其包括用于无线通信的射频频谱)来实现无线网络30,以向计算设备10提供到互联网40的连接,其中通过互联网40,其可以与远程计算设备50交换数据。

存储接口20和存储组件24可以一致地工作,以允许计算设备10将数据存储在非易失性存储介质上。可以非常类似于存储器16的方面地对存储器组件24进行配置,其中,存储组件24可以存储数据结构,使得一个或多个处理器14可以访问该数据结构信息。即使在计算设备10的电源被关闭之后,存储组件24(其是非易失性的)也可以保持数据结构信息。当电源被再次打开,计算设备10重新启动时,存储器组件24上存储的这些数据结构信息可以可用于计算设备10。存储器接口20可以控制针对存储设备24的访问,并且允许处理器14从存储设备24读取数据和向存储设备24写入数据。

可以对计算设备10的组件中的一些或全部组件进行不同地布置和/或组合,同时仍然提供必要的功能。此外,计算设备10可以不限于每个组件中的一个组件,并且在计算设备10的各个配置中可以包括每个组件的多个实例。

图2示出了适合于实现一个方面的多核处理器14。多核处理器14可以具有多个等同的处理器内核200、201、202、203。处理器内核200、201、202、203可以是等同的,其在于:单个处理器14的处理器内核200、201、202、203可以被配置为用于相同目的,并且具有相同或类似的性能特性。例如,处理器14可以是通用处理器,并且处理器内核200、201、202、203可以是等同的通用处理器内核。替代地,处理器14可以是图形处理单元或者数字信号处理器,并且处理器内核200、201、202、203可以分别是等同的图形处理器内核或者数字信号处理器内核。通过制造过程和材料的变化,处理器内核200、201、202、203的性能特性可以在同一多核处理器14内或者使用相同设计的处理器内核的多核处理器14内,在处理器内核之间彼此不同。在图2所示出的示例中,多核处理器14包括四个处理器内核200、201、202、203(即,处理器内核0、处理器内核1、处理器内核2和处理器内核3)。为了便于解释,本文的示例可以指代图2中所示出的四个处理器内核200、201、202、203。但是,应当注意的是,图2中所示出以及在本文中所描述的四个处理器内核200、201、202、203仅仅作为示例提供,而不意味着是限制性的。计算设备10、SoC 12或者多核处理器14可以单独地或者组合地包括少于或多于本文所示出和描述的四个处理器内核200、201、202、203。

图3示出了配置为根据集合和通路将高速缓存存储器分区成组件高速缓存的计算设备。SoC 12可以包括如上所述的各种组件。可以使用一些这样的组件和额外的组件来实现组件高速缓存。例如,被配置为实现组件高速缓存的SoC 12可以包括系统集线器300、系统高速缓存302、系统高速缓存控制器304、CPU簇306、协议转换器308、GPU 310、调制解调器DSP312、应用DSP 314、存储器接口316、照相机子系统318、视频子系统320、显示子系统322、片上系统网络(NoC)324、存储器控制器326和随机存取存储器(RAM)328。系统集线器300可以是SoC 12的管理各个处理器308、210、312、314对各个存储器的访问的组件。在一个方面,系统集线器300可以管理针对SoC 12的系统高速缓存302以及针对RAM 328的访问。可以访问各种存储器的处理器中的一些处理器可以包括在CPU簇306和各个子系统(例如,照相机、视频和显示子系统318、320、322)中,并且还可以包括诸如GPU 310、调制解调器DSP 312和应用DSP 314之类的其它专用处理器。

系统高速缓存302可以是SoC 12中的用于替代或者补充与各个处理器和/或子系统相关联的高速缓存存储器的共享存储器设备。系统高速缓存302可以对SoC 12的高速缓存存储器资源进行集中,使得各个处理器和子系统可以访问系统高速缓存302以读取和写入被指定用于进行重复和/或快速访问的程序命令和数据。系统高速缓存302可以存储来自各个处理器和子系统的数据,以及来自计算设备的其它存储器设备(例如,主存储器、RAM 328和存储器设备(如,硬盘驱动器))的数据。在一个方面,在由于从系统高速缓存302请求的项不能被定位而发生高速缓存未命中的情况下,这些存储器和存储设备可以对系统高速缓存302进行备份。在一个方面,系统高速缓存302可以被用作用于各个处理器和子系统的暂存存储器。与不使用系统高速缓存302的类似架构的SoC的本地高速缓存存储器的组合相比,系统高速缓存302可能在存储空间和物理大小上更小。但是,如本文所进一步描述的系统高速缓存302的管理可以允许更大的能量节省以及SoC 12的等同或更佳性能速度,尽管系统高速缓存的更小的存储空间和物理大小。

系统高速缓存控制器304可以管理各个处理器和子系统对系统高速缓存302的访问。系统高速缓存302的访问管理的一部分可以包括:根据通路和集合二者对系统高速缓存存储器空间进行分区。根据通路和集合二者对系统高速缓存存储器空间进行分区可以导致:将系统高速缓存存储器分区成系统高速缓存存储器空间中的不同大小和位置的组件高速缓存。系统高速缓存控制器304可以维持这些组件高速缓存的记录,并将各种特性/特征/参数与组件高速缓存中的每个组件高速缓存进行相关,如本文所进一步描述的。

系统高速缓存控制器304可以接收用于指定特定的组件高速缓存的系统高速缓存访问请求。系统高速缓存访问请求还可以包括系统高速缓存访问请求的组件高速缓存的特性。在一个方面,系统高速缓存控制器304可以单独地在组件高速缓存配置请求中,在相同或者不同的通信总线上,接收组件高速缓存的特性。组件高速缓存配置请求可以是独立信号,或者可以与系统高速缓存访问请求相关联。系统高速缓存控制器304可以将组件高速缓存配置请求接收成系统高速缓存访问请求的一个组成部分。为了便于解释,围绕将组件高速缓存特性作为系统高速缓存访问请求的一部分进行接收来描述下面的示例,其并不意味着对系统高速缓存控制器304可以接收这些组件高速缓存特性的方式进行限制。应当理解的是,可以经由各种相关联的或者独立的信来接收组件高速缓存特性。

系统高速缓存控制器304可以使用所指定的组件高速缓存的信息和相关的特性,来控制针对该组件高速缓存和其相关记录的访问、更新和/或创建和预留。在一个方面,系统高速缓存控制器304可以基于来自系统高速缓存302的客户端的系统高速缓存访问请求来将系统高速缓存存储器空间动态地分区成组件高速缓存。这些客户端可以包括SoC 12的各个处理器和子系统。

CPU簇306可以包括一些通用处理器和/或通用处理器内核的分组。CPU簇306可以经由系统高速缓存控制器304来访问系统高速缓存302。协议转换器308可以将CPU簇306和系统高速缓存控制器304之间的通信从CPU簇306和系统高速缓存控制器304中的一项的标准协议或专有协议转换成适合于另一项的协议,以便在它们之间实现互操作性。CPU簇306可以向系统高速缓存控制器304发送用于指定特定的组件高速缓存和/或所指定的组件高速缓存的特性的系统高速缓存访问请求。作为回应,系统高速缓存控制器可以更新和/或创建所指定的组件高速缓存的记录,允许或者拒绝针对所指定的组件高速缓存的访问,并向CPU簇306返回存储在所指定的组件高速缓存中的信息。

类似于CPU簇306,像GPU 310、调制解调器DSP 312和应用DSP 314的专用处理器可以经由系统高速缓存控制器304来访问系统高速缓存302。专用处理器310、312、314和系统高速缓存控制器304之间的通信,可以由专用的单独存储器接口316进行管理。在一个方面,存储器接口316可以管理多个类似的或者不同的专用处理器310、312、314和系统高速缓存控制器304之间的通信。

像照相机子系统318、视频子系统320和显示子系统322的各个子系统,可以类似地经由系统高速缓存控制器304和存储器接口316来访问系统高速缓存302。NoC 324可以管理子系统318、320、322和系统集线器300以及SoC 12的其它部件之间的通信业务。

系统高速缓存控制器304还可以管理SoC 12的各个处理器和子系统对RAM 328的访问。虽然各个处理器和子系统可以经由存储器控制器326来向RAM 328做出直接的访问请求,但在某些实例中,系统高速缓存访问请求可以是针对于RAM 328的。在一个方面,当在所指定的组件高速缓存中没有发现从指定的组件高速缓存请求的信息时,系统高速缓存请求可能导致高速缓存未命中。结果,系统高速缓存控制器304可以向RAM 328指示系统高速缓存访问请求,以获取没有在该组件高速缓存中发现的所请求的信息。在一个方面,针对于RAM 328的对于该信息的请求首先被指引到存储器控制器326,所述存储器控制器326可以控制针对RAM 328的访问。针对于RAM 328的对于该信息的请求可以由系统高速缓存控制器304来发送,并且可以将所获得的信息返回给系统高速缓存控制器304,以便写入到组件高速缓存中,并将其从该组件高速缓存返回到做出系统高速缓存访问请求的组件。在一个方面,可以在不写入到组件高速缓存中的情况下直接地或者经由系统高速缓存控制器304将得到的信息返回给做出系统高速缓存访问请求的组件。

在一些方面,可以用固件来实现和配置系统高速缓存控制器304,以执行这些方面方法的操作。在一些方面,高速缓存存储器控制器304可以是通过控制器可执行指令被配置为执行方面方法的操作的可编程控制器。在一些方面,高速缓存存储器控制器304可以通过固件和控制器可执行指令的组合来实现和配置,以执行方面方法的操作。

本文对SoC 12和其各个组件的描述仅仅意味着是示例性的而非限制性的。SoC 12的组件中的一些组件可以被可变地配置、组合和分离。组件中的一些组件可以被包括在更大或更少的数量中,并且可以位于SoC 12内并在SoC 12内进行不同地连接,或者与SoC 12相分离。类似地,诸如其它存储器、处理器、子系统、接口和控制器之类的众多其它部件可以包括在SoC 12中,并且与系统高速缓存控制器304进行通信以便访问系统高速缓存302。

图4示出了根据集合和通路进行可变地分区以允许组件高速缓存的系统高速缓存。系统高速缓存400(例如,上文的图3中所描述的系统高速缓存)可以被配置为包括多个通路402、404、406、408、410、412、414、416和数量N个集合418,其中N是正整数。根据通路402-416,对系统高速缓存400进行划分是已知的。在该示例中,系统高速缓存400包括八个通路402-416,并且根据八个通路402-416中的每个通路来划分系统高速缓存400将得到具有八个分区的经分区的系统高速缓存400,每个分区包括一个通路402-416和相应的通路402-416的所有N个集合418。在一个方面,也可以使用通路402-416的组对系统高速缓存400进行分区。继续具有八个通路402-416的系统高速缓存400的示例,每个分区可以包括通路402-416中的两个通路(得到四个分区),或者包括通路402-416中的四个通路(得到两个分区)。

为了创建组件高速缓存,可以通过数量N个集合的已定义的组对系统高速缓存400额外地分区。在一个方面,系统高速缓存控制器所使用的组件高速缓存的特性可以确定能将数量N个集合分区成多少集合组。在一个方面,该特性可以称为集合移位。例如,不将系统高速缓存400分区成集合组,因此,集合移位可以是用于指示不根据集合组进行分区的值(例如,空值或者零)。在另一个示例中,可以将系统高速缓存420分区成两个集合组422、424。系统高速缓存420是与系统高速缓存400相同的系统高速缓存,但系统高速缓存420示出了:当集合移位指示根据两个集合组422、424进行分区的值时的系统高速缓存400。对于系统高速缓存420来说,系统高速缓存控制器可以使用根据两个集合组422、424对系统高速缓存420的分区所创建的额外组件高速缓存,来管理系统高速缓存存储器空间的使用。这些组件高速缓存可以包括:通过通路划分和集合组划分的任意组合所创建的系统高速缓存420的分区,如本文所进一步详细描述的。

类似地,系统高速缓存430可以与系统高速缓存400相同,除了系统高速缓存430示出了当集合移位是指示根据四个集合组432、434、436、438进行分区的值时的系统高速缓存400。类似地,系统高速缓存440示出了当集合移位是指示根据八个集合组442、444、446、448、450、452、454、456进行分区的值时的系统高速缓存400。在图4所示出的这些示例性系统高速缓存430和440中的每个系统高速缓存中,系统高速缓存控制器可以使用通过根据四个集合组432、434、436、438或者八个集合组442-456对系统高速缓存430、440进行分区所创建的额外组件高速缓存,来管理系统高速缓存存储器空间的使用。这些示例中的组件高速缓存可以包括:根据通路划分和集合组划分的任意组合所创建的系统高速缓存430、440的分区,如本文所进一步详细描述的。

可以使用各种形式的符号来指示集合移位(例如,整数)。在一个方面,指示根据其对系统高速缓存存储器空间进行划分的集合组的数量的集合移位特性可以指示集合组数量的增量改变。例如,集合移位特性值的改变(以指示集合组数量的下一个更高改变)可以指示对集合组的数量进行增加、相乘、指数性增加或者根据某种其它函数进行增加的增量变化。对于图4中的示例而言,集合组的数量是2的幂,其中该幂是集合移位特性。这些集合组在大小上可以是相等的,并且每个集合组的组数量也可以是2的幂。可以设想的是,组的数量可以是另一个数的幂,这可能需要对某种硬件进行差别化配置(如,除以非2的幂的整数),以计算如下面所进一步描述的集合索引。

在一个方面,系统高速缓存控制器所使用的组件高速缓存的一个特性可以确定该组件高速缓存位于集合组422、424、432、434、436、438、442、444、446、448、450、452、454、456中的哪个集合组。在一个方面,该特性可以称为集合偏移。可以使用各种形式的符号来指示集合偏移。

继续本文所描述的示例性集合组,所描述的集合组的总数是14,没有统计数量N个集合418。对于该示例而言,集合偏移可以是三比特二进制编码,其中,当不实现集合组时,不需要集合偏移。当实现两个集合组时,集合组422、424分别与集合偏移=000和100相关。当实现四个集合组时,集合组432、434、436、438可以分别与集合偏移=000、010、100和110相关。类似地,当实现八个集合组时,集合组442-456可以分别与集合偏移=000、001、010、011、100、101、110和111相关。

图5示出了可以被系统高速缓存控制器用于管理各个组件高速缓存的特性的组件高速缓存配置表500。组件高速缓存配置表500可以包括组件高速缓存标识符字段502、有效性指示符特性字段504、集合移位特性字段506、集合偏移特性字段508、目标通路特性字段510、探测始终特性字段512、索引模式特性字段514、替换策略特性字段516和高速缓存线大小特性字段528。系统高速缓存的每个组件高速缓存可以与个体的组件高速缓存标识符(如组件高速缓存标识符特性字段502中所示出的)相关。

组件高速缓存标识符可以由系统高速缓存控制器在来自SoC上的客户端的系统高速缓存访问请求中接收,并且由系统高速缓存控制器用于将系统高速缓存访问请求与正确的组件高速缓存和其特性进行匹配。在一个方面,当接收到在组件高速缓存配置表500中不存在的组件高速缓存标识符时,系统高速缓存控制器可以更新组件高速缓存配置表500,以包括所接收的组件高速缓存标识符。

在一个方面,所接收的组件高速缓存标识符可以存在于组件高速缓存配置表500中,但与该组件高速缓存标识符相关的其它组件高速缓存特性中的一个或多个组件高速缓存特性与随所接收的组件高速缓存标识符一起接收的组件高速缓存特性不匹配。在这样的情况下,系统高速缓存控制器可以使用所接收的组件高速缓存特性对组件高速缓存表500中与该组件高速缓存标识符相关的组件高速缓存特性进行更新。可以使用各种符号来对组件高速缓存标识符字段502中的组件高速缓存标识符的值进行符号化。

系统高速缓存中的每个组件高速缓存可以与有效性指示符相关,如有效性指示符特性字段504中所示,并且可以用于指示组件高速缓存配置表500中针对相关组件高速缓存的有效条目。对于各种情形而言,可以将组件高速缓存的记录标记成有效或者无效,例如,使用与有效或无效条件相关的值或者标志(例如,“0”或“1”)。系统高速缓存控制器可以允许对于与有效性指示符特性字段504中的有效性标识符相关的组件高速缓存标识符的系统高速缓存访问请求。当接收到对于与有效性指示符特性字段504中的无效标识符相关的组件高速缓存标识符的系统高速缓存访问请求时,系统高速缓存控制器可以将该系统高速缓存访问请求视作为错误。

组件高速缓存配置表500中的集合移位特性字段506可以用于指示如上所述的集合移位特性。如上所述,集合移位标识系统高速缓存存储器空间针对与相应的集合移位值相关的组件高速缓存中的每个组件高速缓存被划分成的集合组的数量。例如,针对指示仅仅两个集合组分区的集合移位,存在众多的由各种组合的集合和通路分区来构成的组件高速缓存。例如,在图5中,行522包括集合移位=1,在该示例中,其指示两个集合组分区。行522表示组件高速缓存集合和通路分区中的仅仅一个分区,包括集合偏移特性字段508中的一个值和目标通路特性字段510中的一个值。存在着集合偏移特性字段508中的恰好相同的值与集合移位特性字段506中的相同值相关的目标通路特性字段510中的其它值的众多其它组合。对于表示由集合移位特性字段506中的集合移位=1所指示的两个集合组分区中的另一个集合组分区的集合偏移特性字段508的其它可能的值来说,可以有甚至更多的组合。类似的示例包括针对集合移位特性字段506中的其它可能值,不同的组件高速缓存的集合和通路分区的更大数量的组合。在一个方面,可以在组件高速缓存配置表500中包括系统高速缓存的已知分区(即,整个高速缓存的或者仅通路的高速缓存分区)。虽然由于组件高速缓存配置表500并不包括系统高速缓存的根据集合的分区,因此组件高速缓存配置表500对于这些已知的分区来说是先前没有必要的,但可以在组件高速缓存配置表500中包括这些已知分区。当集合移位特性字段506包括集合移位=0或者空值时,可以在组件高速缓存配置表500中规定系统高速缓存的已知分区,如在行518和526中。这种集合移位值可以指示:没有根据集合对与其相关联的组件高速缓存进行分区。根据集合来划分的组件高速缓存可以与大于零的集合移位值相关联。可以使用各种符号来对组件集合移位特性字段506中的集合移位的值进行符号化。

组件高速缓存配置表500中的集合偏移特性字段508可以用于指示:指出该相关的组件高速缓存所位于的集合组的集合偏移特性。如上所述,组件高速缓存部分地由集合组分区与通路分区的组合构成。集合偏移特性可以标识集合组分区的数量,并且集合偏移特性可以指示包含相关的组件高速缓存的该数量的集合组请求内的特定集合组。如上所述,每个集合组可以与将在组件高速缓存配置表500中的集合偏移特性字段508里表示的特定集合偏移特性值相关。具体而言,在一个方面,集合移位和集合偏移的组合可以定义包含组件高速缓存的集合组,这是由于对应于一个集合移位值的集合偏移值可能与对应于另一个集合移位值的集合偏移值相重叠。例如,每个集合移位可以包括集合偏移=000,其可以与第一集合组相关。这是由于,对于指示多个集合组的每个集合移位值来说,存在至少第一集合组。因此,对应于集合移位=1的集合偏移=000可以表示对应于另一个集合移位值的集合偏移=000的不同集合组。此外,还可以向各个可能的集合组分配唯一的集合偏移值。可以使用各种符号来对组件集合偏移特性字段508中的集合移位的值进行符号化。

组件高速缓存配置表500中的目标通路特性字段510可以用于指示目标通路特性,所述目标通路特性可以指示相关的组件高速缓存所位于的通路组分区。就像集合组,通路组可以包括:组件高速缓存可以位于的系统高速缓存存储器空间的通路。对于任何组件高速缓存来说,不管集合移位还是集合偏移,目标通路都可以指示系统高速缓存的单个或者连续通路的任意组合。组件高速缓存的通路组分区可以允许在运行时,静态地和动态地对该组件高速缓存的关联性进行定制。在组件高速缓存配置表500中,可以将目标通路值的所有组合与集合移位和集合偏移值的任意组合进行相关。组件高速缓存配置表500中的集合移位、集合偏移和目标通路的组合为系统高速缓存控制器定义所有的可能组件高速缓存。在一个方面,目标通路值可以通过一个比特向量来表示,其中该向量中的每个比特表示系统高速缓存的个体通路。在组件高速缓存配置表500中,以十六进制来表示该比特向量。返回到与行522有关的示例,在行522中表示的系统高速缓存与图4中的系统高速缓存420相同,具有八个通路和两个集合组。在该示例中,目标通路特性字段510包含0xF0的值,其还可以表示成二进制比特向量1111 0000。因此,在该示例中,该组件高速缓存可以位于通过“F”或者“1”值所指示的四个通路中,它们与图4中的系统高速缓存420的通路402、404、406和410相关。可以使用各种符号来对目标通路特性字段508中的目标通路特性的值进行符号化。

组件高速缓存配置表500中的探测始终特性字段512可以用于指示:为了访问该组件高速缓存,是否对该系统高速缓存的所有通路的标签都进行查找或者探测。当探测所有通路特性指示对系统高速缓存的所有通路都进行探测时,组件高速缓存的探测不受到目标通路值的限制。这可以是动态组件高速缓存中的情形,这能够改变其集合组内的大小,即,改变其目标通路。因此,如果组件高速缓在不同的时间处增大或缩小,仍然可以在系统高速缓存中的相同集合组里找到不再是该组件高速缓存的一部分的通路中所存储的信息。当组件高速缓存是静态的,使得其不会改变该组件高速缓存所占据的通路群时,探测所有特性字段512可以包含空值或者用于指示不针对相关的组件高速缓存启动探测所有通路特征的值。这可以通过使标签查找最小化来减少功耗,并比较系统高速缓存的所有通路间的操作。

组件高速缓存配置表500中的索引模式特性字段514可以用于指示是使用物理索引化模式(PI)下的物理地址,还是使用定制索引化模式(CI)下的定制索引,对相关的组件高速缓存做出索引。在一个方面,物理寻址可能导致不可预测的和有时过度的缓存冲突(根据存储器位置),因此可以使用定制索引化模式来访问组件高速缓存。可以使用任何形式的定制索引。在一个方面,定制索引可以包括虚拟地址索引,以便例如根据高级操作系统存储器分配方案来确保可预测的冲突未命中。另一个方面可以使用定制索引与虚拟地址最高有效位的哈希运算,以使冲突未命中减到最小。在物理索引化模式下,系统高速缓存控制器可以将系统高速缓存的物理地址接收成来自客户端的系统高速缓存访问请求的一部分,并且使用所接收的系统高速缓存的物理地址,将其转换成系统高速缓存中的组件高速缓存的物理地址。在定制索引化模式下,系统高速缓存控制器可以将系统高速缓存的物理地址和定制索引接收成来自客户端的系统高速缓存访问请求的一部分,并且使用所接收的系统高速缓存的物理地址和所接收的定制索引,将它们转换成系统高速缓存中的组件高速缓存的物理地址。本文将进一步描述用于将所接收的系统高速缓存的物理地址和/或所接收的定制索引转换成系统高速缓存中的组件高速缓存的物理地址的一个方面处理。

组件高速缓存配置表500中的替换策略特性字段516可以用于指示用于在相关的组件高速缓存中存储的信息的替换策略。一些这样的替换策略可以包括已知的替换策略,其包括:最近使用、最近最少使用、先进先出、后进先出和随机替换策略。其它已知和专有替换策略也可以用于各个组件高速缓存中存储的信息。可以根据替换策略特性字段516,为每个组件高速缓存来定制替换策略。

组件高速缓存配置表500中的高速缓存线大小特性字段528可以用于指示用于相关的组件高速缓存的高速缓存线的缺省或者定制大小。缺省高速缓存线大小可以是系统高速缓存存储器的标准高速缓存线大小。在一个方面,当在组件高速缓存配置表500中创建对应的组件高速缓存时,可以针对这些组件高速缓存中的一些或全部组件高速缓存将高速缓存线大小特性字段528设置为缺省高速缓存线大小。在一个方面,空值还可以指示缺省高速缓存线大小。在一个方面,可以将高速缓存线大小特性字段528设置为定制高速缓存线大小,所述定制高速缓存线大小可以是当组件高速缓存在组件高速缓存配置表500中被创建时从存储器设置的,或者可以是与系统高速缓存访问请求相关联地设置的。当指定的定制高速缓存线大小与缺省高速缓存线大小相同时,该定制高速缓存线大小可以包括缺省高速缓存线大小。在图5所示的示例中,在行518-526中所表示的组件高速缓存可以在高速缓存线大小特性字段528中包括不同的值。如图所示,可以通过以数字信息的单位(例如,比特、字节、兆字节和其它变型)进行测量的大小值来表示这些值。此外,还可以以高速缓存线可以横跨的系统高速缓存存储器的集合和或通路的数量的方式来表示这些值。

在一个方面,还可以使用集合移位特性字段506和/或目标通路特性字段510来确定高速缓存线大小。如上所述,集合移位特性字段506可以指示在组件高速缓存中使用的系统高速缓存存储器的集合的数量,并且目标通路特性字段510可以指示系统高速缓存存储器的通路。组件高速缓存中的高速缓存线的大小可以取决于构成该组件高速缓存的高速缓存集合和/或通路的数量。因此,可以通过设置集合移位特性字段506和/或目标通路特性字段510来实现对用于对应的组件高速缓存的高速缓存线大小进行定制。

在一个方面,组件高速缓存配置表500可以是静态的,其在于:至少对于组件高速缓存标识符字段502、集合移位特性字段506、集合偏移特性字段508和目标通路特性字段510来说,可以在组件高速缓存配置表500中表示每个可能的组件高速缓存。其它字段502、512、514和516不一定定义组件高速缓存,而是表示组件高速缓存可以是静态或者可变的特性。因此,在静态高速缓存配置表500中,可以针对与组件高速缓存标识符相关的集合移位、集合偏移和目标通路的每个组合都存在行。在静态高速缓存配置表500中,其它字段502、512、514和516可以仍然是可变的,并且允许它们的值发生改变。在一个方面,组件高速缓存配置表500可以是动态的,其在于:可以在运行时期间,向组件高速缓存配置表500增加和从组件高速缓存配置表500中删除与组件高速缓存标识符相关的集合移位、集合偏移和目标通路的各种组合。类似于静态高速缓存配置表500,其它字段502、512、514和516不一定定义组件高速缓存,并且可以是可变的,并且允许它们的值发生改变。

图6示出了根据集合和通路被可变地分区成组件高速缓存的系统高速缓存600。图6中所示出并且本文所描述的组件高速缓存仅仅意味着是示例性的,并且决不意味着是限制性的。图6中所示出的组件高速缓存与图5的行518、520、522、524和526中所示出的组件高速缓存的非限制性示例相关。组件高速缓存602与组件高速缓存配置表500中的行518相关。在该示例中,在行518中,集合移位值是空或者零。集合偏移值是不相关的(由于不存在集合组分区),但还可以是空或零。目标通路包括系统高速缓存600的所有通路402-416,如目标通路=0xFF所指示的,其中在比特向量中,其可以表示成1111 1111,如上所述。

在图6所示出的示例中,组件高速缓存604与组件高速缓存配置表500中的行520相关。在该示例中,在行520中,集合移位=3可以表示系统高速缓存600被分区成八个集合组442-456。集合偏移=100可以表示组件高速缓存604位于集合组450中。由比特向量0000 1100所表示的目标通路=0x0C可以表示组件高速缓存604位于通路410和412中。

在图6所示出的示例中,组件高速缓存606与组件高速缓存配置表500中的行522相关。在该示例中,在行522中,集合移位=1可以表示,系统高速缓存600被分区成两个集合组422和424。集合偏移=000可以表示组件高速缓存604位于集合组422中。由比特向量1111 0000所表示的目标通路=0xF0可以表示组件高速缓存604位于通路402、404、406和408中。

在图6所示出的示例中,组件高速缓存608与组件高速缓存配置表500中的行524相关。在该示例中,在行524中,集合移位=2可以表示系统高速缓存600被分区成四个集合组432-438。集合偏移=110可以表示组件高速缓存604位于集合组438中。通过比特向量0111 1000所表示的目标通路=0x78可以表示组件高速缓存604位于通路404、406、408和410中。

在图6所示出的示例中,组件高速缓存610与组件高速缓存配置表500中的行526相关。在该示例中,在行526中,集合移位值是空或零。集合偏移值是不相关的(由于不存在集合组分区),但还可以是空或零。目标通路包括系统高速缓存600的通路416,如目标通路=0x01所指示的,在比特向量中,其可以表示成0000 0001。

图6仅示出了系统高速缓存控制器可以使用组件高速缓存配置表500来管理的潜在组件高速缓存的很少示例。虽然在图6中将组件高速缓存604、606、608和610示出成占据系统高速缓存600中的非重叠位置(除了组件高速缓存602之外),但应当注意的是,这样做只是为便于解释目的,并且很多组件高速缓存可能与其它组件高速缓存重叠(由于它们与组件高速缓存602重叠)。并不是所有组件高速缓存同时都是活动的,因此系统高速缓存控制器可以对于重叠的组件高速缓存的使用进行管理,如本文所进一步讨论的。此外,还应当注意的是,不同组件高速缓存的参数可能导致每个组件高速缓存具有不同的高速缓存线大小。由于每个组件高速缓存包括系统高速缓存的整个的高速缓存集合的分区,因此与每个组件高速缓存相关联的高速缓存线可以少于高速缓存通路中的所有高速缓存集合。与没有根据高速缓存集合进行分区相比,这可以导致更小的高速缓存线,并且每个组件高速缓存的高速缓存集合的数量(由集合移位特性来定义)可以确定每个组件高速缓存的高速缓存线大小。

图7示出了组件高速缓存的客户端访问的示例。例如,客户端可以包括程序软件、操作系统软件、计算设备固件、处理器、处理器内核或计算设备子系统和系统存储器管理单元,并且可以进行针对从系统高速缓存302的组件高速缓存读取和向其写入的系统高速缓存访问请求。一个或多个客户端进行的系统高速缓存访问请求可以在针对系统高速缓存作出的请求和从系统高速缓存接收的响应中发生变化。来自客户端的系统高速缓存访问请求可以包括:诸如处理器内核A 700、处理器内核B 702、处理器内核C 704、处理器内核D 706和处理器内核E 708之类的处理器内核发送信号,以便请求从系统高速缓存302读取数据或者向系统高速缓存302写入数据。

处理器700-708可以包括虚拟地址或物理地址、组件高速缓存标识符和组件高速缓存特性、以及针对读取或写入的系统高速缓存访问请求。在一个方面,系统存储器管理单元710、712、714、716可以是SoC上的在处理器、处理器内核或子系统和系统高速缓存控制器之间的独立组件,也可以集成到相同组件中的一个或多个组件中。系统存储器管理单元710、712、714、716可以接收系统高速缓存访问请求、虚拟地址、组件高速缓存标识符和组件高速缓存特性。根据虚拟地址,系统存储器管理单元710、712、714、716可以确定针对系统高速缓存存储器空间的相关物理地址。在一个方面,系统存储器管理单元710、712、714、716可以根据该虚拟地址来构造定制索引。系统存储器管理单元710、712、714、716可以将系统高速缓存访问请求、针对系统高速缓存的物理地址、定制索引、组件高速缓存标识符和组件高速缓存特性转发给系统高速缓存302。在一个方面,如本文所进一步描述的,系统高速缓存控制器可以接收系统存储器管理单元710、712、714、716所转发的信息,并且将系统高速缓存存储器空间的物理地址转换成用于所识别的组件高速缓存的物理地址。

下面的示例描述了各种类型的系统高速缓存存储器访问请求。一个示例可以包括:处理器内核A 700向组件高速缓存A 720作出系统高速缓存存储器访问请求,其指定使用物理索引化模式。处理器内核A700可以发送具有组件高速缓存A 720的组件高速缓存标识符、针对系统高速缓存存储器空间的虚拟地址和至少物理索引化模式特性指示符的其系统高速缓存存储器访问请求。系统存储器管理单元A 710可以接收处理器内核A700所发送的信息,确定系统高速缓存存储器空间中与该虚拟地址相关的物理地址,并且将该系统高速缓存存储器访问请求连同组件高速缓存标识符、组件高速缓存特性和针对系统高速缓存的物理地址进行转发。在一个方面,系统存储器管理单元710可以构造定制索引,也可以不构造定制索引。由于指定了物理索引化模式,因此构造定制索引在该实例中并不是必需的,所以将不使用定制索引。但是,在一个方面,可以对定制索引进行构造和转发,但不使用。在没有指定索引化模式的方面,可以将定制索引化模式与组件高速缓存配置表中的组件高速缓存标识符进行相关,无论如何,在没有指定索引化模式来提供定制索引的实例中,这可以是有益的。系统高速缓存302可以使用系统存储器管理单元710所转发的信息来访问组件高速缓存A720。在一个方面,组件高速缓存A 720可以使它存储的数据的改变与RAM328相一致。

另一个示例可以包括:处理器内核B 702向组件高速缓存B 722作出指定使用定制索引化模式的系统高速缓存存储器访问请求。处理器内核B 702可以发送具有组件高速缓存B 722的组件高速缓存标识符、针对系统高速缓存存储器空间的虚拟地址和至少定制索引化模式特性指示符的其系统高速缓存存储器访问请求。系统存储器管理单元B 712可以接收处理器内核B702所发送的信息,确定系统高速缓存存储器空间中与该虚拟地址相关的物理地址,构造定制索引,将该系统高速缓存存储器访问请求、组件高速缓存标识符、组件高速缓存特性、针对系统高速缓存的物理地址和定制索引进行转发。系统高速缓存302可以使用系统存储器管理单元B 712所转发的信息来访问组件高速缓存B 722。在一个方面,组件高速缓存B 722可以使它存储的数据的改变与RAM 328相一致。

在一个示例中,处理器内核C 704可以使用针对系统高速缓存的物理地址,向组件高速缓存C 724作出系统高速缓存存储器访问请求。处理器内核C 704可以直接向系统高速缓存302发送具有组件高速缓存C 722的组件高速缓存标识符、针对系统高速缓存存储器空间的虚拟地址和任何组件高速缓存特性的其系统高速缓存存储器访问请求。系统高速缓存302可以使用处理器内核C 704所发送的信息来访问组件高速缓存C 724。

另一个示例可以包括:处理器内核D 706向缺省组件高速缓存D 726作出系统高速缓存存储器访问请求,所述缺省组件高速缓存D 726可以表示涵盖整个系统高速缓存的组件高速缓存(例如,图6的组件高速缓存602),而不是涵盖系统高速缓存的分区的组件高速缓存。处理器内核D 706可以发送具有针对系统高速缓存存储器空间的虚拟地址的其系统高速缓存存储器访问请求。由于系统高速缓存存储器访问请求是针对于缺省组件高速缓存D 726的,因此处理器内核D 706不需要发送组件高速缓存标识符或组件高速缓存特性。可以发送缺省组件高速缓存标识符(例如,空或零),并使用其在组件高速缓存配置表中识别出该系统高速缓存存储器访问请求是针对于缺省组件高速缓存的。系统存储器管理单元D 716可以接收处理器内核D 706所发送的信息,确定系统高速缓存存储器空间中与该虚拟地址相关的物理地址,并且将该系统高速缓存存储器访问请求、组件高速缓存标识符(当提供时)和针对系统高速缓存的物理地址进行转发。系统高速缓存302可以使用系统存储器管理单元D 716所转发的信息,来访问缺省组件高速缓存D 726。在一个方面,缺省组件高速缓存D 726可以使它存储的数据的改变与RAM 328相一致。

在一个示例中,处理器内核E 708可以进行不可缓存系统高速缓存存储器访问请求。在该示例中,该不可缓存系统高速缓存存储器访问请求可以是通过系统高速缓存302被指引到RAM 328的。处理器内核E 708可以发送具有系统高速缓存存储器空间的虚拟地址的其不可缓存系统高速缓存存储器访问请求。系统存储器管理单元E 718可以接收处理器内核E 708所发送的信息,确定系统高速缓存存储器空间中与该虚拟地址相关的物理地址,将该系统高速缓存存储器访问请求和针对系统高速缓存的物理地址进行转发。系统高速缓存302可以使用系统存储器管理单元E 718所转发的信息,访问RAM 328来执行所请求的存储器访问功能。

图8示出了用于访问组件高速缓存的地址转换。上面所提及的系统高速缓存控制器的地址转换将系统高速缓存存储器空间800中的物理地址转换成系统高速缓存存储器空间中的组件高速缓存814的物理地址。在一个方面,系统高速缓存存储器空间800中的物理地址可以包括标签802和具有集合索引804和块偏移806的物理索引。组件高速缓存814的物理地址可以包括扩展的标签816和具有集合索引818和块偏移820的修改的物理索引。如上所述,系统高速缓存控制器可以接收该系统高速缓存访问请求的信息以及与之有关的信息,包括系统高速缓存存储器空间800中的物理地址、组件高速缓存标识符和组件高速缓存特性(例如,索引化模式)。系统高速缓存控制器可以使用该信息来确定组件高速缓存814的物理地址。系统高速缓存控制器可以使用组件高速缓存索引化模式特性(当利用系统高速缓存存储器访问请求来提供时),以针对也利用系统高速缓存访问请求所接收的对应组件高速缓存标识符,更新组件高速缓存配置表500中的索引化模式字段。系统高速缓存控制器可以使用该组件高速缓存标识符,从组件高速缓存配置表500中确定适当的索引化模式、集合移位和集合偏移,以便确定该组件高速缓存标识符所对应的组件高速缓存814的物理地址。

系统高速缓存控制器可以使用系统高速缓存存储器空间800中的物理地址的一部分,来确定用于确定组件高速缓存814的物理地址的部分。例如,系统高速缓存控制器可以使用来自于系统高速缓存存储器空间800中的物理地址的块偏移806来确定组件高速缓存814的物理地址的块偏移820。在一个方面,块偏移806和块偏移820中的值可以是相同的。系统高速缓存控制器可以使用标签802和系统高速缓存存储器空间800中的物理地址的所述部分和/或定制索引808,来分别确定标签816和组件高速缓存814的物理地址的集合索引818。

在一个方面,可以对标签802和集合索引804进行修改,以确定标签816和集合索引818。为了修改标签802和集合索引804,系统高速缓存控制器可以使用组件高速缓存配置表500中针对相应的组件高速缓存标识符的索引化模式特性,来选择(810)是使用集合索引804的第一比特集合(当指示物理索引化模式时),还是利用定制索引808来替换集合索引804的第一比特集合(当指示定制索引化模式时)。该索引化模式可以确定使用集合索引804的第一比特集合或者定制索引808构成的集合索引818的第一比特集合的组成成分。无论是选择集合索引804的第一比特集合还是选择定制索引808,系统高速缓存控制器都可以使用集合索引804的第二比特集合作为集合索引818的第二比特集合,并将它们与集合索引804的第一比特集合或者定制索引808进行组合。此外,无论是选择集合索引804的第一比特集合还是选择定制索引808,系统高速缓存控制器都可以使用对应的组件高速缓存标识符的集合移位和集合偏移,来确定丢弃(或者移位)和连接操作812的实现方式。集合移位可以规定从集合索引804的第一比特集合或者定制索引808丢弃并添加(或移位)到标签816中最高有效位的数量,从而将丢弃(或者移位)的比特添加到标签802来确定标签816,并且将标签816的大小从标签802的大小扩展相同数量的比特。可以使用集合偏移来替代集合索引818中的被丢弃(或者移位)比特。

图9示出了使用物理地址来访问组件高速缓存的地址转换。如上面参照图8所描述的,可以将块偏移806转置成块偏移820。当索引化模式指示物理索引化时,可以对集合索引804进行修改以丢弃(或者移出)集合索引804的第一比特集合(在一个方面,最高有效位900)。集合索引804的第一比特集合可以取决于该组件高速缓存所对应的集合移位的值。集合索引804的第二比特集合(在一个方面,其是集合索引804的剩余比特906)可以被用作集合索引818的第二比特集合。在一个方面,可以将剩余比特906转置成集合索引818的相同比特908。该组件高速缓存所对应的集合偏移902的比特,可以替代被丢弃(或者移出)的集合索引804的第一比特集合(例如,集合索引804的最高有效位900),作为集合索引818的第一比特集合(在一个方面,其是集合索引818的最高有效位904)。与被丢弃(或者移出)的集合索引804的第一比特集合(例如,集合索引804的最高有效位900)相组合(例如,附加)的标签802可以被转置成标签816。

图10示出了用于使用定制索引来访问组件高速缓存的地址转换。如上面参照图8所描述的,可以将块偏移806转置成块偏移820。当索引化模式指示定制索引化时,可以对集合索引804进行修改以丢弃(或者移出)集合索引804的第一比特集合(在一个方面,最高有效位900)。集合索引804的第一比特集合可以取决于该组件高速缓存所对应的集合移位的值。集合索引804的剩余的第二比特集合(在一个方面,其是集合索引804的中间比特1006和低位比特1000)可以被用作集合索引818的第二比特集合。在一个方面,可以将低位比特1000转置成集合索引818的相同比特1002。定制索引808可以替代集合索引818的对应中间比特1004中的中间比特1006。该组件高速缓存所对应的集合偏移902的比特可以替代集合索引804的第一比特集合(例如,集合索引804的最高有效位900),作为集合索引818的第一比特集合(在一个方面,其是集合索引818的最高有效位904)。与被丢弃(或者移出)的集合索引804的第一比特集合(例如,集合索引804的最高有效位900)相组合(或者附加)的标签802可以被转置成标签816。

应当注意的是,对物理地址800、集合偏移902和定制索引808的比特进行丢弃、移位、转置、组合和附加的上面示例只是示例性的,并且决不意味着是限制性的。可以以任何多种的方式,对这些组成部分的比特进行操作和组合,以布置物理地址814的比特。例如,集合偏移902的比特可以替代集合索引804的最高有效位、最低有效位或者中间比特。

在一个方面,可以对组件高速缓存进行激活和去激活。由于存在在系统高速缓存存储器空间中的重叠的组件高速缓存的可能性,因此为了避免高速缓存冲突,可以对与活动的组件高速缓存重叠的组件高速缓存进行去激活。此外,为了省电,可以对没有在使用的组件高速缓存进行去激活。可以在运行时,对组件高速缓存进行激活和去激活,以便部分地对系统高速缓存存储器空间进行分区,以及将组件高速缓存分配给指定的客户端。系统高速缓存的客户端中的一些客户端可能只在相对较短的一段时间内需要这些组件高速缓存,并且可以为客户端预留组件高速缓存所使用的系统高速缓存存储器空间,以避免与使用系统高速缓存的其它客户端冲突。此外,当客户端完成组件高速缓存的使用时,可以对该组件高速缓存进行去激活,并且使该系统高速缓存存储器空间未被预留,使得该系统高速缓存存储器空间和组件高速缓存可用于其它客户端。

图11示出了一种示例性组件高速缓存激活/去激活控制命令1100,其可以包括用于存储与组件高速缓存激活和存储器访问操作有关的信息的寄存器。在一个方面,组件高速缓存激活/去激活控制命令1100可以包含诸如触发1102、操作码1104、组件高速缓存标识符1106、应用目标通路1108和目标通路1110之类的信息。触发1102可以是用于指示是否开始针对该组件高速缓存的系统高速缓存存储器访问的标志(例如,一比特码)。例如,“0”比特值可以指示不应当开始系统高速缓存存储器访问,“1”比特值指示系统高速缓存存储器访问可以开始。操作码1104可以是用于指示是对该组件高速缓存进行激活还是去激活的代码。例如,二比特码(其中,“01”表示激活,“10”表示去激活)可以用于操作码1104。组件高速缓存标识符1106可以存储与和组件高速缓存激活/去激活控制命令1100的其它信息有关的特定组件高速缓存相关联的值。应用目标通路1108可以是用于表示是否在系统高速缓存存储器访问中使用目标通路1110中存储的信息的标志。例如,“0”比特值可以指示不使用目标通路1110中存储的信息,“1”比特值可以指示使用目标通路1110中存储的信息。目标通路1110可以存储这些通路,以便在系统高速缓存存储器空间中的组件高速缓存内进行激活,并且仅当操作码1104表示激活时,目标通路1110可以是有效的。在一个方面,客户端可能不需要使用整个的组件高速缓存来进行系统高速缓存存储器访问,并且可以指定只对组件高速缓存内的某些通路进行激活。当客户端需要使用组件高速缓存中的更多通路时,目标通路1110可以指定该组件高速缓存的通路中的更多通路。

图12示出了一种组件高速缓存激活/去激活控制状态1200,其可以包括用于存储与组件高速缓存存储器访问操作有关的信息的寄存器。在一个方面,组件高速缓存激活/去激活控制状态1200可以包含诸如完成(done)指示符1202之类的信息,其可以是一个标志。例如,“0”比特值可以指示系统高速缓存存储器访问操作还没有开始或者正在进行,“1”比特值可以指示系统高速缓存存储器访问操作已完成。

系统高速缓存控制器可以读取组件高速缓存激活/去激活控制命令1100和组件高速缓存激活/去激活控制状态1200,以管理系统高速缓存存储器空间。此外,图13示出了可以由系统高速缓存控制器用于管理组件高速缓存内的通路的使用的组件高速活动通路表1300。如上所述,客户端可能需要也可能不需要使用整个组件高速缓存来进行系统高速缓存存储器访问,并且可以指定仅激活组件高速缓存内的某些通路。系统高速缓存控制器可以通过更新组件高速缓存活动通路表1300来跟踪组件高速缓存中的每个组件高速缓存的活动通路。在组件高速缓存活动通路表1300中,组件高速缓存标识符字段1302(类似于组件高速缓存配置表中的组件高速缓存标识符字段)可以与对应的活动通路字段1034相关。当应用目标通路指示应用这些目标通路时,随着从组件高速缓存激活/去激活控制命令的目标通路中读出,系统高速缓存控制器可以将客户端所请求的目标通路存储在活动通路字段1034中。当应用目标通路指示不应用这些目标通路时,可以将活动通路字段1034设置为缺省值、空值、或者用于指示组件高速缓存的所有目标通路的值(如组件高速缓存配置表中所指定的)。

图14示出了组件高速缓存预留表1400的一个方面,其中该组件高速缓存预留表1400可以是上面所描述的组件高速缓存活动通路表的伴随表。组件高速缓存预留表1400可以包括通路列1402、1404、1406、1408、1410、1412、1414、1416和集合组行1418、1420、1422、1424、1426、1428、1430、1432,它们可以表示进行了组件高速缓存分区的系统高速缓存的通路和集合群。组件高速缓存预留表1400可以针对系统高速缓存中被客户端预留和/或未被预留的通路和集合组中的每对通路和集合组来设置预留和/或未被预留指示符。根据一个方面的组件高速缓存预留表1400可以允许系统高速缓存控制器对客户端将使用的系统高速缓存中的位置保持跟踪,并且通过不允许客户端使用正在被另一个客户端使用或者为另一个客户端预留的系统高速缓存位置来避免高速缓存冲突。在一个方面,预留指示符可以使得与系统高速缓存活动通路表的组件高速缓存标识符相关的集合组和组件高速缓存配置表进行匹配,并且与系统高速缓存活动通路表中所指示的通路进行匹配。一旦客户端完成了对于其预留的组件高速缓存空间的使用,就可以从组件高速缓存预留表1400中的对应位置删除预留指示符,或者将预留指示符改变成组件高速缓存预留表1400中的对应位置的未被预留指示符。

举例而言,图13中所示出的组件高速缓存活动通路表1300示出了用于四个组件高速缓存标识符的活动通路。系统高速缓存控制器可以为组件高速缓存标识符中的每个组件高速缓存标识符预留系统高速缓存位置,将预留的通路限制于所指示的活动通路。可以根据组件高速缓存配置表的集合移位、集合偏移、以及组件高速活动通路表1300中的活动通路来确定系统高速缓存位置。系统高速缓存控制器可以通过对组件高速缓存预留表1400中预留的系统高速缓存位置进行标记,来预留系统高速缓存中的位置。因此,在图14所示出的示例中,组件高速缓存预留表1400包括用于指示以下信息的数据:针对由组件高速缓存配置表和组件高速缓存活动通路表1300中的组件高速缓存标识符和对应的组件高速缓存特性所指定的系统高速缓存位置中的每个系统高速缓存位置,预留指定的集合组和活动通路。

应当注意的是,虽然不太可能,但来自组件高速缓存配置表500的组件高速缓存标识符“0”表示整个系统高速缓存的组件高速缓存将包括在组件高速缓存激活表1300和组件高速缓存预留表1400中是可能的,因为这将预留整个系统高速缓存,除非用于该组件高速缓存的活动通路受到限制。这将导致其它客户端不能够使用系统高速缓存,直到通路中的至少一些通路被去激活为止。

在一个方面,可以使用两个W比特向量,对组件高速缓存重新调整大小,其中W是高速缓存通路的数量,并且向量中的每个比特表示特定的高速缓存通路。每个组件高速缓存可以与W比特向量中的一个或二者进行关联。预留向量或者第一向量可以指示被预留用于向相关联的组件高速缓存(当其被激活时)分配的高速缓存通路。奖励向量或者第二向量可以指示可以被分配给相关联的组件高速缓存(当空闲时)的额外高速缓存通路,或者没有被任何组件高速缓存预留的额外高速缓存通路。如上面所讨论的,组件高速缓存可以与特定的客户端(例如,计算设备的处理组件或者子系统)相关联。

图15示出了一种示例性系统高速缓存存储器,该系统高速缓存存储器具有分配给各个组件高速缓存的预留的高速缓存通路。系统高速缓存存储器1500可以包括多个通路;在该示例中,系统高速缓存存储器1500包括16个通路1502、1504、1506、1508、1510、1512、1514、1518、1520、1522、1524、1526、1528、1530、1532和1534。对于该示例而言,两个W比特向量可以是16比特向量。预留的高速缓存通路1536可以被分配给第一客户端(例如,CPU)的第一组件高速缓存,并且可以包括高速缓存通路1502-1508。预留的高速缓存通路1536可以由十六进制符号的第一预留向量=0xF000来表示。在二进制形式下,预留的高速缓存通路1536可以由第一预留向量=1111 0000 0000 0000来表示。将二进制形式的第一预留高速缓存向量与高速缓存通路1502-1534进行比较,“1”比特对应于预留的高速缓存通路1536(其包括高速缓存通路1502-1508)。类似地,预留的高速缓存通路1538可以被分配给第二客户端(例如,计算设备的其它处理组件或者子系统中的一项)的第二组件高速缓存,并且可以包括高速缓存通路1506-1518。预留的高速缓存通路1536可以由十六进制符号的第二预留向量=0x3F00来表示。预留的高速缓存通路1540可以被分配给第三客户端(例如,计算设备的其它处理组件或者子系统中的一项)的第三组件高速缓存,并且可以包括高速缓存通路1520-1526。预留的高速缓存通路1540可以通过十六进制符号的第三预留向量=0x00F0来表示。未被预留的高速缓存通路1542可以包括高速缓存通路1528-1534。另外,第一组件高速缓存可以与十六进制符号的第一奖励向量=0x0FFF相关联,表示潜在地将第一组件高速缓存扩展到高速缓存通路1510-1534。如利用预留的高速缓存通路1536、1538所演示的,预留的高速缓存通路可能在组件高速缓存之间重叠。这可能是由于组件高速缓存可以占据系统高速缓存的相同通路中的不同集合组。因此,可以在相同的高速缓存通路中内激活多个组件高速缓存。在一个方面,图6中具有组件高速缓存标识符“0”的组件高速缓存602(如图5中的行518所示)可以具有相关联的预留向量,所述预留向量可以与其它组件高速缓存的预留向量相重叠。

对于扩展到由第一奖励高速缓存向量所指示的高速缓存通路1510-1534的第一组件高速缓存来说,该组件高速缓存扩展到的每个高速缓存通路1510-1534应当是未被预留的。可以在针对每个组件高速缓存的激活命令中,指定该预留向量。计算设备可以根据激活命令的预留向量来为适当的组件高速缓存预留和分配高速缓存通路1502-1534中的一个或多个高速缓存通路。可以将预留的高速缓存通路存储在存储器设备(例如,寄存器)中。此外,计算设备还可以将用于各个组件高速缓存的奖励向量存储在存储器设备(例如,寄存器)中。可以在启动时间,将奖励向量写入到存储器设备中,和/或资源管理器可以基于用例,向各个组件高速缓存分配奖励向量。响应于奖励向量的高速缓存通路被分配给组件高速缓存,可以将存储用于该特定组件高速缓存的所分配的高速缓存通路的存储器设备扩增为包括这些高速缓存通路。计算设备(在一个方面,其可以是系统高速缓存控制器)可以针对组件高速缓存的预留向量和/或奖励向量对分配给组件高速缓存的可用通路进行计算。可以使用下式来完成该计算:

在上面的公式中,X可以是用于相关的组件高速缓存的组件高速缓存标识符,N可以是组件高速缓存的总数,I可以是所有组件高速缓存的组件高速缓存标识符。ReservedVecX、ReservedVecI和BonusVecX可以分别是用于通过X和I所指示的组件高速缓存的预留向量和奖励向量。当I的组件高速缓存活动时,可以对Active1进行断言。求和运算可以是应用于每个组件高速缓存的按位OR(或)操作符。响应于计算组件高速缓存的奖励向量中所包括的可用高速缓存通路,可以向该组件高速缓存分配可用的高速缓存通路。

图16根据一个方面,示出了一种示例性系统高速缓存存储器,该系统高速缓存存储器具有分配给组件高速缓存的预留和奖励的高速缓存通路。继续图15中的示例,第一组件高速缓存可以使用系统高速缓存存储器1500中的高速缓存通路1502-1510和1528-1534。如上所述,高速缓存通路1502-1510落入第一组件高速缓存的预留向量的范围之内;高速缓存通路1528-1534落入第一组件高速缓存的奖励向量的范围之内。高速缓存通路1528-1534可以没有被另一个组件高速缓存预留,以使计算设备将高速缓存通路1528-1534分配给第一组件高速缓存。虽然高速缓存通路1528-1534在该示例中没有被预留,但用于第一组件高速缓存的奖励高速缓存向量与预留的高速缓存通路1538和1540(其包括高速缓存通路1510-1526)相重叠,如图15中所示。为了向第一组件高速缓存分配高速缓存通路1528-1534,计算设备可以分配用于第一组件高速缓存的奖励向量中所指示的全部高速缓存通路1510-1534。计算设备可以对第二和第三组件高速缓存进行去激活,以使高速缓存通路1510-1526未被预留,并且除了图15中的预留的高速缓存通路1538之外,将高速缓存通路1510-1534分配给第一组件高速缓存。可以向第一组件高速缓存分配预留的高速缓存通路1600(其包括所有的高速缓存通路1502-1534)。

图17根据一个方面,示出了一种示例性系统高速缓存存储器,该系统高速缓存存储器具有分配给各个组件高速缓存的预留的高速缓存通路。下面的示例使用图15的相同的系统高速缓存1500,其区别仅仅在于不同的预留高速缓存通路1700和1702和未被预留的高速缓存通路1704。预留的高速缓存通路1700可以被分配给第一组件,并且可以包括高速缓存通路1502-1508。预留的高速缓存通路1700可以由十六进制符号的第一预留向量=0xF000来表示。预留的高速缓存通路1702可以分配给第二组件高速缓存,并且可以包括高速缓存通路1506-1518。预留的高速缓存通路1536可以由十六进制符号的第二预留向量=0x3F00来表示。未被预留的高速缓存通路1704可以包括高速缓存通路1520-1534。另外,第二组件高速缓存可以与十六进制符号的第二预留向量=0xC000相关联,表示潜在地将第二组件高速缓存扩展到高速缓存通路1502和1504。

图18根据一个方面,示出了一种示例性系统高速缓存存储器,该系统高速缓存存储器具有分配给组件高速缓存的预留和奖励的高速缓存通路。继续图17中的示例,第二组件高速缓存可以使用系统高速缓存1500中的高速缓存通路1506-1518。如上所述,高速缓存通路1506-1518可以落入第二组件高速缓存的预留向量的范围之内。高速缓存通路1506-1518可以没有被另一个组件高速缓存预留,以使计算设备将高速缓存通路1506-1518分配给第二组件高速缓存。但是,高速缓存通路1506和1508与预留的高速缓存通路1700(其包括图17中所示出的高速缓存通路1502-1508)相重叠,如图17中所示。为了向第二组件高速缓存分配高速缓存通路1506-1518,计算设备可以对第一组件高速缓存进行去激活,以使高速缓存通路1506和1508未被预留,并且将高速缓存通路1502-1518分配给第二组件高速缓存。可以向第二组件高速缓存分配预留的高速缓存通路1800(其包括预留的高速缓存通路1702)和通过第一组件高速缓存的去激活而未被预留的额外高速缓存通路1502和1504,它们包括在第二组件高速缓存的奖励高速缓存向量中。

图19示出了用于访问系统高速缓存存储器的组件高速缓存的一个方面方法1900,其中该系统高速缓存存储器根据集合和通路被分区成组件高速缓存。方法1900可以由如本文所描述的计算设备(例如,由系统高速缓存控制器)来执行。在框1902中,计算设备可以装载组件高速缓存配置表。在一个方面,在利用静态组件高速缓存配置表的方面中,可以在计算设备的启动时间期间装载该组件高速缓存配置表,并且可以利用对于系统高速缓存来说可以是可能的组件高速缓存的每一种组合来填充组件高速缓存配置表。可以利用至少组件高速缓存标识符、集合移位特性、集合偏移特性和目标通路特性来填充该组件高速缓存配置表。在一个方面,在利用如本文所描述的动态组件高速缓存配置表的方面中,可以在启动时间,或者在对于组件高速缓存访问的第一次请求时装载该组件高速缓存表。该动态组件高速缓存配置表可以从可以已经由计算设备所保存的组件高速缓存配置表的最新版本中装载,或者可以是基于接收的组件高速缓存访问请求来进行填充的空表。

在框1904中,计算设备可以接收系统高速缓存访问请求。如上所述,该系统高速缓存访问请求可以源自于计算设备上的客户端,并且可以由系统高速缓存控制器进行接收。该系统高速缓存访问请求可以包括:从系统高速缓存读取或者向系统高速缓存写入的请求、组件高速缓存标识符、组件高速缓存特性、系统高速缓存的物理地址、以及定制索引。在确定框1906中,计算设备可以判断该系统高速缓存访问请求是否包括组件高速缓存标识符(CCID)。响应于确定该系统高速缓存访问请求不包括组件高速缓存标识符(即,确定框1906=“否”),则在框1908中,计算设备可以通过已知方法,将该系统高速缓存访问请求视作为正常访问请求。

响应于确定该系统高速缓存访问请求包括组件高速缓存标识符(即,确定框1906=“是”),则在框1910中,计算设备可以在组件高速缓存配置表中,查找与该组件高速缓存标识符相关的记录。如上所述,在其中组件高速缓存配置表是静态的方面中,存在着针对该系统高速缓存的每种可能的组件高速缓存(其具有组件高速缓存标识符)的记录。在可选框1912中,计算设备可以利用可能与该记录中已经存在的组件高速缓存特性不同的所接收的组件高速缓存特性中的任何组件高速缓存特性来更新组件高速缓存配置表中与该组件高速缓存标识符相对应的记录。替代地,计算设备可以在不判断它们是否不同的情况下替换该记录中的所有组件高速缓存特性。

在框1914中,计算设备可以将利用系统高速缓存访问请求所接收的物理地址转换成系统高速缓存中的该组件高速缓存的对应物理地址。如本文所进一步详细描述的,对该地址进行转换可以涉及:确定该组件高速缓存的索引化模式特性是物理索引化,还是定制索引化。

在确定框1916中,计算设备可以确定该组件高速缓存是否是可用的。如本文进一步描述的,确定该组件高速缓存是否是可用的可以涉及:确定该组件高速缓存的系统高速缓存位置是否被预留用于计算设备的另一个客户端。响应于确定该组件高速缓存是不可用的(即,确定框1916=“否”),在框1918中,计算设备可以推迟该系统高速缓存访问请求,直到该组件高速缓存变得可用为止。在框1920中,计算设备可以访问与该系统高速缓存访问请求的组件高速缓存标识符相关联的组件高速缓存以实现所请求的读或写操作。

图20示出了用于访问系统高速缓存存储器的组件高速缓存的一个方面方法2000,其中该系统高速缓存存储器根据集合和通路被分区成组件高速缓存。方法2000可以由如本文所描述的计算设备(例如,系统高速缓存控制器)来执行。在一个方面,可以实现方法2000,以用于如本文所描述的装载的动态组件高速缓存配置表。在框2002中,计算设备可以接收系统高速缓存访问请求。如上所述,系统高速缓存访问请求可以源自于计算设备上的客户端,并由系统高速缓存控制器来接收。该系统高速缓存访问请求可以包括从系统高速缓存读取或者向系统高速缓存写入的请求、组件高速缓存标识符、组件高速缓存特性、系统高速缓存的物理地址、以及定制索引。

在确定框2004中,计算设备可以确定该系统高速缓存访问请求是否包括组件高速缓存标识符(CCID)。响应于确定该系统高速缓存访问请求不包括组件高速缓存标识符(即,确定框2004=“否”),计算设备可以根据框2006中的已知方法,将该系统高速缓存访问请求视作正常访问请求。

响应于确定该系统高速缓存访问请求包括组件高速缓存标识符(即,确定框2004=“是”),在确定框2006中,计算设备可以确定在组件高速缓存配置表中是否存在针对该组件高速缓存标识符的记录。例如,在组件高速缓存配置表中可能存在也可能不存在针对该组件高速缓存标识符的记录,这是由于在动态组件高速缓存配置表中,针对该组件高速缓存标识符的记录可能不是装载的组件高速缓存配置表的一部分,或者当该组件高速缓存被去激活时,可以从该表中删除该记录。

响应于确定在组件高速缓存配置表中不存在针对该组件高速缓存标识符的记录(即,确定框2006=“否”),在框2010中,计算设备可以在组件高速缓存配置表中创建针对该组件高速缓存的记录。在一个方面,系统高速缓存控制器可以使用利用该系统高速缓存访问请求所提供的信息(其包括组件高速缓存标识符和组件高速缓存特性),在组件高速缓存配置表中创建针对该组件高速缓存的记录。

响应于确定在组件高速缓存配置表中存在针对该组件高速缓存的记录(即,确定框2006=“是”),在框2012中,计算设备可以在组件高速缓存配置表中查找与该组件高速缓存标识符相关的记录。在可选框2014中,计算设备可以利用与该记录中已经存在的组件高速缓存特性不同的所接收的组件高速缓存特性中的任何组件高速缓存特性,来更新组件高速缓存配置表中与该组件高速缓存标识符相对应的记录。替代地,计算设备可以在不判断它们是否不同的情况下只替换该记录中的所有组件高速缓存特性。

在框2016中,计算设备可以将利用系统高速缓存访问请求所接收的物理地址,转换成系统高速缓存中的该组件高速缓存的相应物理地址。如本文所进一步详细描述的,对该地址进行转换,可以涉及:确定该组件高速缓存的索引化模式特性是物理索引化,还是定制索引化。

在确定框2018中,计算设备可以确定该组件高速缓存是否是可用的。如本文所描述的,确定该组件高速缓存是否是可用的,可以涉及:确定该组件高速缓存的系统高速缓存位置是否被预留用于计算设备的另一个客户端。响应于确定该组件高速缓存是不可用的(即,确定框2018=“否”),在框2020中,计算设备可以推迟该系统高速缓存访问请求,直到该组件高速缓存变得可用为止。在框2022中,计算设备可以访问与该系统高速缓存访问请求的组件高速缓存标识符相关联的组件高速缓存,以实现所请求的读或写操作。

图21是示出用于对高速缓存存储器地址进行转换,以访问系统高速缓存存储器的组件高速缓存的一个方面方法2100,其中该系统高速缓存存储器根据集合和通路被分区成组件高速缓存。方法2100可以实现成图19中的方法1900的框1914的一部分和图20中的方法2000的框2016的一部分。方法2100可以由如本文所描述的计算设备(例如,系统高速缓存控制器)来执行。

在确定框2102中,计算设备可以确定用于相关的组件高速缓存标识符的索引化模式特性是指示物理索引化还是定制索引化。计算设备可以针对相关的组件高速缓存标识符的记录,对组件高速缓存配置表中的索引化模式特性字段进行检查,以确定索引化模式是指示物理索引化还是定制索引化。响应于确定用于相关的组件高速缓存标识符的索引化模式指示定制索引化(即,确定框2102=“CI”),在框2104中,计算设备可以利用所接收的定制索引,来替代所接收的物理地址的集合索引的中间比特。如上所述,集合索引的中间比特是被移出该集合索引的最高有效位和该集合索引的低位比特之间的比特,所述该集合索引的低位比特被转置成该组件高速缓存的物理地址的集合索引的低位比特。

在框2106中,计算设备可以将所接收的物理地址的集合索引的多个最高有效位进行移出。可以根据组件高速缓存配置表中的对应组件高速缓存标识符的集合移位特性的值,来确定被移出该集合索引的最高有效位的数量。在框2108中,计算设备可以将该集合索引的移出的最高有效位附加到所接收的物理地址的标签上,并且使用与移出的比特相组合的标签来作为标签。在框2110中,计算设备可以将对应的组件高速缓存标识符的集合偏移特性的值插入在组件高速缓存配置表中。在框2112中,计算设备可以使用所接收的物理地址的相同块偏移。因此,系统高速缓存中的组件高速缓存的物理地址取决于针对该系统高速缓存访问请求所接收的物理地址,其中,通过以下方式,根据所接收的集合索引来修改集合索引:对最高有效位进行移位,利用指定的值来替代被移位的比特,替代地使用相同的中间比特或者利用定制索引来替代它们,使用相同的低位比特,使用具有附加到其的移位的比特的相同的标签,以及使用相同的块偏移。

图22是示出用于动态地激活系统高速缓存存储器的组件高速缓存的一个方面方法2200,其中该系统高速缓存存储器根据集合和通路被分区成组件高速缓存。方法2200还可以视作为使用组件高速缓存来动态地分区系统高速缓存,这是由于激活的组件高速缓存的系统高速缓存位置中的一些或者全部位置可以被预留用于客户端,从而防止其它客户端使用该系统高速缓存的动态分区的部分。方法2200可以实现成图19中的方法1900的框1916-1920的一部分和图20中的方法2000的框2018-2022的一部分。方法2200可以由如本文所描述的计算设备(例如,系统高速缓存控制器)来执行。

在确定框2202中,计算设备可以针对与组件高速缓存标识符有关的组件高速缓存位置,对组件高速缓存预留表中的系统高速缓存位置的预留指示符进行检查。如本文所描述的,可以根据组件高速缓存配置表中用于该组件高速缓存标识符的集合移位、集合偏移和目标通路的组合来确定该组件高速缓存位置,从而确定系统高速缓存位置。在一个方面,还可以根据组件高速缓存活动通路表中用于该组件高速缓存标识符的活动通路,对预留的组件高速缓存位置进行调节。这些活动通路可以指示所预留的位置,而目标通路可以指示所预留的位置,或者仅仅指示该组件高速缓存可以使用和预留但并不必需使用或者预留的全部标签。

在确定框2204中,计算设备可以确定该组件高速缓存位置是否被预留。如上面所讨论的,组件高速缓存位置是否被预留可以取决于活动通路组件高速缓存表中的对应组件高速缓存的活动通路。响应于确定该组件高速缓存位置被预留(即,确定框2204=“是”),在框2202中,计算设备可以再次检查这些位置是否被预留。

响应于确定该组件高速缓存位置没有被预留(即,确定框2204=“否”),在框2206中,计算设备可以针对该组件高速缓存标识符,对活动通路表进行更新。针对该组件高速缓存标识符对活动通路表进行更新指示:系统高速缓存访问请求的该组件高速缓存可以对由该组件高速缓存标识符的集合移位、集合偏移和活动通路所表示的系统高速缓存存储器位置进行预留。在框2208中,计算设备可以针对该组件高速缓存,对组件高速缓存预留表中的这些系统高速缓存位置的预留指示符进行更新。一旦在组件高速缓存预留表中将系统高速缓存位置预留用于该组件高速缓存,则有效地从系统高速缓存的剩余部分中动态地分配这些位置(这是由于这些位置被预留用于该特定的请求客户端)。可以拒绝请求访问系统高速缓存的已被预留位置的其它客户端访问这些已预留位置,直到所预留的位置针对预留了这些位置的客户端被去激活为止。

图23是示出用于动态地去激活系统高速缓存存储器的组件高速缓存的一个方面方法2300,其中该系统高速缓存存储器根据集合和通路被分区成组件高速缓存。方法2300可以实现成图19中的方法1900的框1920的一部分,和实现成图20中的方法2000的框622的一部分。方法2300可以由如本文所描述的计算设备(例如,系统高速缓存控制器)来执行。在框2302中,计算设备可以从与系统高速缓存访问请求的组件高速缓存标识符相关联的组件高速缓存的所预留位置读取数据,和/或向其写入数据。在确定框2304中,计算设备可以确定该系统高速缓存访问是否完成。响应于确定该系统高速缓存访问没有完成(即,确定框2304=“否”),在框2302中,计算设备可以继续从该组件高速缓存的所预留位置读取数据,和/或向其写入数据。响应于确定该系统高速缓存访问已完成(即,确定框2304=“是”),在框2306中,计算设备可以对组件高速缓存预留表中的这些系统高速缓存位置的预留指示符进行更新,以释放/去激活该组件高速缓存所预留的位置。

在一个方面,为其预留了系统高速缓存空间的客户端可以动态地请求额外的或者更少的组件高速缓存空间,并且从而预留系统高速缓存空间。在方法2200中,请求更多空间的客户端可以针对还没有被预留的组件高速缓存的系统高速缓存位置来这样做。在方法2300中,请求更少空间的客户端可以通过完成对组件高速缓存的已预留系统高速缓存位置的仅仅一部分的访问,来请求更少的空间。

图24是示出用于动态地重新调整系统高速缓存存储器的组件高速缓存大小的一个方面方法2400,其中该系统高速缓存存储器根据集合和通路被分区成组件高速缓存。方法2400可以实现成图19中的方法1900的框1916-1920的一部分,和实现成图20中的方法2000的框2018-2022的一部分。方法2200可以由如本文所描述的计算设备(例如,系统高速缓存控制器)来执行。在框2402中,计算设备可以装载针对至少一个组件高速缓存标识符的奖励向量。如上面所讨论的,该奖励向量可以指示用于相关联的组件高速缓存的一个或多个高速缓存通路(其与和该奖励向量有关的组件高速缓存标识符相关联)以便进行扩展。可以在启动时间和/或运行时完成奖励向量的装载,并且可以将奖励向量存储在寄存器中。计算设备可以装载奖励向量中的全部或者一些奖励向量。在框2404中,计算设备可以接收针对至少一个组件高速缓存标识符的预留向量。如上面所讨论的,该预留向量可以指示被预留用于相关联的组件高速缓存(其与和该预留向量有关的组件高速缓存标识符相关联)的一个或多个高速缓存通路。

在确定框2406中,计算设备可以确定该预留向量的一个或多个高速缓存通路是否被另一个组件高速缓存预留。为了做出该确定,计算设备可以实现上面所讨论的方程。响应于确定该预留向量的高速缓存通路被另一个组件高速缓存预留(即,确定框2406=“是”),在框2408中,计算设备可以对该其它组件高速缓存进行去激活。对其它组件高速缓存进行去激活可以导致:解除该其它组件高速缓存所预留的高速缓存通路的预留,从而使得与该预留向量的高速缓存通路相重叠的高速缓存通路未被预留。响应于确定该预留向量的高速缓存通路未被预留(即,确定框2406=“否”),在框2410中,计算设备可以确定使用组件高速缓存是否包括使用相关联的奖励向量的高速缓存通路中的一个或多个高速缓存通路。

响应于确定使用组件高速缓存不包括使用相关联的奖励向量的高速缓存通路中的一个或多个高速缓存通路(即,确定框2410=“否”),在框2412中,计算设备可以预留这些未被预留的高速缓存通路以用于相关联的组件高速缓存。可以通过将包含所预留的高速缓存通路数据的预留向量写入寄存器来完成对高速缓存通路的预留。响应于确定使用该组件高速缓存包括使用相关联的奖励向量的高速缓存通路中的一个或多个高速缓存通路(即,确定框2410=“是”),在确定框2414中,计算设备可以确定该奖励向量的一个或多个高速缓存通路是否被另一个组件高速缓存预留。响应于确定该奖励向量的一个或多个高速缓存通路没有被另一个组件高速缓存预留(即,确定框2414=“否”),在框2412中,计算设备可以预留这些未被预留的高速缓存通路用于该相关联的组件高速缓存。响应于确定该奖励向量的一个或多个高速缓存通路被另一个组件高速缓存预留(即,确定框2414=“是”),在框2416中,计算设备可以对该其它组件高速缓存进行去激活。在框2412中,计算设备可以预留这些未被预留的高速缓存通路以用于该相关联的组件高速缓存。

图25示出了适合于结合各个方面来使用的示例性移动设备。移动设备2500可以包括耦合到触摸屏控制器2504和内部存储器2506的处理器2502。处理器2502可以是被设计为实现通用或特定处理任务的一个或多个多核集成电路。内部存储器2506可以是易失性存储器或非易失性存储器,还可以是安全和/或加密存储器,或者非安全和/或非加密存储器、或者其任意组合。可以利用的存储器类型的示例,包括但不限于:DDR、LPDDR、GDDR、WIDEIO、RAM、SRAM、DRAM、P-RAM、R-RAM、M-RAM、STT-RAM和嵌入式DRAM。触摸屏控制器2504和处理器2502还可以耦合到触摸屏面板2512,例如,电阻式感应触摸屏、电容感应触摸屏、红外线感测触摸屏等等。另外,计算设备2500的显示器并不需要具有触摸屏能力。

移动设备2500可以具有用于发送和接收通信的一个或多个无线信号收发机2508(例如,花生(Peanut)、蓝牙、紫蜂(Zigbee)、Wi-Fi、RF无线电装置)和天线2510,它们彼此之间相耦合和/或耦合到处理器2502。收发机2508和天线2510可以结合上面所提及的电路来使用,以实现各种无线传输协议栈和接口。移动设备2500可以包括蜂窝网络无线调制解调器芯片2516,后者经由蜂窝网络来实现通信并耦合到处理器。

移动设备2500可以包括耦合到处理器2502的外围设备连接接口2518。外围设备连接接口2518可以被单独地配置为接受一种类型的连接,或者被配置为接受多种类型的物理和通信连接、共同或专有连接(例如,USB、火线、雷电(Thunderbolt)或PCIe)。此外,外围设备连接接口2518还可以耦合到类似配置的外围设备连接端口(未示出)。

此外,移动设备2500还可以包括用于提供音频输出的扬声器2514。此外,移动设备2500还可以包括使用塑料、金属、或材料的组合所构成的壳体2520,以包含本文所讨论的所有部件或者一些部件。移动设备2500可以包括耦合到处理器2502的电源2522,例如一次性或可充电电池。此外,该可充电电池还可以耦合到外围设备连接端口,以便从移动设备2500之外的源接收充电电流。此外,移动设备2500还可以包括用于接收用户输入的物理按键2524。此外,移动设备2500还可以包括用于打开和关闭移动设备2500的电源按键2526。

上面所描述的各个方面还可以实现在各种各样的移动设备中,例如,如图26中所示的膝上型计算机2600。很多膝上型计算机包括触摸板触摸接口2617,后者服务成该计算机的指向设备,故可以接收拖动、滚动和滑动手势(其类似于上面所描述的在装备有触摸屏显示器的计算设备上所实现的那些手势)。通常,膝上型计算机2600包括耦合到易失性存储器2612和大容量非易失性存储器(例如,硬盘驱动器2613或者闪存)的处理器2611。另外,计算机2600可以具有用于发送和接收电磁辐射的一付或多付天线2608,这些天线2608可以连接到无线数据链路和/或耦合到处理器2611的蜂窝电话收发机2616。此外,计算机2600还可以包括耦合到处理器2611的软盘驱动器2614和压缩光盘(CD)驱动器2615。在笔记本配置中,计算机壳体包括全部都耦合到处理器2611的触摸板2617、键盘2618和显示器2619。该计算设备的其它配置可以包括(例如,经由USB输入)耦合到处理器的计算机鼠标或者跟踪球,如公众所知道的,这些部件也可以结合各个方面来使用。

用于在可编程处理器上运行以执行本文的各个方面的操作的计算机程序代码或“程序代码”,可以利用诸如C、C++、C#、Smalltalk、Java、JavaScript、Visual Basic、结构化查询语言(例如,Transact-SQL)、Perl之类的高级编程语言来编写,或者利用各种其它编程语言来编写。如本申请中所使用的计算机可读存储介质上所存储的程序代码或程序,可以指代其格式是处理器可理解的机器语言代码(例如,目标代码)。

将很多移动计算设备操作系统内核组织到用户空间(非特权代码运行的空间)和内核空间(特权代码运行的空间)。这种分隔在Android和其它通用公共许可证(GPL)环境中具有特别的重要性,其中在这些环境中,作为内核空间的一部分的代码必须是GPL许可的,而在用户空间中运行的代码可以不是GPL许可的。应当理解的是,这里所讨论的各种软件组件/模块可以实现在内核空间中,也可以实现在用户空间中,除非另外明确指出。

上述的方法描述和处理流程图仅仅是用作为说明性示例,而不是旨在要求或者隐含着必须以所给出的顺序来执行各个方面的步骤。如本领域普通技术人员所应当理解的,可以以任何顺序来执行上述的方面中的操作顺序。诸如“其后”、“转而”、“接着”等等之类的词语,并不旨在限制这些操作的顺序;这些词语仅仅只是用于引导读者遍历该方法的描述。此外,任何对权利要求元素的单数引用(例如,使用冠词“一个(a)”、“某个(an)”或者“该(the)”),不应被解释为将该元素限制为单数形式。

结合本文的各个方面描述的各种示例性的逻辑框、模块、电路和算法操作均可以实现成电子硬件、计算机软件或二者的组合。为了清楚地表示硬件和软件之间的这种可交换性,上面对各种示例性的部件、框、模块、电路和操作均围绕其功能进行了总体描述。至于这种功能是实现成硬件还是实现成软件,取决于特定的应用和对整个系统所施加的设计约束条件。熟练的技术人员可以针对每个特定应用,以变通的方式实现所描述的功能,但是,这种实现决策不应解释为背离本发明的保护范围。

用于执行本文所述功能的通用处理器、数字信号处理器(DSP)、专用集成电路(ASIC)、现场可编程门阵列(FPGA)或其它可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件部件或者其任意组合,可以用来实现或执行结合本文所公开的方面描述的用于实现各种示例性的逻辑、逻辑框、模块和电路的硬件。通用处理器可以是微处理器,或者,该处理器也可以是任何常规的处理器、控制器、微控制器或者状态机。处理器也可以实现为计算设备的组合,例如,DSP和微处理器的组合、若干微处理器、一个或多个微处理器与DSP内核的结合,或者任何其它此种结构。替代地,一些操作或方法可以由特定于给定的功能的电路来执行。

在一个或多个方面,本文所述功能可以用硬件、软件、固件或它们任意组合的方式来实现。当在软件中实现时,可以将这些功能存储成非暂时性计算机可读介质或者非暂时性处理器可读介质上的一个或多个指令或代码。本文所公开的方法或算法的操作,可以体现在处理器可执行软件模块中,后者可以位于非暂时性计算机可读存储介质或处理器可读存储介质上。非暂时性计算机可读或处理器可读存储介质可以是计算机或处理器能够存取的任何存储介质。举例而言,但非做出限制,这种非暂时性计算机可读介质或者处理器可读介质可以包括RAM、ROM、EEPROM、闪存、CD-ROM或其它光盘存储器、磁盘存储器或其它磁存储设备、或者能够用于存储具有指令或数据结构形式的期望的程序代码并能够由计算机进行存取的任何其它介质。如本文所使用的,磁盘和光盘包括压缩光盘(CD)、激光光盘、光盘、数字通用光盘(DVD)、软盘和蓝光光盘,其中磁盘通常磁性地复制数据,而光盘则用激光来光学地复制数据。上述的组合也应当包括在非暂时性计算机可读介质和处理器可读介质的保护范围之内。另外,一种方法或算法的操作可以作为一个代码和/或指令集或者其任意组合,位于非暂时性处理器可读介质和/或计算机可读介质上,其中该非暂时性处理器可读介质和/或计算机可读介质可以并入到计算机程序产品中。

为使本领域任何普通技术人员能够实现或者使用本发明,上面围绕所公开的方面进行了描述。对于本领域普通技术人员来说,对这些方面的各种修改是显而易见的,并且,本申请定义的总体原理也可以在不脱离本发明的精神或保护范围的基础上应用于其它方面。因此,本发明并不限于本文所示出的方面,而是与所附权利要求书和本文公开的原理和新颖性特征的最广范围相一致。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1