掌桥专利:专业的专利平台
掌桥专利
首页

缓存存储器请求流

文献发布时间:2023-06-19 11:35:49


缓存存储器请求流

相关申请的交叉引用

本申请要求于2019年2月13日提交的标题为“Caching Streams of MemoryRequests”的美国临时申请序列号62/805,167的优先权,该申请的全部内容通过引用并入本文。

背景技术

本说明书涉及具有集成电路设备的系统。

缓存是针对系统中的一个或多个不同的硬件设备存储从存储器取回的数据或者要写入存储器的数据的设备。硬件设备可以是集成到片上系统(SOC)中的不同组件。在本说明书中,通过缓存提供读取请求和写入请求的设备将被称为客户端设备。

缓存可以用于通过减少对主存储器的总体请求来减少功耗。另外,只要客户端设备可以访问缓存中所需的数据,就可以通过将主存储器以及通往主存储器的数据路径置于低功率状态来进一步节省功率。因此,缓存使用与总功耗相关,并且缓存使用的增加导致总功耗的减少。因此,依赖于电池电量的设备(例如移动计算设备)可以通过增加集成客户端设备的缓存使用来延长其电池寿命。

缓存通常被组织为具有多个道路的多个集合。请求的存储器地址用于标识放置缓存行的特定集合,如果必须更换现有的缓存行,则特定的缓存策略确定应该更换集合内的哪些道路。例如,缓存可以实施首先更换集合内最近最少使用的缓存行的缓存策略。

缓存通常是低级硬件设备,它们对正被缓存的地址的解释不具有可见性。换言之,传统的缓存没有用于确定该地址用于什么或该地址处存储什么类型的数据的机制。由于不相关的数据请求集可以竞争相同的缓存资源,这可能会导致缓存性能的效率低下,从而导致更少的缓存命中和更多的缓存未命中以及所得的更多存储器行程。

发明内容

本说明书描述了用于在由相关数据流(在本文中也称为“数据流”)驱动的缓存中实现缓存策略的技术。在本说明书中,流是在软件中彼此相关的多个存储器请求。例如,流可以包括对同一软件驱动器的所有指令请求。流还可以包括对同一软件驱动器的所有数据请求。

缓存可以通过检查不同存储器请求共有的页面级属性来标识数据流。然后,缓存可以将缓存存储器的不同部分分配给不同的数据流。因此,例如与数据请求相比,可以将指令请求分配给缓存的不同部分。该能力允许缓存基于数据的属性而不是仅基于地址范围、页面标识符或发出请求的客户端设备或客户端驱动器的标识来分配缓存部分。

可以实施本说明书中描述的主题的特定实施例,以便实现一个或多个以下优点。缓存可以通过使用页面级属性确定相关的存储器请求流来提高缓存的性能和使用。因此,缓存可以减少针对不同的存储器请求流的缓存资源的竞争,从而提高缓存命中率。在依赖于电池电量的移动设备中,提高缓存命中率减少了功耗并延长了电池寿命。另外,通过使用页面级属性,缓存可以将缓存的相同部分分配给具有生产者/消费者关系的客户端设备,从而有效地增加整个系统可用的缓存资源量。

在下面的附图和描述中陈述了本说明书的主题的一个或多个实施例的细节。主题的其他特征、方面和优点将通过描述、附图和权利要求而变得显而易见。

附图说明

图1是根据本公开的实施方式的示例系统的框图。

图2是根据本公开的实施方式的用于将页面级属性值分配给所分配的存储器页面的示例过程的流程图。

图3是根据本公开的实施方式的用于分配缓存的道路的示例过程的流程图。

图4是根据本公开的实施方式的用于使用专用于存储器请求流的缓存部分来为存储器请求服务的示例过程的流程图。

在各个附图中,相同的附图标记和名称指示相同的元件。

具体实施方式

图1是示例系统100的图。系统100包括通信地耦合至存储器设备140的片上系统(SOC)102。SOC 102具有使用缓存120的多个客户端设备110a、110b至110n,该缓存120被布置在通往存储器140的数据路径中。在该示例中,由于缓存120在单个SOC 102中缓存对多个客户端设备的数据请求,因此缓存120可以被称为系统级缓存。然而,下面描述的相同技术也可以用于仅缓存单个客户端设备或软件驱动器的存储器请求的其他缓存。

