首页> 中国专利> 用于在硬件中保存有损失的元数据的元物理地址空间

用于在硬件中保存有损失的元数据的元物理地址空间

摘要

本发明涉及用于在硬件中保存有损失的元数据的元物理地址空间。本文描述用于保存有损失的元数据的元物理地址空间的方法和设备。遇到引用数据项的数据地址的显式或隐式元数据访问操作。硬件将数据地址修改成包括元物理扩展的元数据地址。元物理扩展在数据地址空间上重叠一个或多个元物理地址空间。包括元物理扩展的元数据地址的一部分用于搜索保存数据项的高速缓冲存储器的标签阵列。因此,元数据访问操作仅根据元数据地址扩展来命中高速缓存的元数据条目。但是,由于元数据保存在高速缓存中,所以元数据可能与数据竞争高速缓存中的空间。

著录项

  • 公开/公告号CN101770429A

    专利类型发明专利

  • 公开/公告日2010-07-07

    原文格式PDF

  • 申请/专利权人 英特尔公司;

    申请/专利号CN200910113666.7

  • 申请日2009-12-30

  • 分类号G06F12/08(20060101);G06F12/10(20060101);

  • 代理机构72001 中国专利代理(香港)有限公司;

  • 代理人朱海煜;王丹昕

  • 地址 美国加利福尼亚州

  • 入库时间 2023-12-18 00:10:00

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2018-02-16

    未缴年费专利权终止 IPC(主分类):G06F12/08 授权公告日:20140910 终止日期:20161230 申请日:20091230

    专利权的终止

  • 2014-09-10

    授权

    授权

  • 2010-09-08

    实质审查的生效 IPC(主分类):G06F12/08 申请日:20091230

    实质审查的生效

  • 2010-07-07

    公开

    公开

说明书

技术领域

本发明涉及处理器执行领域,具体来说,涉及指令组的执行。

交叉引用

本申请与下列同此提交的专利申请相关:美国专利申请No.12/346518(代理机构卷号P29129),标题为“在硬件中登记用户处理程序用于事务存储器事件处理”,Gad Sheaffer等人,2008年12月30日提交;美国专利申请No.12/346539(代理机构卷号P29131),标题为“用于事务存储器系统中的硬件属性的存储器模型”,Gad Sheaffer等人,2008年12月30日提交;美国专利申请No.12/346530(代理机构卷号P29130),标题为“事务存储器(TM)系统中的读和写监视属性”,Gad Sheaffer等人,2009年12月30日提交;美国专利申请No.12/346543(代理机构卷号P29132),标题为“扩展高速缓存相干性协议以支持本地缓冲数据”,Gad Sheaffer等人,2008年12月30日提交。

背景技术

半导体加工和逻辑设计方面的进步允许在集成电路装置上可存在的逻辑数量的增加。因此,计算机系统配置已经从系统中的单个或多个集成电路演进成单独集成电路上存在的多个核和多个逻辑处理器。处理器或集成电路通常包括单个处理器芯片,其中处理器芯片可包括任何数量的核或逻辑处理器。

集成电路上数量不断增加的核和逻辑处理器使更多软件线程能够同时执行。但是,可同时执行的软件线程的数量的增加引起使软件线程之间所共享的数据同步的问题。多个核或者多个逻辑处理器系统中访问共享数据的一种常见解决方案包括使用加锁来保证跨多个对共享数据访问的互斥。但是,运行多个软件线程的不断增加的能力可能引起错误争用和执行的串行化。

例如,考虑保存共享数据的哈希表。对于加锁系统,编程人员可对整个哈希表加锁,从而允许一个线程访问整个哈希表。但是,其它线程的吞吐量和性能可能受到不利影响,因为它们在释放加锁之前无法访问哈希表中的任何条目。备选地,可对哈希表中的各条目加锁。不管怎样,在将这个简单示例推延到大的可缩放程序之后,很显然,加锁争用、串行化、细粒度同步和死锁避免的复杂度成为编程人员非常棘手的负担。

另一种最近的数据同步技术包括使用事务存储器(TM)。事务执行通常包括运行分组的多个微操作、操作或指令。在以上示例中,两个线程在哈希表中运行,并且其存储器访问被监视/跟踪。如果两个线程访问/改变同一个条目,则可执行冲突解决以确保数据有效性。一种类型的事务执行包括软件事务存储器(STM),其中存储器访问、冲突解决、中止任务和其它事务任务的跟踪通过软件来执行,通常无需硬件支持。

另一种类型的事务执行包括硬件事务存储器(HTM)系统,其中包含硬件以支持访问跟踪、冲突解决和其它事务任务。先前,实际存储器阵列采用附加位来扩展,以便保存例如用于跟踪读、写和缓冲的硬件属性等信息,因此,数据随来自处理器的数据一起传播到存储器。这种信息通常认为是持久不变的,即,它在高速缓存收回(cacheeviction)时不会丢失,因为信息随数据在整个存储器层级结构中传播。然而,这种持久不变性在整个存储器层级结构系统施加更大开销。

存储相似信息的其它先前尝试已经通过扩展或添加与数据阵列分离的其它结构来实现,这些结构通常保存有损失的信息(即收回时丢失的信息),因为该信息没有随数据在整个存储器层级结构中传播。但是,保存这种数据的附加结构可能很昂贵。

发明内容

本发明一方面提供一种设备,包括:数据高速缓冲存储器,包括用于保存与数据项关联的有损失的元数据的第一数据条目,所述数据项保存在所述数据高速缓冲存储器的第二数据条目中。

本发明另一方面提供一种设备,包括:高速缓冲存储器的数据阵列,包括第一数据条目和第二数据条目;以及所述高速缓冲存储器的标签阵列,包括与所述第一数据条目关联的标签条目,其用于保存指明所述数据条目保存数据的物理值和指明所述数据条目保存数据项的元数据的元物理值,所述数据项保存在所述数据阵列的所述第二数据条目中。

本发明另一方面提供一种处理器,包括:高速缓冲存储器;以及耦合到所述高速缓冲存储器以便执行以下操作的逻辑:接收引用数据项的地址的至少一部分;将所述地址的所述部分与元物理扩展关联;以及确定高速缓冲存储器的元数据条目,以便根据所述地址和所述元物理扩展来访问与所述高速缓冲存储器的数据项条目中保存的数据项关联的元数据。