SOC 102是可以安装在任何适当的计算设备上或集成到任何适当的计算设备中的设备的示例,该计算设备可以被称为主机设备。因为本说明书中描述的技术特别适合于节省主机设备的功耗,所以当SOC 102安装在依赖于电池电量的移动主机设备(例如智能电话、智能手表或另一可穿戴计算设备、平板计算机或膝上型计算机,仅举几个示例)上时,SOC 102可能会特别有益。

缓存120是可以实施通过标识经过缓存120的不同的存储器请求流来分配缓存资源的缓存策略的缓存的示例。例如,缓存120的第一缓存部分和第二缓存部分可以分别分配给两个不同的流。示例SOC 102被图示为具有一个系统级缓存120。然而,SOC可以具有多个缓存,每个缓存可以是或可以不是系统级缓存。

SOC 102具有多个客户端设备110a至110n。客户端设备110a至110n中的每个客户端设备可以是任何适当的模块、设备或功能组件,这些模块、设备或功能组件被配置为通过SOC结构150读取数据并将其存储在存储器设备140中。例如,客户端设备可以是CPU、专用集成电路或SOC 102本身的低级组件,每个组件都能够发起通过SOC结构150的通信。

每个客户端设备110a至110n包括相应的地址转化单元(ATU),例如ATU 112a至112n。ATU 112a至112n负责将由在客户端设备上执行的过程提供的虚拟地址转化为已经或将要存储相应数据的存储器设备140中的物理地址。在一些实施方式中,ATU 112a至112n中的一个或多个被实施为存储器管理单元,其被配置为使用存储虚拟到物理地址转化的页表的硬件实施遍历来执行地址转化。

无论实施方式如何,当ATU 112a至112n接收到存储器请求时,ATU执行地址转化并生成具有所得的物理地址以及该物理地址所属的存储器中的页面的页面描述符的存储器请求。作为该过程的一部分,每个ATU 112a至112n可以被配置为用物理地址所属的存储器中的页面的页面级属性来填充页面描述符。

页面描述符可以具有与虚拟存储器系统的各个方面相关的多个属性的值。例如,页面描述符可以指定与页表本身相关的表格级属性以及与各个物理或虚拟地址相关的地址级属性。因此,页面级属性值可以是ATU生成并包括在存储器请求内的页面描述符的子集。页面级属性可以是页面描述符的基于页面的硬件属性。每个页面级属性值都为特定于该物理地址所属页面的属性指定值。

页面级属性的值可以由客户端设备110a至110n的软件驱动器指派。例如,当为客户端设备执行的软件驱动器请求在存储器140中分配页面时,软件驱动器可以指示ATU将特定页面级属性指派给那些页面。每个客户端设备可以执行一个或多个过程,例如过程114a至114b,并且每个过程可以指派它自己的页面级属性作为存储器分配请求的一部分。然后,这些过程生成将由相应ATU转换的虚拟地址,并且相应ATU将虚拟地址转化为物理地址,并在生成存储器请求时显示先前指派的页面级属性。

例如,图1图示了具有多个分配页面132a、132b、132c、132d和132e的存储器140。已通过在存储器140中分配页面的特定软件驱动器为页面中的每个页面指派相应的页面级属性值。例如,存储器140具有用于第一过程114a的指令页面132a以及用于在第一客户端设备110a上执行的第二过程114b的指令页面132b。存储器140还具有用于第二客户端110b的两个数据页面132c和132e。并且存储器140具有用于第一客户端110a的页表页面132d。

通过该示例,仅通过审查所指派的页面级属性,缓存120就可以在这些页面之间进行许多区分。例如,缓存120可以在第一过程114a和第二过程114b的指令之间进行区分。因此,缓存120可以将存储器请求的不同缓存资源分配给这些页面,使得两个过程不相互竞争缓存资源。

另外,缓存120可以借助于具有相同的页面级属性值7来确定两个数据页面132c和132e属于相同的数据流。因此,缓存120可以将存储器请求的相同缓存资源分配给这些页面中的任一个。

最后,缓存120可以通过检查页面132a、132b和132d的页面级属性来区分具有用于第一客户端110a上的过程的指令的页面和具有用于ATU 112a的页表数据的页面。

SOC结构150是SOC 102的通信子系统。SOC结构150包括允许客户端设备110a至110n彼此通信以及使用存储器设备140进行读取和写入数据的请求的通信途径。SOC结构150可以包括通信硬件的任何适当的组合,例如总线或专用互连电路系统。

系统100还包括允许在缓存120与存储器控制器130之间进行通信的通信途径以及允许在存储器控制器130与存储器设备140之间进行通信的芯片间通信途径。在一些实施方式中,SOC 102可以通过使一个或多个通信途径掉电来节省功率。备选地或另外,在一些实施方式中,SOC 102可以使存储器设备140掉电以进一步节省功率。作为另一示例,SOC 102可以进入其中针对一个或多个设备使相应时钟电路掉电的时钟切断模式。

缓存120位于SOC结构150和存储器控制器130之间的数据途径中。存储器控制器130可以处置去往和来自存储器设备140的请求。因此,来自客户端设备110a至110n的从存储器设备140读取或写入存储器设备140的请求经过缓存120。例如,客户端110a可以做出从存储器设备140读取的请求,该请求经过SOC结构150到达缓存120。缓存120可以在将请求转发给存储器设备140的存储器控制器130之前处置该请求。

缓存120可以缓存来自客户端设备110a至110n的读取请求、写入请求或两者。缓存120可以通过用存储在缓存数据中的数据响应请求而不是从存储器设备140获取数据来缓存来自客户端设备的读取请求。类似地,缓存120可以通过将新数据写入缓存而不是将新数据写入存储器设备140中来缓存来自客户端设备的写入请求。缓存120可以在稍后的时间执行回写,以将更新后的数据写入存储器设备140中。

缓存120可以具有专用缓存存储器,其可以使用专用寄存器或高速随机存取存储器来实施。缓存120可以实施将缓存存储器的不同部分(例如道路)分配给不同的相应的存储器请求流的缓存策略。因此,可以使用缓存存储器的相同分配部分来处置属于相同流的存储器请求。为了这样做,缓存120可以检查存储器请求中所包括的页面描述符的特定页面级属性,以确定哪些页面属于相同的存储器请求流。这允许缓存120确定属于不同页面的物理地址属于相同的存储器请求流。

这些技术的一个示例包括将缓存的不同部分分配给在同一客户端设备上执行的不同过程。例如,缓存120可以检查传入存储器请求的页面描述符,以便确定一些请求与第一过程114a拥有的页面相关,并且一些其他请求与第二过程114b拥有的页面相关。因此,为了防止这两个过程彼此竞争缓存资源,缓存120可以将缓存的第一部分分配给在客户端设备110a上执行的第一过程114a,并且可以将缓存的第二部分分配给在相同客户端设备上执行的第二过程114b。

另一示例包括将缓存的不同部分分配给不同的缓冲器。例如,当SOC是图形处理单元(GPU)时,每个客户端设备可以在图形处理管道中执行不同的功能。因此,仅举几个示例,可以为渲染缓冲器、纹理缓冲器和顶点缓冲器标识不同的数据流。

缓存120还可以被配置为实施甚至更完善的缓存行为。例如,如果第一过程114a是其数据被第二过程114b消耗的生产者过程,则缓存120可以检查传入存储器请求的页面描述符,以确定生产者过程和消费者过程都处于活动状态。在那种情况下,缓存120可以将缓存的单个部分分配给两个过程,并且每当读取缓存行时就使缓存行无效。在一些实施方式中,缓存仅将该更换策略应用于不执行推测读取的消费者过程。该配置可能使来自生产者过程的所有写入请求导致缓存命中,并且来自消费者过程的所有读取请求也导致缓存命中,因为在读取所有缓存行时使它们无效意味着过程所占用的缓存大小并没有持续增加。这继而允许缓存120将缓存存储器的较小部分分配给生产者和消费者过程,这通过释放缓存资源以供其他设备和过程使用来进一步提高缓存性能。另外,针对生产者-消费者过程的这种缓存行为节省了功率,因为当消费者过程读取它们时无效的缓存行将永远不需要写回到存储器。