本发明另一方面提供一种设备,包括:高速缓冲存储器的数据阵列;地址转换逻辑,用于根据数据比元数据的压缩比将关联所述数据阵列的数据条目中的数据项的数据地址转换成关联所述高速缓冲存储器中的所述数据阵列的元数据条目的元数据地址;以及控制逻辑,耦合到所述地址转换逻辑和数据阵列,用于响应接收到引用所述数据地址的元数据访问操作和所述地址转换逻辑转换所述数据地址而访问所述数据阵列的所述元数据条目。

本发明另一方面提供一种方法,包括:遇到引用所述高速缓冲存储器的数据条目中保存的数据项的数据地址的元数据操作;从所述数据地址确定元数据地址;根据所述元数据地址来确定所述高速缓冲存储器的元数据条目;以及响应确定所述元数据条目而访问所述元数据条目中的元数据。

附图说明

附图中的各图以举例而不是限制的方式来说明本发明。

图1示出包括能够同时执行多个软件线程的多个处理元件的处理器的一个实施例。

图2a示出用于保存数据的元数据的元物理地址(metaphysicaladdress)空间的一个实施例。

图2b示出用于保存数据的元数据的元物理地址空间的另一个实施例。

图3a示出支持对元物理地址空间的访问的结构的一个实施例。

图3b示出支持对元物理地址空间的访问的结构的另一个实施例。

图4示出用于将数据压缩成元数据的一个实施例。

图5示出用于将数据压缩成元数据的另一个实施例。

图6示出访问数据的元数据的方法的流程图。

具体实施方式

在以下描述中,提出例如用于事务执行的具体硬件结构的示例、访问监视器的具体类型和实现、具体高速缓存实现、高速缓存相干模型的具体类型、具体数据粒度、以及存储器访问和位置的具体类型等的许多具体细节,以便提供对本发明的透彻了解。然而,本领域的技术人员会清楚地知道,这些具体细节不一定要用于实施本发明。在其它情况下,没有详细描述例如通过软件的事务的编码、事务的划分、具体和备选多核和多线程处理器架构、具体编译器方法/实现以及微处理器的具体操作细节等的众所周知的组件或方法,以免不必要地混淆对本发明的理解。

本文所述的方法和设备用于支持保存有损失的元数据的元物理地址空间。具体来说,元数据的元物理地址空间主要参照支持事务存储器系统来论述。但是,用于支持保存元数据的元物理地址空间的方法和设备并不局限于此,因为它们可通过保存关联数据项的元数据的存储器架构来实现。

参照图1,说明能够同时执行多个线程的处理器的一个实施例。注意,处理器100可包括用于硬件事务执行的硬件支持。处理器100还可与硬件事务执行结合或者单独地提供软件事务存储器(STM)的硬件加速、STM的单独执行或者其组合、如混合事务存储器(TM)系统的硬件支持。处理器100包括任何处理器,例如微处理器、嵌入式处理器、数字信号处理器(DSP)、网络处理器或者执行代码的其它装置。如图所示,处理器100包括多个处理元件。

在一个实施例中,处理元件表示线程单元、进程单元、上下文、逻辑处理器、硬件线程、核和/或任何其它元件,它能够保存处理器的状态、如执行状态或架构状态。换言之,在一个实施例中,处理元件表示能够与例如软件线程、操作系统、应用程序或其它代码等代码单独关联的任何硬件。物理处理器通常表示集成电路,它可能包括任何数量的其它处理元件、如核或硬件线程。

核通常表示位于集成电路上、能够保持独立架构状态的逻辑,其中各独立保持的架构状态与至少一部分专用执行资源关联。与核相比,硬件线程通常表示位于集成电路上、能够保持独立架构状态的任何逻辑,其中独立保持的架构状态共享对执行资源的访问。可以看到,当某些资源被共享而其它资源专用于架构状态时,核与硬件线程的命名之间的线路重叠。核和硬件线程又往往被操作系统看作是单独的逻辑处理器,其中操作系统能够单独调度各逻辑处理器上的操作。

如图1所示,物理处理器100包括两个核、即核101和102,它们共享对较高级高速缓存110的访问。虽然处理器100可包括不对称核、即具有不同配置、功能单元和/或逻辑的核,但示出的是对称核。因此,示为与核101相同的核102不作详细论述,以免重复论述。另外,核101包括两个硬件线程101a和101b,而核102包括两个硬件线程102a和102b。因此,软件实体、如操作系统可能将处理器100看作4个独立处理器,即,能够同时执行4个软件线程的4个逻辑处理器或处理元件。

在这里,第一线程与架构状态寄存器101a关联,第二线程与架构状态寄存器101b关联,第三线程与架构状态寄存器102a关联,以及第四线程与架构状态寄存器102b关联。如图所示,架构状态寄存器101a在架构状态寄存器101b中复制,因此单独的架构状态/上下文能够被存储用于逻辑处理器101a和逻辑处理器101b。例如重命名分配器逻辑130中的指令指针和重命名逻辑等其它较小资源对于线程101a和101b也可复制。例如重排序/引退单元135中的重排序缓冲器、ILTB 120、加载/存储缓冲器和队列等部分资源可通过划分来共享。例如通用内部寄存器、页表基址寄存器、低级数据高速缓存和数据TLB 115、执行单元140和无序单元135的部分等其它资源可能完全共享。

处理器100通常包括其它资源,它们可被完全共享、通过划分来共享或者由处理元件专用或专用于处理元件。图1中,示出具有处理器的说明性功能单元/资源的纯示范处理器的一个实施例。注意,处理器可包括或省略这些功能单元的任一个,以及包括未示出的任何其它已知功能单元、逻辑或固件。

如图所示,处理器100包括总线接口模块105,以便与处理器100外部的例如系统存储器175、芯片组、北桥或其它集成电路等装置进行通信。存储器175可以专用于处理器100或者由系统中的其它装置共享。较高级或更外层高速缓存110将高速缓存从较高级高速缓存110最近取出的元素。注意,较高级或更外层表示从执行单元增加或者进一步远离执行单元的高速缓存级。在一个实施例中,较高级高速缓存110是第二级数据高速缓存。但是,较高级高速缓存110并不局限于此,因为它可与指令高速缓存关联或者包括指令高速缓存。追踪高速缓存、即一种类型的指令高速缓存而是可耦合在解码器125之后,以便存储最近解码的追踪。模块120还可能包括预测待执行/采取的分支的分支目标缓冲器以及存储指令的地址转换条目的指令转换缓冲器(I-TLB)。