缓存120可以使用控制器管线来处置来自SOC结构150的存储器请求。控制器管线实施了缓存逻辑,以确定缓存中是否存在数据或是否需要从存储器获取数据或将数据写入存储器。因此,当需要访问存储器时,例如在缓存未命中时,控制器管线还可以向存储器控制器130提供交易。

可以通过写入多个不同的页面级属性值来配置缓存120。可以将属性值写入缓存120的所保留的配置寄存器,例如特殊功能寄存器。缓存120可以将在配置寄存器中出现的相应属性值解释为指示应该为特定的数据流分配专用的缓存资源,并且配置寄存器中的每个属性值对应于应该分配缓存的专用部分的单独数据流。

在一些实施方式中,属性值可以指定通配符比特,使得缓存120可以在属性模式上匹配而不是仅在完全指定的属性值上匹配。属性模式可以包括与任何值相匹配的通配符比特。例如,属性模式可以是XX10,其中X可以是1或0。因此,以下比特序列都将与示例属性模式相匹配:0010、1110和1010。

缓存120的分配引擎可以被配置为使用写入缓存120的配置空间的属性值来分配缓存的部分。例如,分配引擎可以为具有第一属性值的页面级属性的存储器请求分配缓存的第一部分并且为具有与第二属性值相匹配的页面级属性的存储器请求分配缓存的第二部分。属性值可以在制造时预加载到缓存120上,或者可以在为存储器请求服务时动态地创建。

分配引擎可以生成控制器管线用于为来自SOC结构150的存储器请求服务的最终缓存配置。具体地,最终缓存配置可以指定将缓存存储器的哪些道路分配给哪些流,使得控制器管线可以确定在为传入存储器请求服务时使用哪些道路。备选地或另外,缓存120可以维持每个部分的配额,并使用硬件来计数已经使用了多少配额。

分配引擎可以使用缓存120的专用硬件电路系统来执行下面描述的分配技术。备选地或另外地,可以以软件来实施分配过程,并且分配引擎可以使主机设备的CPU执行分配算法。

图2是用于将页面级属性值指派给所分配的存储器页面的示例过程的流程图。该示例过程可以由执行能够修改页表条目的特定软件模块的任何适当的客户端设备执行。例如,客户端设备可以执行修改后的操作系统,该修改后的操作系统根据不同类型的数据流来修改页表条目。备选地或另外,客户端设备可以执行根据不同类型的数据流来修改页表条目的客户端应用软件。为了方便起见,将示例过程描述为由客户端设备执行,根据本说明书进行适当编程。

客户端设备为软件驱动器分配存储器区域的一个或多个页面(210)。该软件驱动器是在客户端设备上执行的软件模块。客户端设备可以在软件驱动器启动之前或之后或者在执行软件驱动器的过程中执行用于分配存储器的新请求的某个其他点分配存储器区域。

客户端设备确定存储器区域的一个或多个页面的页面级属性(220)。客户端设备的修改后的OS可以在存储器分配时自动地区分不同种类的页面。例如,OS可以区分指令页面和数据页面。

备选地或另外,客户端设备的OS可以支持允许软件驱动器在存储器分配时指派特定页面级属性的应用编程接口(API)。例如,OS不需要对页面级属性的值背后的解释有任何了解。相反,可以对软件驱动器本身进行编程,以为特定用例指派页面级属性。例如,软件驱动器可以为指令页面指派一个页面级属性,为数据页面指派不同的页面级属性,并且为页表数据页面指派另一页面级属性。

客户端设备修改页表以使页面级属性与所请求的存储器区域的一个或多个分配页面相关联(230)。换言之,客户端设备在页表中存储每个分配页面和每个指派的页面级属性值之间的关联。

图3是用于分配缓存的道路的示例过程的流程图。该示例过程可以由缓存的一个或多个组件来执行。将示例过程描述为由SOC上的缓存的分配引擎执行,根据本说明书进行适当编程。