解码模块125耦合到取单元(fetch unit)120,以便对所取出的元素进行解码。在一个实施例中,处理器100与定义/指定在处理器100上可执行的指令的指令集架构(ISA)关联。在这里,ISA所识别的机器代码指令通常包括称作操作码的指令的一部分,它引用/指定待执行的指令或操作。

在一个示例中,分配器和重命名器块130包括保留资源的分配器、如寄存器文件,以便存储指令处理结果。但是,线程101a和101b可能能够无序执行,其中分配器和重命名器块130还保留其它资源、如重排序缓冲器,以便跟踪指令结果。单元130还可包括寄存器重命名器,以便将程序/指令引用寄存器重命名为处理器100内部的其它寄存器。重排序/引退单元135包括例如上述重排序缓冲器、加载缓冲器和存储缓冲器等组件,以便支持无序执行的指令的无序执行和稍后的按序引退。

在一个实施例中,调度器和执行单元块140包括调度执行单元上的指令/操作的调度器单元。例如,在具有可用浮点执行单元的执行单元的端口上调度浮点指令。还包括与执行单元关联的寄存器文件,以便存储信息指令处理结果。示范执行单元包括浮点执行单元、整数执行单元、转移执行单元、加载执行单元、存储执行单元和其它已知的执行单元。

较低级数据高速缓存和数据转换缓冲器(D-TLB)150耦合到执行单元140。数据高速缓存将存储最近使用/操作的元素、如数据操作数,它们可能保存在存储器相干状态。D-TLB将存储最近虚拟/线性到物理地址转换。作为一个特定示例,处理器可包括页表结构,以便将物理存储器分为多个虚拟页面。

在一个实施例中,处理器100能够硬件事务执行、软件事务执行或者它们的组合或混合。又可称作代码的临界或原子段的事务包括分组的将要作为原子组执行的指令、操作或微操作。例如,指令或操作可用于划分事务或临界段。在一个实施例中,下面更详细地进行描述,这些指令是指令集(如指令集架构(ISA))的一部分,它们是由处理器100的硬件、如上述解码器可识别的。这些指令在从高级语言编译成硬件可识别汇编语言时通常包括操作代码(操作码)或者解码器在解码阶段中识别的指令的其它部分。

在事务的执行期间,在提交事务之前,通常没有使对存储器的更新全局可见。作为一个示例,对某个位置的事务写入可能是本地线程可见的,然而,响应来自另一个线程的读取,直到提交包括事务写入的事务时才转发写数据。在事务仍然未决的同时,跟踪从存储器加载以及写入存储器的数据项/元素,下面更详细地进行论述。一旦事务达到提交点,如果对于该事务尚未检测到冲突,则提交事务,并且使事务期间所进行的更新全局可见。

但是,如果事务在其未决期间失效,则该事务被中止并且可能重新开始,而没有使更新全局可见。因此,本文所使用的“事务的未决”表示已经开始执行但尚未提交或中止、即未决的事务。

软件事务存储器(STM)系统通常涉及通过软件或者至少部分通过软件来执行访问跟踪、冲突解决或者其它事务存储器任务。在一个实施例中,处理器100能够执行编译器,以便编译程序代码以支持事务执行。在这里,编译器可插入操作、调用(call)、函数和其它代码,以便实现事务的执行。

编译器通常包括将源文本/代码转换成目标文本/代码的程序或程序集合。采用编译器编译程序/应用代码通常在多个阶段和遍数进行,以便将高级编程语言代码变换成低级机器或汇编语言代码。然而,单遍编译器仍然可用于简单编译。编译器可利用任何已知的编译技术,并且执行任何已知的编译器操作,例如词汇分析、预处理、解析、语义分析、代码生成、代码变换和代码优化。

较大编译器通常包括多个阶段,但是这些阶段几乎常常包含在两个一般阶段中:(1)前端,即,一般来说,其中可进行语法处理、语义处理和某种变换/优化;以及(2)后端,即,一般来说,其中进行分析、变换、优化和代码生成。某些编译器涉及中端,它说明编译器的前端与后端之间的描绘的模糊。因此,提及编译器的插入、关联、生成或其它操作可在上述阶段或遍数的任一个以及编译器的任何其它已知阶段或遍数中进行。作为一个说明性示例,编译器可能在编译的一个或多个阶段中插入事务操作、调用、函数,例如在编译的前端阶段中插入呼叫/操作,然后在事务存储器变换阶段中将调用/操作变换成较低级代码。

然而,尽管编译器的执行环境和动态或静态性质,但在一个实施例中,编译器编译程序代码,以便实现事务执行。因此,在一个实施例中,提及程序代码的执行表示:(1)动态或静态执行编译器程序,以便编译主要程序代码,保持事务结构,或者执行其它事务相关操作;(2)执行包括事务操作/调用的主要程序代码;(3)执行与主要程序代码关联的其它程序代码,例如库;或者(4)它们的组合。

在一个实施例中,处理器100能够利用硬件事务存储器(HTM)系统中的硬件/逻辑来执行事务。当实现HTM时,从架构和微架构的角度来看,都存在许多特定实现细节;其中的大多数在本文中不作论述,以免不必要地混淆对本发明的理解。但是,为了便于说明,公开了某些结构和实现。然而,应当注意,这些结构和实现不是必需的,而是可扩充和/或采用具有不同实现细节的其它结构来替换。

可由本地处理元件以及可能由其它处理元件对数据项进行访问和请求。在没有安全机制在事务存储器系统中的情况下,这些访问的一部分可能产生无效数据和执行,即,对数据的写入使读取失效,或者读取无效数据。因此,处理器100可能包括跟踪或监视向数据项以及从数据项的存储器访问的逻辑,以便识别可能的冲突。

数据项或数据元素可包括由硬件、软件或者它们的组合所定义的任何粒度等级的数据。数据、数据元素、数据项或者对其引用的非穷举列表包括存储器地址、数据对象、类、动态语言代码的类型的字段、动态语言代码的类型、变量、操作数、数据结构以及对存储器地址的间接引用。但是,任何已知的数据分组可称作数据元素或数据项。上述示例的几个、如动态语言代码的类型的字段和动态语言代码的类型表示动态语言代码的数据结构。为了进行说明,动态语言代码、例如来自Sun Microsystems,Inc的JavaTM是非常类型化的语言。各变量具有在编译时间已知的类型。类型分为两个类别-原语类型(布尔和数值,例如整数、浮点)和引用类型(类、接口和阵列)。引用类型的值是对于对象的引用。在JavaTM中,由字段组成的对象可以是类实例或阵列。给定类A的对象a,通常使用符号A::x来表示类型A的字段x,使用a.x来表示类A的对象a的字段x。例如,表达式可表达为a.x=a.y+a.z。在这里,加载字段y和字段z以便相加,并且结果将写入字段x。

因此,监视/缓冲对数据项的存储器访问可在任意数据级粒度执行。例如,在一个实施例中,对数据的存储器访问在类型级被监视。在这里,对字段A::x的事务写入和字段A::y的非事务加载可作为对同一个数据项(即类型A)的访问而被监视。在另一个实施例中,存储器访问监视/缓冲在字段级粒度执行。在这里,对A::x的事务写入和A::y的非事务加载没有作为对同一个数据项的访问而被监视,因为它们是对不同字段的引用。注意,在跟踪对数据项的存储器访问中可考虑其它数据结构或编程技术。作为一个示例,假定类A的对象的字段x和y(即A::x和A::y)指向类B的对象,初始化成新分配的对象,并且在初始化之后从未被写入。在一个实施例中,对A::x所指向的对象的字段B::z的事务写入,相对于A::y所指向的对象的字段B::z的非事务写入,不作为对同一个数据项的存储器访问而被监视。由这些示例推延,可以确定监视器可在任何数据粒度等级执行监视/缓冲。

在一个实施例中,监视器包括读监视器和写监视器,以便跟踪加载和存储,它们相应地被确定为受监视。作为一个示例,硬件读监视器和写监视器将以数据项的粒度来监视数据项,而不管基础存储结构的粒度。在一个实施例中,数据项由以存储结构的粒度所关联的跟踪机制来划界,以便确保适当地监视至少整个数据项。在Gad Sheaffer等人的同此提交的标题为“事务存储器(TM)系统中的读和写监视器属性”的共同未决申请No.XX/XXXXXX(代理机构卷号D71720)中更详细地论述利用读监视器/属性来监视数据项的一个示例。但是,监视器、属性、注释或其它跟踪机制可用于检测与利用数据或结构的任何粒度来保存数据的事务执行关联的冲突。

读或写属性包括用于保存与数据项关联的状态的任何逻辑、固件或结构。例如,数据项的属性包括位向量,其中位向量中的每个位表示数据项的属性,例如事务加载、事务写入、非事务加载、非事务写入、没有事务加载、没有事务写入、没有非事务加载、没有非事务写入、检测到访问冲突、没有检测到访问冲突、读请求、没有读请求、写请求、没有写请求、所有权请求、没有所有权请求或者与数据项或保存数据项的存储器位置关联的任何其它属性或状态。作为另一个示例,数据项的属性包括编码值。例如,状态,例如4种状态:(1)事务写入,(2)事务读取,(3)没有事务写入,以及(4)没有事务读取,利用2个属性位(即4个二进制值00、01、11和10)来编码。

根据该设计,高速缓存相干请求和被监视的高速缓存线的相干状态的不同组合引起可能的冲突,例如保存处于共享读取状态的数据项的高速缓存线,和指明对该数据项的写请求的窥探。相反,保存处于缓冲写入状态的数据项的高速缓存线和指明对该数据项的读请求的外部窥探可被认为可能冲突。在一个实施例中,为了检测访问请求和属性状态的这种组合,窥探逻辑耦合到冲突检测/报告逻辑、如用于冲突检测/报告的监视器和/或逻辑。

在一个实施例中,数据的元数据、如属性或性质,本地保存在存储器中。作为一个示例,数据高速缓存在高速缓冲存储器的条目中,而数据的元数据保存在高速缓存的另一个条目中。在这个示例中,即使元数据可能与数据竞争高速缓冲存储器中的空间,但是本地保存元数据而无需对数据阵列的附加扩展或无需附加单独存储结构的能力可能产生元数据的有效支持,而不会在整个存储器层级结构中激增持久不变元数据或者造成添加附加存储结构的昂贵成本。

在一个实施例中,硬件中的元数据到数据的物理映射不是软件直接可见的。因此,在这个示例中,元数据访问操作引用数据地址,并且依靠硬件来执行正确的转换(即映射),以便适当地访问元数据。在一个实施例中,一个或多个元物理地址空间在物理地址空间上重叠,用于访问元数据。本质上,引用存储器中保存的数据的数据地址被转换/操纵,以便获得元数据地址,它用于访问同一个存储器内不同的所转换位置的元数据。

为了进行说明,元物理值追加到数据地址,以便获得元数据地址。可利用将第一地址转换成第二地址的任何方法。将数据地址转换成元数据地址的一个示例包括利用物理地址或虚拟地址加上元物理值到来自元数据地址的单独数据地址的附加。作为另一个示例,数据地址可利用单独转换表/逻辑来转换,以便获得不同的元数据地址。

因此,存储器可按照相对于软件透明的方式来保存数据项的元数据。当硬件检测对元数据的访问操作时,通过显式操作代码(指令的操作码)或者将指令解码为元数据访问微操作,硬件相应地执行访问元数据的访问操作所引用的数据地址的必要转换。在这里,元数据可以是有损失的,即,元数据在选择保存元数据的条目供收回时丢失。但是,元数据的损失可按照与冲突的处理或者监视属性的损失相似的方式来保存,如Gad Sheaffer等人同此一起提交的标题为“在硬件中登记用户处理程序用于事务存储器事件处理”的申请序号XX/XXXXXX(代理机构卷号P29129)中所述。

如以上最初参照图1所述,为了便于论述,处理器100的架构是纯说明性的。类似地,转换用于引用元数据的数据地址的具体示例也是示范的,因为可利用将数据与同一个存储器的单独条目中的元数据关联的任何方法。

参照图2a,示出用于保存与数据关联的元数据的元物理地址空间的一个实施例。示出了例如控制逻辑250、标签阵列205和数据阵列207等的高速缓冲存储器的部分,而没有示出例如高速缓存查找、命中和未命中电路等具体控制电路及其它较大结构,以便简化论述。高速缓存的最常见示例包括数据高速缓存,例如图1所示的第一级高速缓存或第二级高速缓存。但是,高速缓存还可包括指令高速缓存、追踪高速缓存或其它已知高速缓存。

虽然没有详细描述高速缓存架构以免不必要地混淆对论述的理解,但是可按照许多方式来组织高速缓存。例如,高速缓存可以是全关联式(即,存储器地址可保存在高速缓存的任何位置)、集合关联式(其中某些范围的存储器地址限制到高速缓存的特定集合),或者是直接映射高速缓存(其中多个地址保存在高速缓存内的单个位置)。注意,本文所述的方法和设备可采用任何高速缓存组织来实现。