分配引擎标识用于分配的存储器请求流(310)。分配引擎可以以多种方式标识流。如上所述,缓存可以具有在制造前或制造后被配置的配置寄存器,其指定属性值或属性模式,并且分配引擎可以将每个属性值或模式解释为需要专用缓存存储器的单独流。

备选地或另外,缓存可以通过监测存储器业务来标识存储器请求流。例如,缓存可以维持所有存储器请求中的页面级属性的最常见值的统计信息,并且可以为最常见的页面级属性值分配缓存的专用部分。

许多不同的事件可以通过标识存储器请求流来触发缓存开始分配过程。例如,缓存可以在启动时间开始分配。作为另一示例,SOC可以被配置为在SOC检测到执行或使用改变时自动地生成重新分区触发事件。触发事件可以是通过系统接收到的信号或数据,该信号或数据指示配置寄存器已被修改并且缓存的各个部分需要重新分配。

分配引擎标识与数据流相关联的页面级属性值(320)。如上所述,每个存储器请求可以包括从地址转化过程生成的页面描述符,该页面描述符可以包括页面级属性值。

存储器请求流可以与多于一个页面级属性值相关联。例如,配置寄存器还可以指定与流标识符的关联。因此,缓存可以使用所指定的关联以标识流的页面级属性值,而不仅仅是配置寄存器中页面级属性值的出现。在多个页面级属性值的情况下,缓存可以为所标识的页面级属性值中的每个页面级属性值重复(至少部分地)示例过程。另外,如上所述,页面级属性值可以指定通配符比特,使得缓存有效地使用属性模式。

分配引擎将缓存的一部分分配给具有页面级属性值的请求(330)。属性引擎可以分配缓存的任何适当部分,例如一个或多个行、集合、道路或这些的某种组合。在一些实施方式中,部分被排他地分配,使得只有具有所指定的页面级属性值的存储器请求才可以使用所分配的缓存资源。

如上所述,分配过程可以基于页面级属性值区分不同类型的页面。例如,分配引擎可以将指令流与数据流区分开,并且可以将缓存的一部分分配给指令流,并且将缓存的另一部分分配给数据流。

附加地,分配引擎可以将由客户端设备执行的第一指令流与由相同客户端设备或不同的第二客户端设备执行的第二指令流区分开,并且可以将缓存的不同部分分配给不同的指令流。

另外,分配引擎可以区分不同类型的数据页面。例如,分配引擎可以将缓存的不同部分分配给不同的数据页面或属于不同的存储器缓冲器的页面。在一些实施方式中,分配引擎可以为存储特定类型的数据结构的页面赋予特殊的优先级,并且可以为每个页面分配不同的缓存资源量。例如,页表是对缓存利用有重大影响的一个数据缓冲器。因此,分配引擎可以将存储页表数据的数据缓冲器与存储其他种类的数据的缓冲器区别对待。例如,分配引擎可以为页表页面分配1MB的缓存存储器,并且将4kb的缓存存储器分配给其他种类的数据缓冲器。

然后,缓存基于来自SOC上的客户端设备的存储器请求的页面描述符中的页面级属性值为该存储器请求服务(340)。在这样做时,缓存可以有效地将缓存的各个部分专用于不同的存储器请求流。

图4是用于使用专用于存储器请求流的缓存部分为存储器请求服务的示例过程的流程图。该示例过程可以由缓存的一个或多个组件来执行。将示例过程描述为由SOC上的缓存(例如图1的缓存120)执行。

缓存接收存储器请求(410)。存储器请求可以由特定客户端设备的地址转化单元生成,并且可以包括物理地址和在地址转化过程期间生成的页面描述符。

缓存确定是否已经为请求分配了缓存行(420)。换言之,如果已经为请求分配了缓存行,则缓存可以完全绕过页面级属性的检查。

如果已经为请求分配了缓存行,则缓存可以使用先前分配的缓存行为该请求服务(分支到430)。要注意的是,在这种场景中,即使特定的存储器请求流具有专用缓存部分,如果该请求先前已缓存在不同部分中,则缓存也可以使用不同部分来为存储器请求服务。在一些实施方式中,为了提高缓存的命中率,系统可以从先前被分配给专用于该存储器请求流的部分的部分移动缓存行。