如图所示,高速缓存包括数据部分207(又可称作数据高速缓冲存储器或数据阵列)、与数据阵列207关联的标签阵列205以及与标签阵列205和数据阵列207关联的控制逻辑230。数据部分207包括元件210、215、220和225。本文所使用的高速缓存元件表示高速缓存的任何粒度的结构元件,例如高速缓存线、高速缓存条目、高速缓存位置或高速缓存集合。例如,元件210包括集合中的多个条目的一个条目,例如多条线路的一条线路。

如图所示,元数据209和数据项208保存在数据阵列207的单独条目中。但是,元数据209与数据项208关联,因为它表示数据项208的属性或性质,并且与条目210关联的数据项208的数据地址可用作或者转换成元数据地址,以便引用条目215中的元数据209。在一个实施例中,以这种方式保存元数据209被认为是有损失的。换言之,元数据209被认为是有损失的元数据。本质上,元数据209是本地构造,与通过存储器层级结构跟踪数据项208的持久不变数据不同。

例如,如果控制逻辑250选择条目215供收回,则元数据209被收回。由于元数据209在数据地址位置不存在,所以信息没有被保持或者回写到较高级存储器,即元数据209丢失。在这里,高速缓存控制逻辑250可因线路215的高速缓存相干状态、如无效状态或者因保存元数据值以指明条目215保存元数据209的扩展字段217而不执行回写,下面更详细地进行描述。

如上所述,元数据209包括与数据项208相关的任何属性、性质或信息。在事务存储器系统中,可按照多种有用方式来利用元数据209。作为第一示例,元数据209包括数据项208的例如读属性、写属性和/或缓冲属性等属性。在这里,当数据项208经事务读取时,更新元数据209以指明数据项208经读监视,即,对数据项208的外部写入则被认为是冲突。在这种实现中,窥探逻辑可修改成执行条目215中的元数据209的窥探、即条目215中的元数据的测试。

作为另一个示例,元数据包括其它事务相关信息,例如事务写入数据项208的备份位置、数据项208是否先前已经在事务中被访问和/或备份、数据项208是否与不可撤消/难抑制事务关联、数据项209是否已经丢失,或者其它已知事务相关描述信息。此外,如上所述,元数据的使用并不局限于事务信息。作为推论,元数据209还可包括与数据项208关联的信息、性质、属性或状态。

如图所示,标签阵列205包括分别与数据阵列207的数据条目210、215、220、225对应的标签条目211、216、221和226。通常,标签条目(如条目211)用于保存与条目210中保存的数据项208关联的地址的一部分。在对高速缓存访问时,搜索/查找标签阵列205利用来自访问操作地址的标签值以索引到正确的对应条目。在一个实施例中,地址(如地址201)采用扩展位被扩展,扩展位保存在标签阵列205中的标签扩展字段212、217、222和227中。在这里,扩展字段保存指明对应数据条目是否保存数据或元数据的值。作为一个示例,扩展字段212保存指明数据(如数据项208)保存在数据条目210中的数据值,而扩展字段217保存指明数据条目215保存元数据(如元数据209)的元物理值。

保存在扩展字段(如扩展字段217)中的元物理值可包括表示对应条目保存元数据的任何值。此外,元物理值可通过硬件(如控制寄存器)或者高速缓存控制逻辑250中的缺省设定(由指令参数提供)或者它们的组合来提供。

在一个实施例中,扩展字段217保存标签条目216的单个位,例如最高有效位(MSB)。在这里,当条目215保存元数据时,条目217则保存第一逻辑值、如逻辑高值。相反,扩展字段212保存第二逻辑值、如逻辑低值,以便指明条目210保存数据。为了进行说明,在数据地址与元数据地址之间的最基本转换方法的上下文中论述简化示例,即,其中标签条目211和216对于数据项208和209是相同的,其中只有扩展字段是不同的。在这里,地址201的一部分、如物理地址部分保存在标签阵列205的标签条目中。

假定接收到引用数据项208的数据地址的访问操作。控制逻辑208执行标签阵列205的搜索,以便确定对于该数据地址是否存在标签匹配。在这里,如果访问操作是访问数据项208的正常数据访问操作,则数据值与数据地址关联,并且搜索产生与条目211和扩展字段212的匹配。在这里,在条目216之间不存在匹配,因为扩展字段217包括元物理值(即这个示例中的逻辑1)。相反,如果访问操作包括元数据访问操作,则逻辑1的元物理值追加到数据地址,并且搜索产生条目216与扩展字段217的命中。类似地,不存在对条目211的命中,因为扩展字段212保存数据值。

如这个示例所示,程序可包括引用数据项、如数据项208的相同地址的例如数据访问操作或元数据访问操作等单独操作,并且硬件可将那些访问映射到不同的地址空间(例如物理地址空间和元物理地址空间)。在不同的值用于数据和元数据的标签条目的情况下,地址空间是正交的,即,元数据访问操作没有命中或修改数据条目,因为保存数据项的对应数据条目的扩展字段没有匹配元数据访问操作的查找扩展值。但是,由于元数据和数据地址空间竞争高速缓存中的空间,所以它们可通过竞争相互影响。

另外,在有损失的元数据的一个实施例中,元数据访问操作的标签阵列205的未命中不服务于高速缓冲存储器域外部的未命中。本质上,由于有损失的元数据209本地保存在高速缓存域中,所以没有理由在外部转发未命中以服务于请求。因此,可能以快速有效方式服务于对有损失的元数据的未命中。作为一个示例,高速缓存块被分配用于元数据,并且初始化成预定缺省值,而无需等待外部响应。

除了上述示例之外,在一个实施例中,标签阵列205的扩展字段包括多个位。作为第一示例,标签阵列205中的多个位可能包括在数据地址空间上重叠的多个单独的元物理地址空间。在这里,对于单独元数据、对于关联相同或不同元数据的单独处理元件、对于具有相同或不同元数据的程序的不同部分、对于具有相同或不同元数据的不同子系统或者对于与地址空间关联的任何其它已知元件,每个位或分组的位对应于元物理地址空间。

例如,假定两个处理元件、如两个核共享对高速缓存的访问。在这里,扩展字段217的第一位用于与第一处理元件关联的元物理地址空间,而扩展字段218的第二位用于与第二处理元件关联的第二元物理地址空间。基于上述示例,在对于第一处理元件遇到对数据地址201的元数据访问时,进行标签阵列205的搜索,且第一位设置成元物理逻辑值,它确保对第二处理元件的元物理地址空间的命中没有发生。

注意,在一些情况下,可能优选的是使处理元件访问不同的元物理地址空间,例如在第一处理元件检查是否由第二处理元件在第二元物理地址空间中设置了属性。在一个实施例中,扩展字段包括其它信息。例如,不是多个位用于多个处理元件,而是可在多个位中表示处理元件标识符、如上下文ID。此外,扩展字段的位可利用控制寄存器值、指令参数值或其它值来填充。

元数据访问操作可包括访问数据的显式指令/操作。在这里,处理器的解码器可根据指令集架构的操作代码(操作码)来识别元数据访问操作。另外,较大的更复杂指令在被解码时可包括元数据访问微操作。为了进行说明,将备份数据项208的指令解码成对备份位置执行数据项208的前一种形式的写入的第一微操作以及将元数据209更新成保存备份位置的地址的第二微操作。

如上所述,在一个实施例中,元数据209在硬件中与数据项208关联。如图所示,数据项208和元数据209未压缩(即元数据与数据之间的一对一关系)。换言之,元数据的大小与数据项208相同。下面更详细地论述元数据的压缩。然而,在一个实施例中,在硬件中元数据209与数据项208的关联包括将索引到数据项208的条目210的数据地址转换成索引到元数据209的条目215的元数据地址的逻辑。转换的示例包括添加了元物理值的无转换、添加了元物理值的正常数据地址转换以及采用元物理转换逻辑的单独转换。下面参照图3a-3b更详细地论述元数据到数据的转换的非穷举示例的这个列表。

快速参照图2b,示出用于保存与数据关联的元数据的元物理地址空间的另一个实施例。如上所述,元数据当保存在与数据相同的阵列中时可与数据竞争高速缓存空间。因此,如图2b所示,在一个实施例中,元数据保存在并行高速缓冲存储器260中。在这里,以上和以下描述的方法和设备、例如从数据地址获得元数据地址的步骤可按照相同方式来执行。但是,不是选择条目数据阵列207用于元数据地址,而是选择并行元数据阵列260中的条目。作为一个示例,复用器可用于根据元物理标识符值、如地址扩展230中保存的元物理值在阵列、集合、路、块等之间进行选择。因此,与本文中的描述相似,元数据地址可从给定数据项的数据地址获得。但是,在这个示例中,条目的选择在并行阵列260而不是在数据阵列207中进行。注意,元数据209按照相同方式与数据项208关联,但保存在不同的物理存储结构中。

来看图3a,示出支持对元物理地址空间的访问的结构的一个实施例。在这里,地址生成单元(AGU)320生成地址,这可响应访问操作而进行,如上所述。下面参照处理器利用虚拟地址转换、即通常利用处理器中定义的页表将所引用虚拟地址转换成物理地址的物理存储器的虚拟视图来论述寻址和转换。但是,寻址可按照许多方式来实现,并且相应地,本文所述的方法和设备可利用任何寻址方法来实现。

在一个实施例中,数据项通过数据地址301到元数据地址的转换而与元数据关联。作为第一示例,转换包括数据地址301的扩展而无需虚拟地址到物理地址的传统转换。本质上,数据地址的虚拟地址用于元数据地址。相反,元数据地址可按照与数据地址相似的方式通过转换结构来转换。

如图所示,转换后备缓冲器(TLB)325将虚拟地址、如虚拟地址201转换成物理地址。在某些处理器架构中,虚拟地址和物理地址共享地址的一部分,例如地址201的4K字节页面的位0-11。作为第一示例,元数据地址与数据地址相同。因此,阵列305中的高速缓存标签对于数据和关联元数据是相同的,除了扩展字段在数据与元数据条目之间有区别。

为了进行说明,又快速返回参照图2a。在这里,对应于元数据条目215的标签条目216与对应于数据条目210的标签条目211是相同的。但是,扩展字段212保存指明条目210保存数据的数据值,并且扩展字段217保存指明条目215保存元数据的元数据值。因此,在从数据条目215读取元数据209的高速缓存查找时,元数据值追加到标签值,以便命中与条目215对应的标签条目217。类似地,对于元数据209的存储操作,条目215在数据阵列207中分配有元物理值,元物理值根据指令参数或者寄存器中保存的值加载而在扩展字段217中。

从以上所述注意到,即使具有相同的数据地址,元数据访问也仅命中元数据条目,因为扩展标签条目中保存的数据值没有匹配追加/扩展的元数据值。在其中除了扩展字段之外没有修改数据标签值的情形下,元数据对数据的局部性(locality)可能是有利的。在这个示例中,条目210和215因用于选择数据阵列207中集合的地址的部分相同而可能在集合关联式高速缓存的相同集合中。

参照图3b,示出支持对元物理地址空间的访问的结构的另一个实施例。在这里,TLB 325仍然将虚拟地址301转换成物理地址。TLB325按照与查找表相似的方式进行操作以保存最近转换。另外,当没有发现最近转换时,虚拟地址通常根据在关联TLB的处理元件的寄存器中定义的页表来转换。在一个实施例中,提供元物理地址转换(MAT)缓冲器350用于数据地址到元数据地址的转换供元数据访问。作为一个示例,MAT缓冲器350按照与TLB 325相似的方式进行操作。在一个实施例中,MAT缓冲器350根据寄存器中定义的元物理页表或其它信息将数据地址301转换成元数据地址。

耦合到转换逻辑350的高速缓存查找逻辑响应元数据地址的标签部分匹配标签阵列中包含的标签条目所保存的标签值而确定对标签条目的命中。在这里,元数据值甚至当单独转换时也可追加到地址,以便帮助分离元物理和物理地址空间。因此,在这个示例中,元数据访问操作所引用的数据地址的命中包括通过元物理转换逻辑350将地址301转换成元数据地址,并且将元数据地址与标签阵列305中的高速缓存标签进行匹配。如以下所述,元物理地址转换逻辑350根据压缩比将数据地址转换成元数据地址。

但是,不管转换方法如何,即不管是没有修改还是通过单独表的转换,在一个实施例中,元数据到数据被压缩。换言之,压缩比是数据与元数据相比的量。例如,压缩比8、即8∶1包括8位数据与1位元数据或者8字节(四倍长字)数据与1字节元数据。