如果没有为请求分配缓存行(420),则缓存标识与存储器请求相关联的页面描述符的页面级属性值(440)。页面描述符可以包括转化过程的一个或多个属性,例如与存储器请求相关联的页表的地址。缓存可以标识与物理地址所属的页面相关的页面描述符的页面级属性。

缓存确定页面级属性值是否具有专用缓存部分(450)。例如,缓存可以将页面级属性值与存储在配置寄存器中的一个或多个属性值进行比较。响应于确定页面级属性值具有专用缓存部分,缓存通过使用专用缓存部分来为存储器请求服务(460)。否则,缓存通过使用默认缓存策略来为存储器请求服务(470)。

因此,缓存可以标识不同的存储器请求流,并基于它们相应的页面级属性值将缓存存储器的不同部分分配给相应流。附加地,缓存可以使用页面级属性值将不同的更换策略指派给不同的存储器请求流。

例如,缓存可以将缓存存储器的一些部分分配给“写入”指令,并且将缓存存储器的一些其他部分分配给“读取”指令。例如,缓存存储器的一部分可以被标记为WRITE并分配给具有写入属性的数据流,并且缓存存储器的一部分可以被标记为READ并分配给具有读取属性的数据流,以减少从动态随机存取存储器(DRAM,例如存储器140)的过度获取。如果传入的存储器请求包括写入属性,并且缓存确定缓存存储器的WRITE存储器部分专用于请求的写入属性,则缓存通过将请求的数据写入缓存存储器的WRITE部分来为请求服务。例如,WRITE存储器部分可以与WRITE属性值相关联。缓存可以将传入存储器请求的页面级属性值与WRITE属性值进行比较,以确定WRITE存储器部分是否专用于传入的存储器请求。类似地,如果传入的存储器请求包括读取属性,并且缓存确定READ缓存存储器部分专用于具有读取属性的请求,则缓存可以从缓存存储器的READ部分获取行,并且无需向存储器控制器转发请求。

在一些实施方式中,还可以完善缓存以使用页面级属性来增加缓存使用,同时还防止数据的过度获取。例如,一些客户端设备对压缩数据进行操作,并且页面级属性可以用于确定哪些页面正在存储压缩数据。例如,GPU可能正在使用帧缓冲器压缩来读取和写入压缩的帧缓冲器数据。在这些情况下,缓存不需要为来自客户端设备的读取和写入分配完整缓存行。相反,缓存可以取决于所使用的压缩级别而仅分配一部分缓存行。例如,如果压缩数据仅是缓存行的一半大小,例如64字节中的32字节,则缓存可以在同一缓存行中有效地分配两个不同的地址。即,如果传入的读取请求的页面级属性指示该页面存储了压缩数据,则缓存可以执行部分读取并将数据仅存储在缓存行的一半中。在一些实施方式中,缓存以完整缓存行为基础管理脏位。因此,如果修改了缓存行的任一部分,则即使对于未修改的部分,缓存可能也需要执行将完整缓存行写入存储器。

缓存还可以将请求的页面级属性值转换为使用基于分区标识符的缓存策略的缓存的分区标识符(PID)。通常,分区是缓存资源的一部分,其被分配用于缓存对特定存储器区域的请求。通常,在分区和存储器区域之间存在对应关系,该对应关系由访问该存储器区域的一个或多个客户端设备使用。

为了执行转换,缓存可以使用页面级属性值和发出请求的设备的标识符来查找用于为请求服务的分区标识符。这提供了页面级属性与用于这些页面的缓存的实际分配和更换策略之间的间接级别。该特征可以用于基于其页面级属性为不同的缓冲器(例如上述的不同CPU或GPU缓冲器)分隔分区。

在一些实施方式中,用来自页面级属性值的一个或多个比特来替换分区标识符的最低有效位。为了支持该特征,可以将客户端设备限制为仅设置分区标识符的最高有效位。例如,如果缓存支持64个存储器分区,那么可以限制仅枚举32个分区标识符的客户端设备。

缓存还可以使用页面级属性来解决多个客户端设备之间的分区命名冲突。如果多个客户端设备例如在上面提及的生产者/消费者上下文中共享相同的缓冲器,则每个客户端设备可以通过不同的标识符来引用相同的缓存分区。页面级属性可以允许缓存将缓冲器视为单个分区。