图4示出数据到元数据的压缩比为8的一个实施例。控制逻辑接收元数据访问操作所引用的数据地址401。对于压缩,log2(N)个位经过移位和/或删除,其中N是数据对元数据的压缩比。在所示示例中,对于压缩比为8,对于元数据地址402,三个位被向下移位并且删除。本质上,地址401(包括64位以引用存储器中的特定数据字节)被截取三个位,以便形成元数据字节地址402(其用于基于字节粒度引用存储器中的元数据);从其中选出一位元数据使用先前从该地址删除的三个位来形成元数据字节地址。

在一个实施例中,被移位/删除的位由其它位取代。如图所示,在地址401被移位之后,高阶位用零取代。但是,被删除/移位的位可用其它数据或信息(例如与元数据访问操作关联的上下文标识符(ID))取代。虽然最低数量的位在这个示例中被删除,但是任何位置的位可根据任何数量的因素来删除和取代,该因素例如高速缓存组织、高速缓存电路定时以及使数据与元数据之间的冲突为最小等。

例如,数据地址可以不被移位log2(N),而是使地址位0:2为零。因此,相同的物理地址和虚拟地址的位没有如上述示例中那样经过移位,这允许预先选择具有未修改位(如位11:3)的集合或存储体(bank)。在这里,不是利用被删除位0:2来选择位,而是使用不同的三个位、如高阶三个位来进行从字节选择一位。这种实现可能是定时友好的,但是,元数据可能没有与数据相邻,即,没有数据对元数据的局部性,因为高阶标签值是不同的。

在一个实施例中,无论地址401是否经过位移位、位删除或位取代,包含元物理值的地址扩展标签追加到元数据地址402。如图所示,元物理值包括逻辑1值,以便指明地址402是元数据地址。如上所述,元物理值可包括硬件、固件、软件或者它们的组合、如通过控制寄存器或指令参数所定义的任何固定值。另外,如上所述,在一个实施例中,不管是移位和调零的位、如位63-65或者是包括图4未示出的元物理值的扩展字段中的附加位,都采用其它信息来扩充。例如,例如核、上下文或线程ID等处理元件ID作为扩展追加到地址402。

一旦追加了适当的扩展位,则利用包括具有位64的扩展字段的元数据地址402的标签部分来搜索标签阵列405。注意,对于元数据加载/测试操作或者写操作,对标签阵列405搜索匹配标签值,即在元数据地址402与标签阵列405中的标签条目(如包括扩展字段417的标签条目416)之间匹配的标签中包含的虚拟地址的一部分和扩展位。

但是,当写元数据操作未命中标签阵列405、即尚未创建元数据时,则以正常方式为元数据的高速缓冲存储器分配条目。例如,根据元数据地址402和高速缓存替代算法(如最后最近使用(LRU)算法)来选择、分配条目(如条目415)并且将其初始化为元数据缺省值。因此,元数据可能与常规数据竞争空间。

现在来看图5,示出用于数据到元数据的压缩和扩展字段的利用的另一个实施例。在这里,一位元数据表示64个字节,即比率512∶1。与以上所述相似,数据地址501经过转换/修改,以便通过将数据地址501向下移位log2(512)个位(即9位),来形成元数据地址502。在这里,位6:8仍然用于选择位而不是位0:2,实际上通过以512位的粒度进行选择来创建压缩。因此,移位的虚拟地址的其余部分(即位63:21)被用作元数据地址502的标签值503的一部分。

但是,当地址502移位9位时,地址502的高阶部分具有9个开放位位置来保存信息。在一个实施例中,9个位保存标识符(例如上下文ID和/或线程ID)。另外,元物理空间值也可保存在这些位中,或者可将地址通过元物理空间位来扩展。按照与以上所述搜索和替代相似的方式,采用元数据标签503来搜索标签阵列505。在这里,如果标识符和地址空间不匹配,则没有发现命中,即确定未命中。因此,这个示例可能具有基于线程ID和/或上下文ID粒度提供元数据的能力。但是,在一些实现中,跨ID的访问可以是有利的(例如当另一个线程的监视器元数据由线程检查以确定关联的数据项是否由另一个线程来监视时)。在这种情形下,掩码可应用于标签比较值,以便允许一个线程命中另一个线程的元数据。

在一个实施例中,元数据的被移位的地址与常规数据访问被复用。在这里,元物理空间值可用作复用器输入,以便在常规数据高速缓存访问与元数据高速缓存访问之间进行选择。另外,存储元数据信息可按照与先前实现中执行存储转发相似的方式转发给元数据加载。但是,在一个实施例中,附加限制强加到元数据地址,例如以防止跨压缩比的转发。

在一个实施例中,多个并发压缩比由硬件来支持。在这里,压缩比的表示保存在扩展标签位中。因此,在标签阵列的搜索期间,考虑压缩比。此外,可测试压缩比,用于确定元数据存储是否应当转发给元数据加载。

在一个实施例中,高速缓存硬件利用单个压缩比来实现,但包括其它硬件支持,以便向软件提供多个压缩比。作为一个示例,假定高速缓存硬件利用8∶1压缩比来实现,如图4所示。然而,以不同粒度访问元数据的元数据访问操作经过解码以便包括读取缺省元数据量的微操作和测试所读取元数据的适当部分的测试微操作。作为一个示例,所读取的缺省元数据量为32位。但是,不同粒度/8∶1压缩的测试操作测试32位所读取的元数据的正确位,这可基于地址的一定数量的位、如元数据地址的多个LSB和/或上下文ID。

作为说明,在一种支持每字节数据一位元数据的未对齐数据的元数据的方案中,根据元数据地址的三个LSB从元数据的32个读取位中的八个最低有效位中来选择单个位。对于数据字,根据地址的三个LSB从32位读取元数据的16个最低有效位中选择两个连续的元数据位,并且一直继续进行到对于128位元数据大小的16位为止。

在一个实施例中,对于上述方案,掩码根据传递给它的元数据地址位通过左移位操作来产生。作为掩码的说明,产生左移位操作包括:

8∶1 compression:0xFFFE<<Address[2:0];

16∶1 compression:0xFFFC<<Address[2:0];

32∶1 compression:0xFFF0<<Address[2:0];

64∶1 compression:0xFF00<<Address[2:0];

128∶1 compression:0x0000<<Address[2:0].

这个掩码与加载/读取微操作所读取的32位元数据逐位经过逻辑“或”操作,然后所得32个位共同经过逻辑“与”操作以测试元数据/设置标志。

作为另一个实现示例,使用给定数据大小的单个位-因而不允许未对齐数据支持。在这个方案中,掩码根据传递给它的元数据地址位的子集和处理元件ID位通过左移位操作来产生。因此,对于每字节一位压缩的元数据,所有元数据位用于各字节。对于每个字一位压缩的元数据,仅使用每第2个位,等等,直到只有所读取的32元数据位中的单个位用于32字节数据操作数。由于元数据存储对于较大数据大小变得越来越稀疏(较高压缩率),所以有机会利用额外空间并列存储多个上下文的元数据,这意味着,右元数据位根据地址LSB位和上下文ID(CID)的组合从32个元数据位中选取。

作为产生左移位操作的掩码的说明,包括:

8∶1 compression:0x0001<<00&Address[2:0];

16∶1 compression:0x0001<<00&CID[0]&Address[2:1];

32∶1 compression:0x0001<<00&CID[1:0]&Address[2];

64∶1 compression:0x0001<<00&CID[2:0];

128∶1 compression:0x0001<<0&CID[3:0];

256∶1 compression:0x0001<<CID[4:0].

这个掩码与第一微操作所读取的32位元数据逐位经过逻辑“与”操作,并且所得32位共同经过逻辑“或”操作,以便测试元数据以及可能设置标志。

参照图6,示出访问数据的元数据的方法的流程图。虽然图6的流程按照基本串行方式示出,但是流程可至少部分并行地以及可能按照不同顺序来执行。在流程620,遇到引用给定数据项的数据地址的元数据操作。元数据操作的示例包括加载/测试和存储/写/清除操作或微操作。但是,元数据访问操作可以是访问元数据的显式软件指令/操作以及经解码作为较大的更复杂指令的一部分的隐式微操作(例如隐式要求更新关联元数据的对数据项的访问)。另外,实现可选择成根据例如保护环转变、转变成不同处理器操作模式或者重新映射存储器页面等的某些系统事件大批清除给定上下文、线程或处理器的所有元数据。

元数据地址从所引用数据地址来确定。确定元数据地址的示例包括:

利用虚拟到物理地址转换的正常数据将数据地址转换成数据地址,并且将元物理扩展追加到数据地址,以便形成元数据地址;

将元物理扩展追加到虚拟数据地址,以便形成元数据地址;

利用元物理转换表逻辑将数据地址转换成物理元数据地址,并且将元物理扩展追加到物理元数据地址,以便形成元数据地址。

此外,转换可结合、即基于数据与元数据的压缩比,以便单独为各压缩比存储元数据。

在流程630,高速缓冲存储器的元数据条目根据元数据地址来确定。作为一个示例,元数据地址的标签部分用于搜索标签阵列。如果包括元物理值的标签部分没有匹配标签条目,则发生未命中。在一个实施例中,不是发出服务于高速缓存未命中的窥探请求,而是本地服务于未命中,而无需高速缓存域外部的请求,因为元数据是仅在高速缓冲存储器中保存的有损失的元数据。因此,条目按照正常高速缓存分配策略分配有条目中保存的适当元数据标签,并且数据存储元件采用缺省元数据值来初始化。因此,元数据相对关联数据项的局部性和定时也可能得到改进。相反,如果发生命中,则直接确定元数据条目。

无论确定条目通过命中还是未命中和条目的分配来确定,适当地访问元数据。例如,对于加载或测试操作,读取元数据。相反,对于存储操作,在对应元数据条目中更新元数据。因此,可以看到,元数据可按照有损失的方式保存在本地高速缓冲存储器中,而无需向高速缓冲存储器的数据阵列注释位或者无需昂贵的附加存储结构。此外,元数据可按照压缩方式、即数据与元数据的压缩比来保存。硬件可实现单个或多个压缩比,并且在任一种情况下,向软件提供多个压缩比。

本文所使用的模块表示任何硬件、软件、固件或者它们的组合。示为单独的模块边界一般通常可改变并且可能重叠。例如,第一和第二模块可共享硬件、软件、固件或者它们的组合,同时可能保留一些独立的硬件、软件或固件。在一个实施例中,术语“逻辑”的使用包括例如晶体管、寄存器等硬件或者例如可编程逻辑装置等其它硬件。但是,在另一个实施例中,逻辑还包括与硬件集成的软件或代码,例如固件或微码。

本文所使用的值包括数值、状态、逻辑状态或者二进制逻辑状态的任何已知表示。逻辑电平、逻辑值或逻辑的值的使用又称作1和0,它只是表示二进制逻辑状态。例如,1表示高逻辑电平,而0表示低逻辑电平。在一个实施例中,存储元、如晶体管或闪存元可以能够保存单个逻辑值或多个逻辑值。但是,已经使用计算机系统中的值的其它表示。例如,十进制数10也可表示为二进制值1010以及十六进制字母A。因此,值包括能够在计算机系统中保存的信息的任何表示。

此外,状态可由值或者值的部分来表示。作为一个示例,第一值、如逻辑1可表示缺省或初始状态,而第二值、如逻辑0可表示非缺省状态。另外,在一个实施例中,术语“重置”和“设置”分别表示缺省和更新值或状态。例如,缺省值可能包括高逻辑值、即重置,而更新值可能包括低逻辑值、即设置。注意,值的任何组合可用于表示任何数量的状态。

以上提出的方法、软件、硬件、软件、固件或代码的实施例可经由机器可访问或机器可读介质上存储的、处理元件可执行的指令或代码来实现。机器可访问/可读介质包括以机器、如计算机或电子系统可读形式来提供(即存储和/或传送)信息的任何机构。例如,机器可访问介质包括:随机存取存储器(RAM),例如静态RAM(SRAM)或动态RAM(DRAM);ROM;磁或光存储介质;闪速存储器装置;电存储装置、光存储装置、声存储装置或者其它形式的传播信号(例如载波、红外信号、数字信号)存储装置等。例如,机器可通过从能够保存通过传播信号传送的信息的介质接收例如载波等传播信号来访问存储装置。

本说明书中提到“一个实施例”或“实施例”表示结合该实施例所述的具体特征、结构或特性包含在本发明的至少一个实施例中。因此,词语“在一个实施例中”或“在实施例中”在本说明书的各个位置的出现不一定都表示同一个实施例。此外,具体特征、结构或特性可按照任何适当方式结合在一个或多个实施例中。

在以上说明书中,参照具体示范实施例来提供具体实施方式。但是很明显,可对其进行各种修改和变更,而没有背离所附权利要求书所提出的本发明的广义精神和范围。因此,说明书和附图将被看作是说明性而不是限制性的。此外,实施例及其它示范语言的使用不一定表示相同的实施例或者相同的示例,而是可表示不同且有区别的实施例以及可能相同的实施例。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号