为了这样做,缓存可以使用特殊功能寄存器来维持页面级属性掩码和仅在缓存内使用的本地分区标识符(PID)之间的映射。因此,当请求传入时,缓存可以将页面级属性转换为本地PID。然后,缓存可以使用本地PID而不是由客户端设备供应的PID为请求服务。因此,当缓存为来自利用不同PID引用同一缓冲器的两个不同的客户端设备的请求服务时,缓存将基于缓冲器的页面级属性将不同的外部PID映射到相同的本地PID。客户端设备可能仍然负责使用外部PID取决于系统的执行上下文而启用或禁用分区。

可以在数字电子电路系统、有形实施的计算机软件或固件、计算机硬件(包括在本说明书中所公开的结构及其结构等效物)或者它们中的一个或多个的组合中实施本说明书中描述的主题和功能操作的实施例。可以将本说明书中描述的主题的实施例实施为一个或多个计算机程序,即,在有形的非暂时性存储介质上编码以由数据处理装置执行或者控制该数据处理装置的操作的计算机程序指令的一个或多个模块。计算机存储介质可以是机器可读存储设备、机器可读存储衬底、随机或串行存取存储器设备或者它们中的一个或多个的组合。备选地或者另外,程序指令可以编码在人工生成的传播信号上,例如机器生成的电气、光学或者电磁信号,生成该信号是为了对信息进行编码以便传输给合适的接收器装置供数据处理装置执行。

术语“数据处理装置”是指数据处理硬件,并且涵盖了用于处理数据的所有种类的装置、设备和机器,包括例如可编程处理器、计算机或者多个处理器或计算机。该装置还可以是或还包括专用逻辑电路系统,例如FPGA(现场可编程门阵列)或者ASIC(专用集成电路)。除了硬件之外,该装置可以可选地包括为计算机程序创建执行环境的代码,例如构成处理器固件、协议栈、数据库管理系统、操作系统或者它们中的一个或多个的组合的代码。

可以用任何形式的编程语言(包括编译语言或解释语言或者陈述性语言或程序语言)来编写计算机程序(这也可以称为或者描述为程序、软件、软件应用、app、模块、软件模块、脚本或代码),并且可以按照任何形式(包括作为独立式程序或者作为模块、组件、子例程或适合用于计算环境的其他单元)来部署计算机程序。程序可以但并非必须与文件系统中的文件相对应。可以将程序存储在保持其他程序或者数据(例如存储在置标语言文档中的一个或多个脚本)的文件的一部分中,存储在专用于探讨中的程序的单个文件中,或者存储在多个协作文件(例如存储一个或多个模块、子程序或者部分代码的文件)中。可以将计算机程序部署为在一个计算机上执行或者在位于一个站点处或分布在多个站点上并且通过数据通信网络互连的多个计算机上执行。

一个或多个计算机的系统被配置为执行特定操作或动作意味着该系统已经在其上安装了软件、固件、硬件或其组合,其在操作中使该系统执行操作或动作。一个或多个计算机程序被配置为执行特定操作或动作意味着一个或多个程序包括在由数据处理装置执行时使该装置执行操作或行动的指令。

如本说明书中所使用的,“引擎”或“软件引擎”是指提供与输入不同的输出的硬件实施或软件实施的输入/输出系统。引擎可以实施在专用数字电路系统中或者实施为要由计算设备执行的计算机可读指令。可以在任何适当类型的计算设备(例如服务器、移动电话、平板计算机、笔记本计算机、音乐播放器、电子书阅读器、膝上型计算机或台式计算机、PDA、智能电话或者其他固定或便携式设备)上实施每个引擎,其包括一个或多个处理器和计算机可读介质。附加地,两个或多个引擎可以在同一计算设备上实施或在不同的计算设备上实施。

可以通过一个或多个可编程计算机来执行本说明书中描述的过程和逻辑流程,该一个或多个可编程计算机执行一个或多个计算机程序以通过操作输入数据并且生成输出来执行功能。过程和逻辑流程也可以由专用逻辑电路系统(例如FPGA或ASIC)或者专用逻辑电路系统和一个或多个编程计算机的组合执行。

适合执行计算机程序的计算机可以基于通用或专用的微处理器或者两者或者任何其他种类的中央处理单元。通常,中央处理单元将接收来自只读存储器或者随机存取存储器或者两者的指令和数据。计算机的必要元件是用于履行或执行指令的中央处理单元以及用于存储指令和数据的一个或多个存储器设备。中央处理单元和存储器可以由专用逻辑电路系统补充或者并入到该专用逻辑电路系统中。通常,计算机还将包括用于存储数据的一个或者多个海量存储设备(例如磁盘、磁光盘或者光盘),或者计算机将可操作地耦合以接收来自该海量存储设备的数据或者将数据输送给该海量存储设备或者进行两者。然而,计算机不需要具有这种设备。而且,计算机可以嵌入到另一设备中,例如仅举数例,移动电话、个人数字助理(PDA)、移动音频或视频播放器、游戏机、全球定位系统(GPS)接收器或者便携式存储设备(例如通用串行总线(USB)闪存驱动器)。

适合于存储计算机程序指令和数据的计算机可读介质包括所有形式的非易失性存储器、介质和存储器设备,包括例如半导体存储器设备(例如EPROM、EEPROM和闪存设备);磁盘(例如内部硬盘或者可移除盘);磁光盘;以及CD ROM盘和DVD-ROM盘。

为了提供与用户的交互,可以在主机设备上实施本说明书中描述的主题的实施例,该主机设备具有:用于向用户显示信息的显示设备,例如CRT(阴极射线管)或者LCD(液晶显示器)监测器;以及键盘和指向设备,例如鼠标、轨迹球或存在敏感型显示器或其他表面,用户可以通过该键盘和该指向设备来将输入提供给计算机。其他种类的设备也可以用于提供与用户的交互;例如提供给用户的反馈可以是任何形式的传感反馈,例如视觉反馈、听觉反馈或者触觉反馈;并且可以以任何形式(包括声学输入、语音输入或者触觉输入)来接收来自用户的输入。另外,计算机可以通过将文档发送给用户所使用的设备并且接收来自该设备的文档;例如通过响应于从web浏览器接收的请求来将网页发送给用户的设备上的web浏览器来与用户交互。而且,计算机可以通过将文本消息或其他形式的消息发送给运行消息收发应用的个人设备(例如智能手机)并且接收来自用户的响应消息作为回应来与用户交互。

除了上述实施例之外,以下实施例也是创新性的:

虽然本说明书包含了许多具体实施细节,但是不应该将这些细节解释为对任何发明的范围或者可能被要求保护的内容的范围的限制,而是作为可以针对特定发明的特定实施例的特征的描述。在本说明书中在单独实施例的上下文中描述的某些特征还可以组合地实施在单个实施例中。相反,在单个实施例的上下文中描述的各种特征也可以单独地或者按照任何合适的子组合实施在多个实施例中。而且,虽然上文可以将特征描述为以某些组合的方式起作用,甚至描述为最初要求这样,但是来自所要求保护的组合的一个或多个特征在一些情况下可以从组合中切除,并且所要求保护的组合可以针对子组合或者子组合的变型。

类似地,虽然在附图中按照特定顺序描绘了操作,但是不应该将其理解为需要按照所示的特定顺序或者按照相继顺序来执行这种操作,或者执行所有图示的操作以实现期望的结果。在某些情况下,多任务处理和并行处理可能是有利的。而且,不应该将在上述实施例中的各种系统模块和组件的分离理解为在所有实施例中都需要这种分离,并且应该理解,所描述的程序组件和系统通常可以一起集成在单个软件产品中或者封装到多个软件产品中。

已经描述了本主题的特定实施例。其他实施例在以下权利要求的范围内。例如,在权利要求中叙述的动作可以按照不同的顺序来执行并且仍然实现期望的结果。作为一个示例,附图中描绘的过程不一定需要所示的特定顺序或相继顺序来实现期望的结果。在某些一些情况下,多任务处理和并行处理可能是有利的。

相关技术
  • 缓存存储器请求流
  • 高速缓存存储器管理事务性存储器访问请求
技术分类

06120112979198