用于保存和恢复密钥信息的指令支持的制作方法

文档序号:30623440发布日期:2022-07-02 05:40阅读:215来源:国知局
用于保存和恢复密钥信息的指令支持
背景技术
::1.目前的处理器可以提供对受信任执行环境的支持,诸如安全飞地。安全飞地包括存储器的片段(包括代码和/或数据),这些片段由处理器保护免于未经授权的访问,未经授权的访问包括未经授权的读取和写入。具体而言,某些处理器可以包括软件防护扩展(sgx)以提供安全飞地支持。具体而言,当数据驻留在平台存储器中时,sgx为安全飞地数据提供机密性、完整性和重放保护,并且因此针对软件和硬件攻击两者提供保护。芯片上边界形成自然的安全边界,在该处数据和代码可以以明文被存储并被假定是安全的。附图说明2.将参考附图来描述根据本公开的各实施例,其中:3.图1是根据本公开的实现方式的计算系统的示意性框图,该计算系统使用td在虚拟化系统中提供隔离。4.图2是描绘根据一些实施例的实现td架构的示例计算系统的框图。5.图3图示使用多密钥密码存储器保护系统的实施例。6.图4图示用于密钥表保存/恢复的高级流程的实施例。7.图5图示用于在ktablesave指令的执行期间执行的操作的流程的实施例。8.图6图示用于在ktablerestore指令的执行期间执行的操作的流程的实施例。9.图7图示用于处理诸如ktablerestore指令和ktablesave指令之类的指令的硬件的实施例。10.图8图示由处理器执行的用于处理ktablesave指令的方法的实施例。11.图9图示由处理器执行的用于处理ktablerestore指令的方法的实施例。12.图10图示示例性系统的实施例。13.图11图示可具有多于一个的核、可具有集成存储器控制器、并且可具有集成图形器件的处理器的实施例的框图。14.图12(a)是图示根据实施例的示例性有序流水线以及示例性寄存器重命名的乱序发布/执行流水线两者的框图。15.图12(b)是图示根据实施例的要包括在处理器中的有序架构核的示例性实施例和示例性的寄存器重命名的乱序发布/执行架构核两者的框图。16.图13图示(多个)执行单元电路的实施例。17.图14是根据一些实施例的寄存器架构的框图。18.图15图示指令格式的实施例。19.图16图示寻址字段的实施例。20.图17图示第一前缀的实施例。21.图18(a)-图18(d)图示如何使用第一前缀的r、x和b字段的实施例。22.图19(a)-图19(b)图示第二前缀的实施例。23.图20图示第三前缀的实施例。24.图21图示根据实施例的对照使用软件指令转换器将源指令集中的二进制指令转换成目标指令集中的二进制指令的框图。具体实施方式25.本公开涉及用于保存和恢复密钥数据结构的方法、装置、系统和非暂态计算机可读存储介质。存在在客户端机器上运行的虚拟机(vm)之间的隔离的计算实例。作为示例,可能存在不同信任级别的vm,并且期望以密码隔离的方式运行它们。虽然服务器架构的大部分可以直接继续存在,但客户端机器需要对跨诸如s3(挂起)和s4(休眠)之类的功率状态的挂起/恢复的支持。这些功率状态在客户端上被支持和需要,以获得更好的电池寿命,这对服务器来说并不是问题。目前的架构没有提供任何能力来保存/恢复与受信任域(td)相关联的密钥,受信任域是安全隔离的vm。26.本文详述了指令级支持,用于允许不受信任的软件保存/恢复来自存储器加密引擎的密钥状态,以支持客户端上的s3/s4流程。在第一实施例中,保存/恢复是由不受信任的软件和加密硬件单独完成。在另一实施例中,安全引擎(其形成平台上的信任根)参与其中,以在移交给不受信任的软件之前保护密钥。任一实施例使用本文介绍的指令,取决于所选择的实现方式选项,指令在其下可以不同地工作。27.具体而言,本文详述的指令之一允许不受信任的软件指示加密引擎读出存储密钥id的具有相关联的密钥和模式的密钥表的状态。这可以通过多种方式实现。在第一实施例中,加密引擎利用熔丝中的密钥对整个密钥表进行加密和完整性(具有重放保护)保护,以供加密引擎的单独使用。在另一实施例中,平台上的安全引擎可以被指示读取密钥表并使用可以由安全引擎主控的熔丝密钥执行加密和完整性保护。然后,不受信任的软件可以将受保护的blob保存在远处的盘上。类似地,对于恢复流程,另一指令可以由不受信任的软件使用以读取受保护的密钥表blob,并指示在验证后被安装在加密引擎中。由此,vm隔离被扩展到支持功率状态的客户端,必须针对客户端机器支持这些功率状态。28.在一些实施例中,这些指令是封装范围的,使得其中在不同封装上不同密钥与同一密钥id相关联的情况下,软件应当在每个封装上执行指令,并维护封装id与受保护的密钥表之间的映射。在恢复时,软件应当在正确的封装上恢复正确的受保护的密钥表。在最常见的情况下,应当存在跨所有封装编程的单个密钥表。29.如在本公开中所构想,实施例包括称为受信任域扩展(tdx)的处理器安全性能力,以经由存储器加密和完整性的使用、经由存储器控制器引擎来满足增加的安全目标。如在tdx中所使用,受信任域(td)是受保护的vm。本发明的实施例阻止来自td的私有存储器地址空间上的恶意的或被利用的vmm的页重新映射攻击。30.实施例包括称为安全扩展页表(sept)的附加扩展页表(ept)结构,该附加扩展页表(ept)结构由处理器用于td私有页走查。sept是逐td的ept(即,每个td具有其自身的sept),该逐td的ept仅由受信任域资源管理器(tdrm)经由新添加到处理器的指令集架构(isa)的特殊指令来管理。在不使用这些指令的情况下,tdrm不能改变sept,否则将由处理器报告完整性失败。在其他实施例中,可以使用处理器范围-寄存器保护来对sept的全部或部分进行访问控制。31.在典型的vm实现中,处理器针对每个虚拟存储器控制结构(vmcs)支持一个ept指针(eptp)。vmcs是存储器中针对每个vm存在一次的数据结构,而vm由vmm管理。在不同vm之间的执行上下文的每一次改变的情况下,针对当前vm恢复vmcs,由此定义vm的虚拟处理器的状态。vmm管理由eptp引用的ept。在本发明的实施例中,vm可以由td封装,并且vmcs可以由称为受信任域控制结构(tdcs)的类似控制结构代替,该受信任域控制结构(tdcs)管理td的客户机状态。32.描述了使用受信任域(td)在虚拟化系统中提供隔离的架构。当前的计算趋势是通过利用由云服务提供方(csp)提供的主控服务将数据和企业工作负载放置在云中。作为在云中主控数据和企业工作负载的结果,csp的客户(本文中称为租户)正在为其工作负载请求更好的安全性和隔离解决方案。具体而言,客户正在寻找能够在租户的软件的tcb外部实现csp提供的软件的操作的解决方案。系统的tcb指的是具有影响对系统的整体操作的信任的能力的硬件、固件和/或软件组件的集合。33.在本公开的实现方式中,提供td架构以及用于td架构的指令集架构(isa)扩展(在本文中称为td扩展(tdx))以为在不受信任的csp基础结构中执行的客户(租户)软件提供机密性(和完整性)。td架构(其可以是芯片上系统(soc)能力)在td工作负载与csp软件之间提供隔离,该csp软件诸如csp的虚拟机管理器(vmm)。td架构的组件可以包括:1)经由mk-总存储器加密(mktme)引擎的存储器加密,2)资源管理能力,在本文中称为受信任域资源管理器(tdrm)(tdrm可以是虚拟机监视器(vmm)的软件扩展),以及3)处理器中的执行状态和存储器隔离能力,其经由cpu管理的存储器所有权表(mot)并经由cpu访问受控的td控制结构来提供。td架构提供了处理器部署td的能力,td利用mk-tme引擎、mot、和访问受控的td控制结构来实现td工作负载的安全操作。34.在一个实现方式中,租户的软件在被称为td的架构概念中执行。td(也称为租户td)是指租户工作负载(其可包括例如操作系统(os)本身以及在该os之上运行的其他环3应用、或在vmm之上运行的虚拟机(vm)以及其他环3应用)。每个td独立于系统中的其他td进行操作,并且在平台上使用由tdrm指派的(多个)逻辑处理器、存储器和i/o。每个id使用mk-tme引擎的至少一个专用加密密钥在存储器中被密码隔离,该至少一个专用加密密钥用于对与受信任域相关联的(保持代码和/或数据的)存储器进行加密。35.在本公开的实现方式中,td架构中的tdrm充当用于td的主机,并且具有对核和其他平台硬件的完全控制。tdrm将(多个)逻辑处理器指派给td中的软件。然而,tdrm无法访问在所指派的(多个)逻辑处理器上的td的执行状态。类似地,tdrm将物理存储器和i/o资源指派给td,但由于使用由处理器针对每个td实施的单独的加密密钥、以及对存储器的其他完整性和重放控制而无权访问td的存储器状态。在td中执行的软件以降低的特权操作,使得tdrm可保留对平台资源的控制。然而,在所定义的情况下,tdrm不能影响存储器中或cpu结构中的td状态的机密性或完整性。36.用于在虚拟化系统中提供隔离的传统系统不完全从租户的tcb提取csp软件。此外,传统系统可能使用本公开的实现方式所避免的多个单独的芯片组子系统而显著地增加tcb。本公开的实现方式的td架构通过从tcb移除csp软件来明确地减少tcb以提供客户(租户)工作负载与csp软件之间的隔离。实现方式通过为csp客户工作负载(租户td)提供安全隔离来提供对传统系统的技术改进,并允许从客户的tcb移除csp软件,同时满足csp的安全性和功能要求。此外,td架构可扩展到多个td,这可支持多个租户工作负载。此外,本文中描述的td架构是通用的,并且可以应用于任何动态随机存取存储器(dram)或基于存储类存储器(scm)的存储器(诸如,非易失性双列直插存储器模块(nv-dimm))。由此,本公开的实现方式允许软件利用性能益处(诸如,用于scm的nvdimm直接存取存储(das)模式)而不损害平台安全要求。37.图1是根据本公开的实现方式的计算系统100的示意性框图,该计算系统100使用td在虚拟化系统中提供隔离。虚拟化系统100包括虚拟化服务器110,该虚拟化服务器110支持多个客户端设备101a–101c。虚拟化服务器110包括执行tdrm180的至少一个处理器112(也称为处理设备)。tdrm180可以包括vmm(也可以称为管理程序),该vmm可以对一个或多个td190a-190c实例化,这一个或多个td190a-190c经由网络接口170可由客户端设备101a-101c访问。客户端设备101a-101c可包括但不限于台式计算机、平板计算机、膝上型计算机、上网本、笔记本计算机、个人数字助理(pda)、服务器、工作站、蜂窝电话、移动计算设备、智能电话、互联网设备或任何其他类型的计算设备。38.td可以指租户(tenant)(例如,客户)工作负载。租户工作负载可包括例如os本身以及在该os之上运行的其他环3应用,或者可包括在vmm之上运行的vm以及其他环3应用。在本公开的实现方式中,可以使用用于对与td相关联的(保存代码和数据的)存储器进行加密的单独的专用密钥以便在存储器中以密码方式将每个td隔离。39.处理器112可以包括一个或多个核120(也称为处理核120)、范围寄存器130、存储器管理单元(mmu)140、和(多个)输出端口150。tdrm180与mot160以及一个或多个受信任域控制结构(tdcs)124和受信任域线程控制结构(tdtcs)128通信。tdtcs和td-tcs在本文中可以可互换地使用。处理器112可用在系统中,该系统包括但不限于台式计算机、平板计算机、膝上型计算机、上网本、笔记本计算机、pda、服务器、工作站、蜂窝电话、移动计算设备、智能电话、互联网设备或任何其他类型的计算设备。在另一实现方式中,处理器112可以用在soc系统中。40.计算系统100代表基于可从美国加利福尼亚州圣克拉拉市的英特尔公司获得的微处理设备的处理系统,不过也可使用其他系统(包括具有其他微处理设备的pc、工程工作站、机顶盒等等)。在一个实现方式中,样本系统100执行可从华盛顿州雷蒙德市的微软公司获得的windowstm操作系统的某个版本,但是也可使用其他操作系统(例如,unix、linux)、嵌入式软件、和/或图形用户界面。因此,本公开的实现方式不限于硬件电路和软件的任何特定组合。41.一个或多个处理核120执行系统的指令。处理核120包括但不限于:用于取出指令的预取逻辑、用于对指令解码的解码逻辑、用于执行指令的执行逻辑,等等。在实现方式中,计算系统100包括组件(诸如,处理器112)以采用包括逻辑的执行单元来执行用于处理数据的算法。42.虚拟化服务器110包括用于存储程序二进制文件和os驱动器事件的主存储器114和次级存储118。次级存储118中的数据可被存储在被称为页的块中,并且每个页可与物理存储器地址的集合对应。虚拟化服务器110可以采用虚拟存储器管理,在该虚拟存储器管理中,由(多个)核120运行的诸如td190a–190c之类的应用使用被映射到客户机物理存储器地址的虚拟存储器地址,并且客户机物理存储器地址通过mmu140被映射到主机/系统物理地址。43.核120可以执行mmu140以将来自次级存储118的页加载到主存储器114中(该主存储器114包括易失性存储器和/或非易失性存储器),以供由在处理器112上(例如,在核上)运行的软件更快地访问。当td190a-190c中的一个试图访问与被加载到主存储器114中的页的物理存储器地址相对应的虚拟存储器地址时,mmu140返回所请求的数据。核120可以执行tdrm180的vmm部分以将客户机物理地址转换为主存储器的主机物理地址,并且为允许核120读取、走查并解释这些映射的协议提供参数。44.在一个实现方式中,处理器112实现td架构以及用于该td架构的isa扩展(tdx)。td架构提供td工作负载190a-190c之间的隔离以及与csp软件(例如,在处理器112上执行的tdrm180和/或cspvmm(例如,根vmm180))的隔离。td架构的组件可以包括:1)经由mk-tme引擎145的存储器加密,2)在本文中称为tdrm180的资源管理能力,以及3)经由mot160和经由访问受控的td控制结构(即,tdcs124和tdtcs128)提供的处理器112中的执行状态和存储器隔离能力。tdx架构提供处理器112部署td190a-190c的能力,td190a-190c利用mk-tme引擎145、mot160、和访问受控的td控制结构(即,tdcs124和tdtcs128)以用于td工作负载190a-190c的安全操作。45.在本公开的实现方式中,tdrm180充当主机,并且具有对核120和其他平台硬件的完全控制。tdrm180将(多个)逻辑处理器指派给td190a-190c中的软件。然而,tdrm180不能访问在所指派的(多个)逻辑处理器上的td190a-190c的执行状态。类似地,tdrm180将物理存储器和i/o资源指派给td190a-190c,但是由于多个单独的加密密钥以及对存储器的其他完整性和重放控制而不参与访问td190a的存储器状态。46.关于单独的加密密钥,处理器可以利用mk-tme引擎145对在执行期间使用的存储器加密(和解密)。利用总存储器加密(tme),由在核120上执行的软件进行的任何存储器访问都可以利用加密密钥在存储器中被加密。mk-tme是对允许使用多个加密密钥(所支持的密钥数量取决于实现方式)的tme的增强。处理器112可以利用mktme引擎145以使得使用不同的mk-tme密钥对不同的页加密。mk-tme引擎145可以被用在本文中所描述的td架构中,以支持针对每个td190a-190c的一个或多个加密密钥,从而帮助实现不同的csp客户工作负载之间的密码隔离。例如,当在td架构中使用mk-tme引擎145时,cpu默认强制要求:将使用td专用密钥来加密td(所有页)。此外,td可以进一步将特定td页选择为是明文,或者是使用对csp软件不透明的不同短暂密钥而被加密的。mk-tme引擎145可以包括用于一个或多个密钥的存储。在一些实施例中,在管芯上存在至少一个熔丝密钥。47.每个td190a-190c是支持由(例如,使用虚拟机扩展(vmx)的)vmm、os和/或(由os主控的)应用软件组成的软件栈的软件环境。每个td190a-190c独立于其他td190a-190c进行操作,并且在平台上使用由tdrm180指派的(多个)逻辑处理器、存储器和i/o。td190a-190c中执行的软件以降低的特权操作,使得tdrm180能够保持对平台资源的控制;但是,在所定义的情况下,tdrm不会影响td190a-190c的机密性或完整性。下文参照图1更详细地描述td架构和tdx的进一步细节。48.本公开的实现方式不限于计算机系统。可在其他设备(诸如,手持式设备和嵌入式应用)中使用本公开的替代实现方式。手持式设备的一些示例包括,蜂窝电话、网际协议设备、数码相机、个人数字助理(pda)和手持式pc。嵌入式应用可包括微控制器、数字信号处理设备(dsp)、芯片上系统、网络计算机(netpc)、机顶盒、网络集线器、广域网(wan)交换机,或能够根据至少一个实现方式执行一条或多条指令的任何其他系统。49.可在单个处理设备台式机或服务器系统的上下文中描述一个实现方式,但是替代实现方式可被包括在多处理设备系统中。计算系统100可以是“中枢”系统架构的示例。计算系统100包括用于处理数据信号的处理器112。作为一个说明性示例,处理器112包括例如复杂指令集计算机(cisc)微处理设备、精简指令集计算(risc)微处理设备、超长指令字(vliw)微处理设备、实现指令集的组合的处理设备或任何其他处理设备(诸如,数字信号处理设备)。处理器112耦合至处理设备总线,该处理设备总线在处理器112与计算系统100中的其他组件之间传送数据信号,计算系统100中的其他组件诸如存储指令、数据或指令和数据的任何组合的主存储器114和/或次级存储118。计算系统100的其他组件可包括图形加速器、存储器控制器中枢、i/o控制器中枢、无线收发机、闪存bios、网络控制器、音频控制器、串行扩展端口、i/o控制器等。这些元件执行为熟悉本领域的人员公知的它们的传统功能。50.在一个实现方式中,处理器112包括第1级(l1)内部高速缓存存储器。取决于架构,处理器112可具有单个内部高速缓存或多级的内部高速缓存。取决于特定实现方式和需求,其他实现方式包括内部高速缓存和外部高速缓存两者的组合。寄存器堆用于将不同类型的数据存储在各种寄存器中,这些寄存器包括整数寄存器、浮点寄存器、向量寄存器、区块化寄存器、影子寄存器、检查点寄存器、状态寄存器、配置寄存器、以及指令指针寄存器。51.应当注意,执行单元可具有浮点单元,或可不具有浮点单元。在一个实现方式中,处理器112包括用于存储微代码的微代码(ucode)rom,该微代码当被执行时,用于执行用于某些宏指令的算法或处置复杂场景。在此,微代码是潜在地可更新的以处置针对处理器112的逻辑漏洞/修复。52.也可在微控制器、嵌入式处理设备、图形设备、dsp以及其他类型的逻辑电路中使用执行单元的替代实现方式。系统100包括主存储器114(也可称为存储器114)。主存储器114包括dram设备、静态随机存取存储器(sram)设备、闪存设备或其他存储器设备。主存储器114存储由数据信号表示的、用于由处理器112执行的指令和/或数据。处理器112经由处理设备总线而耦合至主存储器114。诸如存储器控制器中枢(mch)之类的系统逻辑芯片可耦合至处理设备总线和主存储器114。mch可提供至主存储器114的高带宽存储器路径,用于指令和数据存储并用于图形命令、数据和纹理的存储。例如,mch可用于在处理器112、主存储器114与系统100中的其他组件之间引导数据信号,并且用于在处理设备总线、存储器114与系统i/o之间桥接数据信号。mch可通过存储器接口而耦合至存储器114。在一些实现方式中,系统逻辑芯片可提供图形端口,用于通过加速图形端口(agp)互连而耦合至图形控制器。53.计算系统100还可包括i/o控制器中枢(ich)。ich可提供经由本地i/o总线而至一些i/o设备的直接连接。本地i/o总线是用于将外围设备连接到存储器114、芯片组和处理器112的高速i/o总线。一些示例是音频控制器、固件中枢(闪存bios)、无线收发机、数据存储、包含用户输入和键盘接口的传统i/o控制器、诸如通用串行总线(usb)之类的串行扩展端口、以及网络控制器。数据存储设备可包括硬盘驱动器、软盘驱动器、cd-rom设备、闪存设备、或其他大容量存储设备。54.对于系统的另一实现方式,由如上所述的处理设备核120执行的指令可与芯片上系统一起使用。芯片上系统的一个实现方式包括处理设备和存储器。用于一个此类系统的存储器是闪存。闪存可以位于与处理设备和其他系统组件相同的管芯上。此外,诸如存储器控制器或图形控制器之类的其他逻辑块也可以位于芯片上系统上。55.图2是描绘根据一些实施例的实现td架构200的示例计算系统的框图。td架构200支持两种类型的td。第一类型的td是在其中租户信任csp以实施机密性、并且不实现本公开的实现方式的td架构的td。这种类型的传统td被描绘为td1210。td1210是具有cspvmm管理的tcb202的csptd。td1210可以包括cspvmm212,该cspvmm212管理cspvm214和/或一个或多个租户vm216a、216b。在这种情况下,租户vm216a、租户vm216b由在vm216a、vm216b的tcb202中的cspvmm212来管理。在本公开的实现方式中,租户vm216a、租户vm216b仍然可以经由该模型中的tme或mk-tme来利用存储器加密(下面进一步描述)。56.另一种类型的td是在其中租户不信任csp以实施机密性、并且因此依赖于具有本公开的实现方式的td架构的cpu的td。这种类型的td以两种变体被示出为td2220和td3230。示出td2220具有虚拟化模式(诸如,vmx),该虚拟化模式由在td2220中运行的租户vmm(非根)222利用以管理租户vm225a、租户vm225b。td3230不包括使用虚拟化模式的软件,而是替代地直接在td3230中运行开明的(enlightened)os235。td2220和td3230是具有如在本公开的实现方式中所描述的硬件实施的tcb204的租户td。在一个实现方式中,td2220或td3230可以与关于图1描述的td190a相同。57.tdrm180管理所有三种类型的td210、td220、td230的生命周期,包括管理资源的分配。然而,tdrm180不在用于td类型td2220和td3230的tcb中。td架构200不对在系统上活跃的td的数量或混合施加任何架构限制。然而,特定实现方式中的软件和某些硬件限制可能由于其他约束而限制在系统上并发地运行的td的数量。58.图3图示使用多密钥密码存储器保护系统300的实施例。在所示的实施例中,存储器保护系统300包括处理器302、系统代理304和存储器310。如下文进一步所述,存储器保护系统300为存储在存储器310上的数据提供密码保护。59.处理器302可用于执行指令、代码和/或任何其他形式的逻辑或软件,诸如与软件应用相关联的指令。处理器302可包括可操作以执行指令的逻辑或处理元件的任何组合,无论是从存储器加载的还是直接实现在硬件中的,诸如微处理器、数字信号处理器、现场可编程门阵列(fpga)、图形处理单元(gpu)、可编程逻辑阵列(pla)或专用集成电路(asic),以及其他示例。在一些实施例中,例如,处理器302和/或存储器保护系统300可以使用图6-图10的计算机架构来实现。60.存储器310可用于存储信息,诸如在执行期间由处理器302使用的代码和/或数据,和/或与系统300的应用或用户相关联的持久数据。存储器310可包括任何类型或组合的能够存储信息的组件,包括易失性存储器(例如,随机存取存储器(ram),诸如动态ram(dram)、同步动态ram(sdram)和静态ram(sram))和/或非易失性存储器(例如,存储类存储器(scm)、直接存取存储(das)存储器、非易失性双列直插存储器模块(nvdimm)和/或其他形式的闪存或固态存储)。61.系统代理304可以用于为处理器302提供各种功能,诸如,管理对存储器310和/或系统300的其他资源的访问。在所图示的实施例中,例如,系统代理304包括存储器控制器308,用于控制和/或管理对系统300的存储器310的访问。此外,如下文进一步描述,系统代理304还包括mktme引擎145,用于保护存储在存储器310上的数据。在一些实施例中,系统代理304还可(例如,使用直接媒体接口(dmi)和/或pci-express桥)提供处理器302与系统300的其他组件之间的接口。在各种实施例中,系统代理304可以包括被配置为执行本文所述的系统代理304的功能的逻辑元件的任何组合,无论是从存储器或其他非暂态计算机可读介质加载,还是直接在硬件中实现,包括通过非限制性示例:微处理器、数字信号处理器(dsp)、现场可编程门阵列(fpga)、图形处理单元(gpu)、可编程逻辑阵列(pla)、专用集成电路(asic)和/或虚拟机(vm)处理器。系统代理304可与处理器302集成,或者替代地,系统代理304可实现在通信地耦合或连接到处理器302的单独的芯片上。62.存储器控制器308可用于控制和/或管理对系统300的存储器310的访问。在各种实施例中,存储器控制器308可使用硬件和/或软件逻辑的任何组合来实现,包括微处理器、专用集成电路(asic)、现场可编程门阵列(fpga)、可编程逻辑阵列(pla)、虚拟机(vm)、和/或任何其他类型的电路系统或逻辑。63.在所图示的实施例中,系统300为存储器310提供密码存储器保护。在一些实施例中,例如,密码存储器保护可以通过扩展和/或修改特定的计算机架构来实现。例如,密码存储器保护可以通过扩展处理器302的功能和/或引入mktme引擎145来实现。在所图示的实施例中,例如,处理器302被扩展为支持控制寄存器303和可以用于启用和/或配置密码存储器保护的(多条)处理器指令,并且mktme引擎145被实现为提供密码存储器保护。虽然所图示的示例使用分开的逻辑块来描绘mktme引擎145和处理器302,但在实际的实施例中,mktme引擎145和处理器302可以集成在一起,或者替代地可以实现为分开的组件。在各种实施例中,例如,mktme引擎145可使用硬件和/或软件逻辑的任何组合来实现,包括微处理器、专用集成电路(asic)、现场可编程门阵列(fpga)、可编程逻辑阵列(pla)、虚拟机(vm)、和/或任何其他类型的电路系统或逻辑。64.mktme引擎145使用存储器加密来保护存储在存储器310上的数据。在一些实施例中,例如,mktme引擎145可以实现在存储器路径或存储器总线上,以允许对传送至存储器310的、和从存储器310传送的、和/或存储在存储器310上的数据的加密。此外,在一些实施例中,mktme引擎145可以是可配置或可编程的,并且可包括对多个加密密钥的支持。相应地,mktme引擎145可以(例如,由软件)配置或编程为使用不同的加密密钥和/或算法对存储器310的不同区域或页进行加密。以此方式,可以为不同的用户、租户、客户、应用和/或工作负载单独地提供和配置存储器加密。在一些实施例中,mktme引擎145存储一个或多个密钥306。65.例如,在一些实施例中,mktme引擎145可用于定义可以使用存储器加密单独地配置和保护的各种安全的或受保护的域。在一些实施例中,例如,“域”可以被视为与特定工作负载(例如,特定用户或应用的工作负载)相关联的资源的集合,并且可以包括存储器的包含与该工作负载相关联的数据的任何区域。例如,用于云服务供应方的客户工作负载的受保护的域可包括与操作系统(o/s)、虚拟机(vm)(例如,在虚拟机管理器(vmm)上运行的vm)和/或在o/s或vm上运行的任何环3应用相关联的资源(例如,存储器)。mktme引擎145可允许受保护的域被单独地配置和保护,从而允许每个受保护的域通过利用唯一的加密密钥对其相关联的代码和/或数据进行加密而在存储器中以密码方式被隔离。以此方式,通过为各种工作负载定义不同的保护域,不同的用户、客户和/或租户的工作负载能以密码方式被隔离。66.在一些实施例中,可使用处理器指令和/或硬件寄存器来发现和配置系统300的密码存储器保护。例如,在一些实施例中,处理器指令可以用于判定密码存储器保护是否由系统300支持,诸如,由软件用于标识特定处理器的能力的cpu标识(cpuid)指令。67.在判定了密码存储器保护由系统300支持之后,随后可使用硬件寄存器来启用和/或配置密码存储器保护,这些硬件寄存器诸如处理器302的控制寄存器303。例如,控制寄存器303可以包括允许软件发现、启用和/或配置系统300的密码存储器保护能力的各种型号专属寄存器(msr)。在一些实施例中,例如,控制寄存器303可包括存储器加密能力寄存器、存储器加密激活寄存器、和/或一个或多个存储器加密排除寄存器,如下文进一步描述。68.存储器加密能力寄存器(me_capability_msr)可用于允许软件发现系统300的存储器加密能力。例如,软件可以读取me_capability_msr(例如,使用读取msr(rdmsr)指令)来标识所支持的加密类型和/或算法、可并发地使用的加密密钥的最大数量等。下表图示存储器加密能力寄存器(me_capability_msr)的示例实施例。存储器加密能力寄存器(me_capability_msr)69.存储器加密激活寄存器(me_activate_msr)可用于激活系统300的密码存储器保护(例如,通过在寄存器字段中设置适当的值)。下表图示存储器加密激活寄存器(me_activate_msr)的示例实施例。存储器加密激活寄存器(me_activate_msr)70.存储器加密排除寄存器(me_exclude_base_msr和me_exclude_mask_msr)可用于将某些存储器区域排除在由系统300提供的密码存储器保护之外。例如,在一些实施例中,排除寄存器可用于标识存储器基址,并且然后可针对与基址匹配的存储器地址绕过存储器加密(例如,允许被排除或被绕过的存储器地址以明文模式被访问)。71.下表图示存储器加密排除掩码寄存器(me_exclude_mask_msr)的示例实施例,并且接下来的表图示存储器加密排除基址寄存器(me_exclude_base_msr)的示例实施例。存储器加密排除掩码寄存器(me_exclude_mask_msr)存储器加密排除基址寄存器(me_exclude_base_msr)72.在所图示的实施例中,mktme引擎145维护内部域密钥表307以标识已在系统300中配置的受保护的域。密钥表307可以使用任何形式的存储器或存储(例如,ram)来实现,并且还可以直接实现在mktme引擎145上、在存储器310中和/或使用另一存储器组件来实现。注意,不一定要使用“表”(其他数据结构可以起作用),然而,为了易于理解,在本描述中使用表。73.mktme引擎145包括密码单元305,用于使用或构建要在加密/解密中使用的微调(tweak)。mktme引擎145被布置为使用微调和公共密钥集来对由读取请求指定的具有经加密的存储器地址的数据解密。此处,公共密钥集是被使用的单个密钥集,而不考虑若干租户或租户工作负载中的哪一个正在被加密或解密。例如,使用来自公共密钥集的与第二租户的工作负载数据相同的密钥来加密第一租户的工作负载数据。这些工作负载的加密之间的区别在于,从来自密钥id注册的租户专用的密钥id-现时数(nonce)创建的租户(或域)专用微调。在示例中,解密是通过执行基于高级加密标准(aes)xex的微调的代码本模式与密文窃取(xts)(aes-xts)解密来完成的,其中aes-xts密钥k1和k2在公共密钥集中(例如,相同的k1和k2用于所有租户工作负载),并且微调跨互不信任的域是唯一的。以下表示传统的多密钥aes-xts技术:t=aes(k2,tweak)pp=pxort23.cc=aes(k1,pp)c=ccxort74.其中p是明文,c是所生成的密文,并且k1和k2是域专用密钥。因此,在该最后一个示例中,k1和k2来自公共密钥集并且不是域专用密钥,但微调专用于域。75.与上文所述的用于从存储器(例如,dram、2lm等)读取经加密的数据的那些技术类似的一组技术用于对要存储在存储器中的数据进行加密。因此,系统代理被布置为接收针对经加密的存储器的写入请求。同样,写入请求包括经加密的存储器地址。系统代理使用密钥id位从密钥表307中检取密钥id-现时数,并从密钥id-现时数、密钥id位和物理地址位构建微调。然后,微调结合公共密钥集用于对由写入请求指定的数据进行加密。然后,经加密的数据可以存储在存储器中位于经加密的存储器地址中的物理地址处。76.域密钥表307的条目307a-d各自对应于不同的受保护的域。例如,每个条目307a-d包括密钥或域标识符(id)、保护模式、和相关联的加密密钥(如果适用)。在一些实施例中,例如,密钥id可以表示在相关联的受保护的域内的存储器地址的较高阶位。例如,如上文所讨论,me_activate_msr寄存器的me_keyid_bits字段指定用于密钥id的位的数量。在所图示的示例中,域密钥表307中的每个密钥id使用5个位来表示。相应地,与给定的密钥id相关联的受保护的域覆盖其最高阶的5位与密钥id匹配的所有存储器地址。在所图示的实施例中,密钥id作为字段存储在密钥表307中,但在替代实施例中,密钥id可以用作到密钥表307中的索引而不是直接存储在密钥表307中。77.此外,在一些实施例中,可以支持多个保护模式,并且可以使用特定的保护模式来保护每个受保护的域。例如,在一些实施例中,所支持的保护模式可包括明文模式(例如,未加密的)、标准或默认加密模式(例如,使用标准或默认加密密钥加密的)、和/或定制加密模式(例如,使用唯一的加密密钥加密的)。相应地,密钥表307可标识与每个受保护的域或密钥id相关联的保护模式。78.例如,在所图示的示例中,域密钥表307包括四个条目。第一条目标识对应于密钥id00000的受保护的域(因此覆盖在最高阶5位中包括00000的所有存储器地址),其以默认加密模式使用密钥“abc”来保护。第二条目标识对应于密钥id00001的受保护的域(因此覆盖在最高阶5位中包括00001的所有存储器地址),其以明文模式来保护并且因此不具有相关联的加密密钥。第三条目标识对应于密钥id00010的受保护的域(因此覆盖在最高阶5位中包括00010的所有存储器地址),其以定制加密模式使用密钥“xyz”来保护。第四条目标识对应于密钥id00011的受保护的域(因此覆盖在最高阶5位中包括00011的所有存储器地址),其以默认加密模式使用密钥“abc”来保护。如这些示例所示,使用定制加密模式来保护的域具有唯一密钥(“xyz”),使用默认加密模式来保护的域共享加密密钥(“abc”),并且以明文模式来保护的域未被加密并且因此不具有相关联的密钥。79.在一些实施例中,可使用由处理器302实现的处理器指令(诸如“平台配置”(pconfig)指令)来定义和/或配置受保护的域。例如,pconfig指令可用于通过对mktme引擎145的密钥表307中的新条目进行编程(或通过修改现有的条目)来定义和/或配置受保护的域。以此方式,可以使用pconfig指令来以编程方式(例如,由管理软件)定义和配置受保护的域。80.客户端机器可能需要使用低功率状态以提高电池寿命。示例性状态可以包括挂起(s3)状态和休眠(s4)状态,在s3状态中存储器处于自刷新,但核与芯片组一起掉电,在s4状态中核、芯片组和存储器掉电。可能还存在所支持的附加功率状态,其中平台的不同部分掉电。为了支持客户端机器上的tdx,当mktme引擎145在这些功率状态下掉电时,与td相关联的密钥必须被保存。81.如所述,mktme引擎145维护密钥表,该密钥表存储每个密钥标识符或密钥id的信息。密钥id被携带在物理地址的最高有效位中,并且用于标识用于属于密钥id的存储器访问的密钥。每个td在其被vmm/tdx模块启动之前被指派密钥id和相关联的密钥,其中使密钥对于vmm永远不可见,以确保td数据不能被vmm读取/修改。82.对于td,在一些实施例中,唯一使用的模式是利用密钥id密钥的加密,以确保所生成的td代码和数据是经加密的(注意,它也可以利用完整性保护或任何其他密码模式来加密,诸如利用硬件重放保护的加密)。然而,td不是在系统上运行的唯一实体。vmm可以创建经加密的vm,这些vm是在vmm控制下使用它们自己的密钥的vm。换言之,对于这些vm,vmm没有离开信任边界。83.系统软件在进入低功率状态时得到通知,并且可以在进入低功率状态之前采取清理动作来保存状态,以便允许在不影响应用的情况下从低功率状态恢复。作为示例,跨越s3/s4,正在运行的应用保留它们的状态并且继续从它们停止的地方执行。然而,对于tdx,vmm不在tcb中,并且对td的密钥没有任何控制。出于安全考虑,通过pconfig指令的密钥编程接口不提供对密钥表的读出。为了允许密钥状态能够安全地被读出和恢复,本文详述两条指令(ktablesave和ktablerestore)。ktablesave指令的执行使得密钥表以经加密的、受到完整性和重放保护的状态返回到由指令指定的存储器位置中。ktablerestore指令的执行使得数据的blob被解密并验证其完整性,并恢复存储器加密引擎145中的状态。84.ktablesave指令的格式的实施例是ktablesavedst。在一些实施例中,ktablesave是指令的操作码助记符。操作码至少存储在图15的示例性格式的字段1503中。dst是目的地操作数,其可以是寄存器或存储器位置。目的地典型地使用(多个)寻址字段1505来提供。例如,reg字段1644或r/m字段1646可用于标识特定的寄存器和/或提供存储器寻址信息。85.图4图示用于密钥表保存/恢复的高级流程的实施例。具体而言,密钥表保存/恢复由vmm401调用,而不会导致密钥暴露。在接收到功率进入事件时,vmm401使用ktablesave指令从mktme引擎403接收受保护的密钥表。86.ktablesave指令的执行使得mktme引擎403的密钥表被读取、加密和受到完整性保护。在一些实施例中,ktablesave指令在传统的核设置中被执行,并且使得mktme引擎403对其密钥表进行读取、加密和完整性保护(例如,使用专用于此用途的熔丝密钥)。在一些实施例中,ktablesave指令在mktme引擎403上被执行。87.受保护的密钥表在由vmm在ktablesave指令中指定的存储器位置处作为blob被返回。对于其中存储器保留功率的功率状态,受保护的密钥表可以驻留在存储器中,直到退出该功率状态。对于其中存储器也掉电(例如,休眠)的功率状态,blob进一步由vmm401读取并被存储在盘上。在功率状态退出事件时,vmm401从存储器中或从盘中检取经加密的密钥表,对其进行解密,并提供经解密的密钥表以在执行ktablerestore指令时被恢复。该指令要么使得mktme引擎403恢复密钥表状态,要么被传递至mktme引擎403以供执行。一旦被恢复,vmm401就准备好恢复在功率状态进入时被挂起的vm/td。88.虽然vmm获得功率状态进入和退出的事件,但对于密钥而言vmm通常不受信任,并且因此vmm不能被允许直接从mktme硬件读取密钥表。因此,密钥表在被移交至vmm之前需要被保护。在一些实施例中,密钥表需要以下安全属性中的一个或多个:1)机密性(密钥不能以明文形式返回,并且因此,密钥表需要被加密);2)完整性(密钥表具有密钥和加密模式,并且对其中任一者的修改可能导致安全问题(例如,针对td将模式设置为无加密));和/或3)重放保护(密钥表应当受到重放保护,以确保密钥表总是被恢复到功率事件之前其所处于的状态)。89.为了满足安全要求,在一些实施例中,存储在熔丝中的密钥用于各种保护。密钥可以由物理不可克隆函数(puf)密钥进一步保护,以提供针对硬件攻击的强化。熔丝可以驻留在核120中或在mktme引擎145中,mktme引擎145充当平台的信任根。在一些实施例中,mktme引擎145利用aes-gcm以提供上述属性。密钥表被读取和加密,并且由mktme引擎145对内容生成消息认证码(mac)。除此之外,在一些实施例中,运行计数器304被用作mac构建的输入。该计数器在每个功率节约事件时被递增,并存储在非易失性存储(例如,mktme145中的闪存)中。将计数器存储在管芯上确保不受信任的软件不能跨功率状态指向旧的受保护的密钥表并使得密钥表被错误地恢复、从而导致安全问题。90.图5图示用于在ktablesave指令的执行期间执行的操作的流程的实施例。在501处,密钥表从mktme被读取。在503处,使用密钥对所读取的密钥表进行加密(例如,由密码单元305使用熔丝密钥)。91.在505处,由mktme(例如,由密码单元305)生成经加密的密钥表的mac。在一些实施例中,管芯上计数器被用作密码单元305的附加输入以生成mac。在507处,mac和经加密的密钥表被存储在由ktablesave指令的目的地操作数提供的地址处。92.图6图示用于在ktablerestore指令的执行期间执行的操作的流程的实施例。在601处,经加密的密钥表和mac从由ktablerestore指令的源指示的存储器位置被读取。93.在603处,经加密的密钥表的mac由mktme(例如,由密码单元305)生成,并且使用密钥对经加密的密钥表进行解密(例如,由密码单元305使用熔丝密钥)。在一些实施例中,管芯上计数器被用作密码单元305的附加输入以生成mac。94.在605处,作出对所读取的mac和所生成的mac的比较。在607处,当mac不匹配时,引发安全异常。在一些实施例中,该异常使得td和/或vm不启动。当mac匹配时,td和/或vm被允许启动。当密钥表blob已经被vmm或任何其他软件(或甚至被攻击者利用物理访问)修改时,它将被检测为完整性失败,即使在受保护的密钥表从较旧的功率状态进入被重放的情况下。95.在一些实施例中,所详述的操作中的一些是由微代码本身执行的。在一些实施例中,实现指令的微代码指示安全引擎执行操作中的一些。在后一种情况下,安全引擎上的固件可以引起上述操作。96.图7图示用于处理诸如ktablerestore指令和ktablesave指令之类的指令的硬件的实施例。如所示,存储703存储要被执行的一条或多条ktablerestore和ktablesave指令701。97.指令701由解码电路705接收。例如,解码电路705从取出逻辑/电路接收该指令。98.稍后将详述至少一个指令格式的更详细的实施例。解码电路705将指令解码为一个或多个操作。在一些实施例中,该解码包括:生成要由执行电路(诸如,执行电路709)执行的多个微操作。解码电路705还对指令前缀解码。99.在一些实施例中,寄存器重命名、寄存器分配和/或调度电路707提供用于以下一项或多项的功能:1)将逻辑操作数值重命名为物理操作数值(例如,一些实施例中的寄存器别名表);2)将状态位和标志分配给经解码的指令;以及3)(例如,在一些实施例中,使用预留站)调度经解码的指令以供在指令池外部的执行电路上执行。100.寄存器(寄存器堆)和/或存储器708将数据存储为要被执行电路709操作的指令的操作数。示例性寄存器类型包括紧缩数据寄存器、通用寄存器和浮点寄存器。101.执行电路709执行经解码的指令。示例性的详细的执行电路在图4、图12等中示出。在一些实施例中,对经解码的ktablerestore指令的执行使得执行电路:从源地址读取经加密的密钥数据结构和相关联的mac;对所读取的密钥数据结构的内容进行解密;至少对经解密的所读取的密钥数据结构生成mac;确定所生成的mac何时与所读取的mac匹配,其中,当mac不匹配时,异常被生成,并且当mac匹配时,密钥数据结构在密码引擎中被恢复;以及生成操作状态并将操作状态存储在所标识的目的地操作数位置中。102.在一些实施例中,对经解码的ktablesave指令的执行使得执行电路:读取密钥数据结构;对所读取的密钥数据结构的内容进行加密;至少对经加密的所读取的密钥数据结构生成mac;将mac和经加密的所读取的密钥数据结构存储在目的地地址处。103.在一些实施例中,引退/写回电路711在架构上将目的地寄存器提交到寄存器或存储器708中,并且引退指令。104.图8图示由处理器执行的用于处理ktablesave指令的方法的实施例。例如,如图12(b)中所示的处理器核、如下文详述的流水线等执行该方法。105.在801处,取出指令。例如,取出单条ktablesave指令。该指令包括用于操作码的字段和用于标识源操作数的一个或多个字段,该源操作数用于存储或编码目的地地址,其中,操作码用于指示执行电路用于:读取密钥数据结构,对所读取的密钥数据结构的内容进行加密,至少对经加密的所读取的密钥数据结构生成mac,将mac和经加密的所读取的密钥数据结构存储在目的地地址处。在一些实施例中,源操作数是存储存储器地址的寄存器。在其他实施例中,源操作数是存储器位置。106.在一些实施例中,在802处,将单条指令变换为一条或多条指令。这些一条或多条指令可以具有不同的指令集架构。107.在803处,对所取出的指令(或经变换的一条或多条指令)解码。例如,由诸如本文详述的解码电路之类的解码电路对所取出的算术递归指令解码。108.在805处,检取与经解码的指令的源操作数相关联的数据值。例如,当源操作数中的一个或多个是存储器操作数时,检取来自所指示的存储器位置的数据。109.在807处,由诸如本文中详述的执行电路(硬件)之类的执行电路(硬件)执行经解码的指令。对于ktablesave指令,该执行将使得执行电路至少用于:读取密钥数据结构,对所读取的密钥数据结构的内容进行加密,至少对经加密的所读取的密钥数据结构生成mac,将mac和经加密的所读取的密钥数据结构存储在目的地地址处。在一些实施例中,该执行是由mktme执行的。在其他实施例中,核的执行电路用于使得mktme执行这些动作。在一些实施例中,使用包括计数器值的输入来生成mac。110.在一些实施例中,在809处,提交或引退指令。111.图9图示由处理器执行的用于处理ktablerestore指令的方法的实施例。例如,如图12(b)中所示的处理器核、如下文详述的流水线等执行该方法。112.在901处,取出指令。例如,取出单条ktablerestore指令。该指令包括用于操作码的字段、和用于标识用于存储或编码源地址的源操作数的一个或多个字段、和用于标识用于存储操作状态的目的地操作数位置的一个或多个字段,其中,操作码用于指示执行电路用于:从源地址读取经加密的密钥数据结构和相关联的mac;对所读取的密钥数据结构的内容进行解密;至少对经解密的所读取的密钥数据结构生成mac;确定所生成的mac何时与所读取的mac匹配,其中,当mac不匹配时,异常被生成,并且当mac匹配时,密钥数据结构在密码引擎中被恢复;以及生成操作状态并将操作状态存储在所标识的目的地操作数位置中。在一些实施例中,源操作数是存储存储器地址的寄存器。在其他实施例中,源操作数是存储器位置。在一些实施例中,目的地操作数是寄存器。在一些实施例中,状态是成功或失败中的一者。113.在一些实施例中,在902处,将单条指令变换为一条或多条指令。这些一条或多条指令可以具有不同的指令集架构。114.在903处,对所取出的指令(或经变换的一条或多条指令)解码。例如,由诸如本文详述的解码电路之类的解码电路对所取出的算术递归指令解码。115.在905处,检取与经解码的指令的源操作数相关联的数据值。例如,当源操作数中的一个或多个是存储器操作数时,检取来自所指示的存储器位置的数据。116.在907处,由诸如本文中详述的执行电路(硬件)之类的执行电路(硬件)执行经解码的指令。对于ktablerestore指令,该执行将使得执行电路至少:从源地址读取经加密的密钥数据结构和相关联的mac;对所读取的密钥数据结构的内容进行解密;至少对经解密的所读取的密钥数据结构生成mac;确定所生成的mac何时与所读取的mac匹配,其中,当mac不匹配时,异常被生成,并且当mac匹配时,密钥数据结构在密码引擎中被恢复;以及生成操作状态并将操作状态存储在所标识的目的地操作数位置中。在一些实施例中,使用包括计数器值的输入来生成mac。117.在一些实施例中,在909处,提交或引退指令。118.上文详述的实施例可以在许多不同的架构和系统中利用。下文详述示例性架构、系统、处理器等的示例。示例性计算机架构119.下文详述示例性计算机架构的描述。本领域中已知的对膝上型设备、台式机、手持式pc、个人数字助理、工程工作站、服务器、网络设备、网络中枢、交换机、嵌入式处理器、数字信号处理器(dsp)、图形设备、视频游戏设备、机顶盒、微控制器、蜂窝电话、便携式媒体播放器、手持式设备以及各种其他电子设备的其他系统设计和配置也是合适的。一般地,能够包含如本文中所公开的处理器和/或其他执行逻辑的各种各样的系统或电子设备一般都是合适的。120.图10图示示例性系统的实施例。多处理器系统1000是点对点互连系统,并且包括多个处理器,多个处理器包括经由点对点互连1050耦合的第一处理器1070和第二处理器1080。在一些实施例中,第一处理器1070和第二处理器1080是同构的。在一些实施例中,第一处理器1070和第二处理器1080是异构的。121.处理器1070和1080示出为分别包括集成存储器控制器(imc)单元电路1072和1082。处理器1070还包括作为其互连控制器单元的一部分的点对点(p-p)接口1076和1078;类似地,第二处理器1080包括p-p接口1086和1088。处理器1070、1080可以经由使用点对点(p-p)接口电路1078、1088的p-p互连1050来交换信息。imc1072和1082将处理器1070、1080耦合到相应的存储器,即存储器1032和存储器1034,这些存储器可以是本地附连到相应处理器的主存储器的部分。122.处理器1070、1080可各自经由使用点对点接口电路1076、1094、1086和1098的各个p-p互连1052和1054与芯片组1090交换信息。芯片组1090可以任选地经由高性能接口1092来与协处理器1038交换信息。在一些实施例中,协处理器1038是专用处理器,诸如例如,高吞吐量mic处理器、网络或通信处理器、压缩引擎、图形处理器、gpgpu、嵌入式处理器,等等。123.共享高速缓存(未示出)可被包括在任一处理器1070、1080中,或在这两个处理器的外部但经由p-p互连与这些处理器连接,使得如果处理器被置于低功率模式,则任一个或这两个处理器的本地高速缓存信息可被存储在共享高速缓存中。124.芯片组1090可以经由接口1096耦合到第一互连1016。在一些实施例中,第一互连1016可以是外围组件互连(pci)互连或诸如pci快捷互连或另一i/o互连之类的互连。在一些实施例中,互连中的一个互连耦合到功率控制单元(pcu)1017,功率控制单元1017可以包括用于执行与处理器1070、1080和/或协处理器1038有关的功率管理操作的电路、软件和/或固件。pcu1017将控制信息提供给电压调节器,以使电压调节器生成适当的经调节的电压。pcu1017还提供控制信息以控制所生成的操作电压。在各实施例中,pcu1017可包括用于执行基于硬件的功率管理的各种功率管理逻辑单元(电路)。此类功率管理可以完全由处理器控制(例如,由各种处理器硬件控制,并且其可以由工作负载和/或功率、热约束或其他处理器约束触发),并且/或者功率管理可以响应于外部源(诸如,平台或管理功率源或系统软件)而被执行。125.pcu1017被图示为作为与处理器1070和/或处理器1080分开的逻辑存在。在其他情形下,pcu1017可以在处理器1070或1080的核中的给定的一个或多个核(未示出)上执行。在一些情况下,可将pcu1017实现为被配置成用于执行其自身的专用功率管理代码(有时被称为p代码)的(专用的或通用的)微控制器或其他控制逻辑。在另外的其他实施例中,将由pcu1017执行的功率管理操作可在处理器外部实现,诸如,通过分开的功率管理集成电路(pmic)或处理器外部的另一组件的方式。在另外的其他实施例中,将由pcu1017执行的功率管理操作可在bios或其他系统软件内实现。126.各种i/o设备1014可连同互连(总线)桥1018耦合至第一互连1016,互连桥1018将第一互连1016耦合至第二互连1020。在一些实施例中,诸如协处理器、高吞吐量mic处理器、gpgpu、加速器(诸如例如,图形加速器或数字信号处理(dsp)单元)、现场可编程门阵列(fpga)或任何其他处理器的一个或多个附加处理器1015耦合到第一互连1016。在一些实施例中,第二互连1020可以是低引脚数(lpc)互连。各种设备可以耦合到第二互连1020,包括例如,键盘和/或鼠标1022、通信设备1027和存储单元电路1028。在一些实施例中,存储单元电路1028可以是可以包括指令/代码和数据1030的盘驱动器或其他大容量存储设备。此外,音频i/o1024可被耦合至第二互连1020。注意,与上述点对点架构不同的其他架构是可能的。例如,代替点对点架构,诸如多处理器系统1000之类的系统可以实现多分支互连或其他此类架构。示例性核架构、处理器和计算机架构127.处理器核能以不同方式、出于不同的目的、在不同的处理器中实现。例如,此类核的实现方式可以包括:1)旨在用于通用计算的通用有序核;2)旨在用于通用计算的高性能通用乱序核;3)旨在主要用于图形和/或科学(吞吐量)计算的专用核。不同处理器的实现方式可包括:1)cpu,其包括旨在用于通用计算的一个或多个通用有序核和/或旨在用于通用计算的一个或多个通用乱序核;以及2)协处理器,其包括旨在主要用于图形和/或科学(吞吐量)的一个或多个专用核。此类不同的处理器导致不同的计算机系统架构,这些计算机系统架构可包括:1)在与cpu分开的芯片上的协处理器;2)在与cpu相同的封装中但在分开的管芯上的协处理器;3)与cpu在相同管芯上的协处理器(在该情况下,此类协处理器有时被称为专用逻辑或被称为专用核,该专用逻辑诸如,集成图形和/或科学(吞吐量)逻辑);以及4)芯片上系统,其可以将所描述的cpu(有时被称为(多个)应用核或(多个)应用处理器)、以上描述的协处理器和附加功能包括在同一管芯上。接着描述示例性核架构,随后描述示例性处理器和计算机架构。128.图11图示可具有多于一个的核、可具有集成存储器控制器、并且可具有集成图形器件的处理器1100的实施例的框图。实线框图示具有单个核1102a、系统代理1110、一个或多个互连控制器单元电路的集合1116的处理器1100,而虚线框的任选增加图示具有多个核1102(a)-(n)、系统代理单元电路1110中的一个或多个集成存储器控制器单元电路的集合1114、和专用逻辑1108、以及一个或多个互连控制器单元电路的集合1116的替代处理器1100。注意,处理器1100可以是图10的处理器1070或1080、或协处理器1038或1015中的一个。129.因此,处理器1100的不同实现方式可包括:1)cpu,其中专用逻辑1108是集成图形和/或科学(吞吐量)逻辑(其可包括一个或多个核,未示出),并且核1102(a)-(n)是一个或多个通用核(例如,通用有序核、通用乱序核、或这两者的组合);2)协处理器,其中核1102(a)-(n)是旨在主要用于图形和/或科学(吞吐量)的大量专用核;以及3)协处理器,其中核1102(a)-(n)是大量通用有序核。因此,处理器1100可以是通用处理器、协处理器或专用处理器,诸如例如,网络或通信处理器、压缩引擎、图形处理器、gpgpu(通用图形处理单元电路)、高吞吐量的集成众核(mic)协处理器(包括30个或更多核)、嵌入式处理器,等等。处理器可以被实现在一个或多个芯片上。处理器1100可以是一个或多个基板的一部分,和/或可使用多种工艺技术(诸如例如,bicmos、cmos、或nmos)中的任何技术被实现在一个或多个基板上。130.存储器层级结构包括核1102(a)-(n)内的一个或多个级别的高速缓存单元电路1104(a)-(n)、一个或多个共享高速缓存单元电路的集合1106、以及耦合至集成存储器控制器单元电路的集合1114的外部存储器(未示出)。一个或多个共享高速缓存单元电路的集合1106可包括一个或多个中间级别的高速缓存(诸如第二级(l2)、第三级(l3)、第四级(l4))或其他级别的高速缓存(诸如末级高速缓存(llc))和/或以上各项的组合。尽管在一些实施例中,基于环的互连网络电路1112将专用逻辑1108(例如,集成图形逻辑)、共享高速缓存单元电路的集合1106以及系统代理单元电路1110互连,但替代实施例使用任何数量的公知技术来将这些单元互连。在一些实施例中,维持共享高速缓存单元电路1106和核1102(a)-(n)中的一个或多个之间的一致性。131.在一些实施例中,核1102(a)-(n)中的一个或多个能够实现多线程化。系统代理单元电路1110包括协调和操作核1102(a)-(n)的那些组件。系统代理单元电路1110可包括例如功率控制单元(pcu)电路和/或显示单元电路(未示出)。pcu可以是对核1102(a)-(n)和/或专用逻辑1108(例如,集成图形逻辑)的功率状态进行调节所需的逻辑和组件,或可包括这些逻辑和组件。显示单元电路用于驱动一个或多个外部连接的显示器。132.核1102(a)-(n)在架构指令集方面可以是同构的或异构的;即,核1102(a)-(n)中的两个或更多个核可能能够执行相同的指令集,而其他核可能能够执行该指令集的仅仅子集或不同的指令集。示例性核架构有序和乱序核框图133.图12(a)是图示根据本发明的实施例的示例性有序流水线以及示例性寄存器重命名的乱序发布/执行流水线两者的框图。图12(b)是图示根据本发明的实施例的要包括在处理器中的有序架构核的示例性实施例和示例性的寄存器重命名的乱序发布/执行架构核两者的框图。图12(a)-图12(b)中的实线框图示有序流水线和有序核,而任选增加的虚线框图示寄存器重命名的、乱序发布/执行流水线和核。考虑到有序方面是乱序方面的子集,将描述乱序方面。134.在图12(a)中,处理器流水线1200包括取出级1202、可选的长度解码级1204、解码级1206、可选的分配级1208、可选的重命名级1210、调度(也称为分派或发布)级1212、可选的寄存器读取/存储器读取级1214、执行级1216、写回/存储器写入级1218、可选的异常处置级1222、以及可选的提交级1224。一个或多个操作可以在这些处理器流水线级中的每一级中执行。例如,在取出级1202期间,从指令存储器取出一条或多条指令,在解码级1206期间,可以对所取出的一条或多条指令进行解码,可以生成使用所转发的寄存器端口的地址(例如,加载存储单元(lsu)地址),并且可以执行分支转发(例如,立即数偏移或链接寄存器(lr))。在一个实施例中,解码级1206和寄存器读取/存储器读取级1214可以组合成一个流水线级。在一个实施例中,在执行级1216期间,可以执行经解码的指令,可以执行lsu地址/数据流水线到高级微控制器总线(ahb)接口,可以执行乘法和加法操作,可以执行具有分支结果的算术操作,等等。135.作为示例,示例性寄存器重命名的乱序发布/执行核架构可如下所述地实现流水线1200:1)指令取出1238执行取出级1202和长度解码级1204;2)解码单元电路1240执行解码级1206;3)重命名/分配器单元电路1252执行分配级1208和重命名级1210;4)(多个)调度器单元电路1256执行调度级1212;5)(多个)物理寄存器堆单元电路1258和存储器单元电路1270执行寄存器读取/存储器读取级1214;执行集群1260执行执行级1216;6)存储器单元电路1270和(多个)物理寄存器堆单元电路1258执行写回/存储器写入级1218;7)各单元(单元电路)可牵涉到异常处置级1222;以及8)引退单元电路1254和(多个)物理寄存器堆单元电路1258执行提交级1224。136.图12(b)示出处理器核1290,处理器核1290包括耦合到执行引擎单元电路1250的前端单元电路1230,并且两者耦合到存储器单元电路1270。核1290可以是精简指令集计算(risc)核、复杂指令集计算(cisc)核、超长指令字(vliw)核、或混合或替代的核类型。作为又一选项,核1290可以是专用核,诸如例如,网络或通信核、压缩引擎、协处理器核、通用计算图形处理单元(gpgpu)核、图形核,等等。137.前端单元电路1230可包括耦合至指令高速缓存单元电路1234的分支预测单元电路1232,该指令高速缓存单元电路1234耦合至指令转换后备缓冲器(tlb)1236,该指令转换后备缓冲器1236耦合至指令取出单元电路1238,该指令取出单元电路1238耦合至解码单元电路1240。在一个实施例中,指令高速缓存单元电路1234被包括在存储器单元电路1270中,而不是在前端单元电路1230中。解码单元电路1240(或解码器)可对指令解码,并且生成从原始指令解码出的、或以其他方式反映原始指令的、或从原始指令导出的一个或多个微操作、微代码进入点、微指令、其他指令、或其他控制信号作为输出。解码单元电路1240可进一步包括地址生成单元电路(agu,未示出)。在一个实施例中,agu使用所转发的寄存器端口生成lsu地址,并且可以进一步执行分支转发(例如,立即数偏移分支转发、lr寄存器分支转发等)。解码单元电路1240可使用各种不同的机制来实现。合适机制的示例包括但不限于,查找表、硬件实现、可编程逻辑阵列(pla)、微代码只读存储器(rom)等。在一个实施例中,核1290包括存储用于某些宏指令的微代码的微代码rom(未示出)或其他介质(例如,在解码单元电路1240中,或以其他方式在前端单元电路1230内)。在一个实施例中,解码单元电路1240包括微操作(micro-op)或操作高速缓存(未示出)以保持/高速缓存在处理器流水线1200的解码级或其他级期间生成的经解码的操作、微标签或微操作。解码单元电路1240可耦合到执行引擎单元电路1250中的重命名/分配器单元电路1252。138.执行引擎电路1250包括重命名/分配器单元电路1252,该重命名/分配器单元电路1252耦合到引退单元电路1254和一个或多个调度器电路的集合1256。(多个)调度器电路1256表示任意数量的不同调度器,包括预留站、中央指令窗口等。在一些实施例中,(多个)调度器电路1256可以包括算术逻辑单元(alu)调度器/调度电路、alu队列、算术生成单元(agu)调度器/调度电路、agu队列,等等。(多个)调度器电路1256耦合到(多个)物理寄存器堆电路1258。(多个)物理寄存器堆电路1258中的每个物理寄存器堆电路表示一个或多个物理寄存器堆,其中不同的物理寄存器堆存储一种或多种不同的数据类型,诸如,标量整数、标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点、状态(例如,作为要执行的下一条指令的地址的指令指针)等。在一个实施例中,(多个)物理寄存器堆单元电路1258包括向量寄存器单元电路、写掩码寄存器单元电路和标量寄存器单元电路。这些寄存器单元可以提供架构向量寄存器、向量掩码寄存器、通用寄存器等。(多个)物理寄存器堆单元电路1258由引退单元电路1254(也称为引退队列)重叠,以图示可实现寄存器重命名和乱序执行的各种方式(例如,使用(多个)重排序缓冲器(rob)和(多个)引退寄存器堆;使用(多个)未来文件、(多个)历史缓冲器和(多个)引退寄存器堆;使用寄存器映射和寄存器池,等等)。引退单元电路1254和(多个)物理寄存器堆电路1258耦合到(多个)执行集群1260。(多个)执行集群1260包括一个或多个执行单元电路的集合1262以及一个或多个存储器访问电路的集合1264。执行单元电路1262可执行各种算术、逻辑、浮点或其他类型的操作(例如,移位、加法、减法、乘法)并可对各种数据类型(例如,标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点)执行。尽管一些实施例可以包括专用于特定功能或功能集合的多个执行单元或执行单元电路,但是其他实施例可包括仅一个执行单元电路或全都执行所有功能的多个执行单元/执行单元电路。(多个)调度器电路1256、(多个)物理寄存器堆单元电路1258和(多个)执行集群1260示出为可能有多个,因为某些实施例为某些类型的数据/操作创建分开的流水线(例如,标量整数流水线、标量浮点/紧缩整数/紧缩浮点/向量整数/向量浮点流水线,和/或各自具有其自身的调度器电路、(多个)物理寄存器堆单元电路和/或执行集群的存储器访问流水线——并且在分开的存储器访问流水线的情况下,实现其中仅该流水线的执行集群具有(多个)存储器访问单元电路1264的某些实施例)。还应当理解,在使用分开的流水线的情况下,这些流水线中的一个或多个可以是乱序发布/执行,并且其余流水线可以是有序的。139.在一些实施例中,执行引擎单元电路1250可以执行加载存储单元(lsu)地址/数据流水线到高级微控制器总线(ahb)接口(未示出)、以及地址分阶段和写回、数据分阶段加载、存储和分支。140.存储器访问电路的集合1264耦合到存储器单元电路1270,该存储器单元电路1270包括数据tlb单元电路1272,该数据tlb单元电路1272耦合到数据高速缓存电路1274,该数据高速缓存电路1274耦合到第二级(l2)高速缓存电路1276。在一个示例性实施例中,存储器访问单元电路1264可包括加载单元电路、存储地址单元电路和存储数据单元电路,其中的每一个均耦合至存储器单元电路1270中的数据tlb电路1272。指令高速缓存电路1234还耦合到存储器单元电路1270中的第二级(l2)高速缓存单元电路1276。在一个实施例中,指令高速缓存1234和数据高速缓存1274被组合为l2高速缓存单元电路1276、第三级(l3)高速缓存单元电路(未示出)和/或主存储器中的单个指令和数据高速缓存(未示出)。l2高速缓存单元电路1276耦合到一个或多个其他级别的高速缓存,并最终耦合到主存储器。141.核1290可支持一个或多个指令集(例如,x86指令集(具有已与较新版本一起添加的一些扩展);mips指令集;arm指令集(具有诸如neon的任选的附加扩展)),其中包括本文中描述的(多条)指令。在一个实施例中,核1290包括用于支持紧缩数据指令集扩展(例如,avx1、avx2)的逻辑,由此允许使用紧缩数据来执行由许多多媒体应用使用的操作。示例性(多个)执行单元电路142.图13图示(多个)执行单元电路的实施例,诸如图12(b)的(多个)执行单元电路1262。如图所示,(多个)执行单元电路1262可以包括一个或多个alu电路1301、向量/simd单元电路1303、加载/存储单元电路1305、和/或分支/跳转单元电路1307。alu电路1301执行整数算术和/或布尔运算。向量/simd单元电路1303对紧缩数据(诸如simd/向量寄存器)执行向量/simd操作。加载/存储单元电路1305执行加载和存储指令,以将数据从存储器加载到寄存器中或将数据从寄存器存储到存储器。加载/存储单元电路1305也可以生成地址。分支/跳转单元电路1307取决于指令而引起到存储器地址的分支或跳转。浮点单元(fpu)电路1309执行浮点算术。(多个)执行单元电路1262的宽度取决于实施例而变化,并且范围可以从16位到1024位。在一些实施例中,两个或更多个较小的执行单元在逻辑上被组合以形成较大的执行单元(例如,两个128位执行单元在逻辑上被组合以形成256位执行单元)。示例性寄存器架构143.图14是根据一些实施例的寄存器架构1400的框图。如图所示,存在向量/simd寄存器1410,其宽度从128位到1024位变化。在一些实施例中,向量/simd寄存器1410在物理上是512位的,并且取决于映射,只有较低位中的一些位被使用。例如,在一些实施例中,向量/simd寄存器1410是512位的zmm寄存器:较低的256位用于ymm寄存器,并且较低的128位用于xmm寄存器。由此,存在寄存器的叠加。在一些实施例中,向量长度字段在最大长度与一个或多个其他较短长度之间进行选择,其中每个此类较短长度是前一长度的一半长度。标量操作是对zmm/ymm/xmm寄存器中的最低阶数据元素位置执行的操作;取决于实施例,较高阶数据元素位置保持与在指令之前相同或者被归零。144.在一些实施例中,寄存器架构1400包括写掩码/断言寄存器1415。例如,在一些实施例中,存在8个写掩码/断言寄存器(有时称为k0到k7),它们的尺寸各自为16位、32位、64位或128位。写掩码/断言寄存器1415可以允许合并(例如,允许目的地中的任何元素集合在任何操作的执行期间免于更新)和/或归零(例如,归零向量掩码允许目的地中的任何元素集合在任何操作的执行期间被归零)。在一些实施例中,给定的写掩码/断言寄存器1415中的每个数据元素位置对应于目的地的数据元素位置。在其他实施例中,写掩码/断言寄存器1415是可缩放的,并由给定向量元素的设定数量个启用位组成(例如,每个64位向量元素有8个启用位)。145.寄存器架构1400包括多个通用寄存器1425。这些寄存器可以是16位、32位、64位等,并且可用于标量操作。在一些实施例中,这些寄存器通过名称rax、rbx、rcx、rdx、rbp、rsi、rdi、rsp以及r8到r15来引用。146.在一些实施例中,寄存器架构1400包括标量浮点寄存器1445,标量浮点寄存器1445用于使用x87指令集扩展的对32/64/80位浮点数据的标量浮点操作,或者作为mmx寄存器对64位紧缩整数数据执行操作,以及用于为在mmx和xmm寄存器之间执行的一些操作保存操作数。147.一个或多个标志寄存器1440(例如,eflags,rflags等)存储用于算术、比较和系统操作的状态和控制信息。例如,一个或多个标志寄存器1440可以存储条件代码信息,诸如进位、奇偶性、辅助进位、零、符号和溢出。在一些实施例中,一个或多个标志寄存器1440被称为程序状态和控制寄存器。148.段寄存器1420包含用于访问存储器的段点。在一些实施例中,这些寄存器通过名称cs、ds、ss、es、fs和gs来引用。149.机器专用寄存器(msr)1435控制和报告处理器性能。大多数msr1435处置与系统有关的功能,并且不可由应用程序访问。机器校验寄存器1460由控制、状态和错误报告msr组成,这些msr用于检测和报告硬件错误。150.一个或多个指令指针寄存器1430存储指令指针值。(多个)控制寄存器1455(例如,cr0-cr4)确定处理器(例如,处理器1070、1080、1038、1015和/或1100)的操作模式和当前执行的任务的特性。调试寄存器1450控制并允许监控处理器或核的调试操作。151.存储器管理寄存器1465指定用于受保护模式存储器管理的数据结构的位置。这些寄存器可以包括gdtr、idrt、任务寄存器和ldtr寄存器。152.本发明的替代实施例可以使用更宽的或更窄的寄存器。另外,本发明的替代实施例可以使用更多、更少或不同的寄存器堆和寄存器。指令集153.指令集架构(isa)可包括一种或多种指令格式。给定的指令格式可定义各种字段(例如,位的数量、位的位置)以指定要执行的操作(例如,操作码)以及将对其执行该操作的(多个)操作数和/或(多个)其他数据字段(例如,掩码),等等。通过指令模板(或子格式)的定义来进一步分解一些指令格式。例如,可将给定指令格式的指令模板定义为具有该指令格式的字段(所包括的字段通常按照相同顺序,但是至少一些字段因为较少的字段被包括而具有不同的位的位置)的不同子集,和/或定义为具有以不同方式进行解释的给定字段。由此,isa的每一条指令使用给定的指令格式(并且如果被定义,则按照该指令格式的指令模板中的给定的一个指令模板)来表达,并包括用于指定操作和操作数的字段。例如,示例性add(加法)指令具有特定的操作码和指令格式,该特定的指令格式包括用于指定该操作码的操作码字段和用于选择操作数(源1/目的地以及源2)的操作数字段;并且该add指令在指令流中出现将使得在操作数字段中具有选择特定操作数的特定的内容。示例性指令格式154.本文中所描述的(多条)指令的实施例能以不同格式来具体化。此外,在下文中详述示例性系统、架构和流水线。(多条)指令的实施例可在此类系统、架构和流水线上执行,但是不限于详述的那些系统、架构和流水线。155.图15图示指令格式的实施例。如图所示,指令可以包括多个组分,包括但不限于用于以下各项的一个或多个字段:一个或多个前缀1501,操作码1503,寻址信息1505(例如,寄存器标识符、存储器寻址信息等),位移值1507,和/或立即数1509。注意,一些指令利用格式中的一些或全部字段,而其他指令可能仅使用用于操作码1503的字段。在一些实施例中,图示的顺序是这些字段要被编码的顺序,然而,应当理解,在其他实施例中,这些字段可以以不同的顺序被编码、组合等。156.(多个)前缀字段1501在使用时对指令进行修改。在一些实施例中,一个或多个前缀用于重复串指令(例如,0xf0、0xf2、0xf3等),提供分段超控(例如,0x2e、0x36、0x3e、0x26、0x64、0x65、0x2e、0x3e等),执行总线锁定操作,和/或改变操作数(例如,0x66)和地址尺寸(例如,0x67)。某些指令需要强制性前缀(例如,0x66、0xf2、0xf3等)。这些前缀中的某些前缀可能被认为是“传统”前缀。在本文中详述其一个或多个示例的其他前缀指示和/或提供进一步的能力,诸如指定特定寄存器等。其他前缀通常在“传统”前缀之后。157.操作码字段1503用于至少部分地定义在对指令的解码时要执行的操作。在一些实施例中,在操作码字段1503中编码的主操作码的长度为1、2或3字节。在其他实施例中,主操作码可以是不同的长度。附加的3位操作码字段有时被编码在另一个字段中。158.寻址字段1505用于寻址指令的一个或多个操作数,诸如存储器或一个或多个寄存器中的位置。图16图示寻址字段1505的实施例。在该图示中,示出可选的modr/m字节1602和可选的比例、索引、基址(sib)字节1604。modr/m字节1602和sib字节1604用于编码指令的多达两个操作数,其中每一个是直接的寄存器或有效的存储器地址。注意,这些字段中的每一个都是可选的,因为并非所有的指令都包括这些字段中的一个或多个。modr/m字节1602包括mod字段1642、寄存器字段1644、和r/m字段1646。159.mod字段1642的内容将存储器访问模式和非存储器访问模式区分开。在一些实施例中,当mod字段1642的值为b11时,利用寄存器直接寻址模式,否则使用寄存器间接寻址。160.寄存器字段1644可以编码目的地寄存器操作数或源寄存器操作数,或者可以编码操作码扩展而不用于编码任何指令操作数。寄存器索引字段1644的内容直接地或通过地址生成来指定源或目的地操作数的位置(在寄存器中或在存储器中)。在一些实施例中,寄存器字段1644利用来自前缀(例如,前缀1501)的附加位来补充以允许更大的寻址。161.r/m字段1646可用于编码引用存储器地址的指令操作数,或者可用于编码目的地寄存器操作数或源寄存器操作数。注意,在一些实施例中,r/m字段1646可与mod字段1642组合以指示寻址模式。162.sib字节1604包括比例字段1652、索引字段1654和基址字段1656以用于地址的生成。比例字段1652指示比例因数。索引字段1654指定要使用的索引寄存器。在一些实施例中,索引字段1654利用来自前缀(例如,前缀1501)的附加位来补充以允许更大的寻址。基址字段1656指定要使用的基址寄存器。在一些实施例中,基址字段1656利用来自前缀(例如,前缀1501)的附加位来补充以允许更大的寻址。在实践中,比例字段1652的内容允许对索引字段1654的内容进行缩放以用于存储器地址生成(例如,用于使用2比例*索引+基址的地址生成)。163.一些寻址形式利用位移值来生成存储器地址。例如,可以根据2比例*索引+基址+位移、索引*比例+位移、r/m+位移、指令指针(rip/eip)+位移、寄存器+位移等生成存储器地址。位移可以是1字节、2字节、4字节等的值。在一些实施例中,位移字段1507提供该值。此外,在一些实施例中,在寻址字段1505的mod字段中编码位移因数使用,其指示压缩的位移方案,对于该方案,通过将disp8与基于向量长度、b位的值和指令的输入元素尺寸确定的比例因数n相乘来计算位移值。位移值被存储在位移字段1507中。164.在一些实施例中,立即数字段1509指定指令的立即数。立即数可以被编码为1字节的值、2字节的值、4字节的值,等等。165.图17图示第一前缀1501(a)的实施例。在一些实施例中,第一前缀1501(a)是rex前缀的实施例。使用该前缀的指令可以指定通用寄存器、64位紧缩数据寄存器(例如,单指令多数据(simd)寄存器或向量寄存器)、和/或控制寄存器和调试寄存器(例如,cr8-cr15和dr8-dr15)。166.取决于格式,使用第一前缀1501(a)的指令可以使用3位字段指定多达三个寄存器:1)使用modr/m字节1602的reg字段1644和r/m字段1646;2)使用modr/m字节1602与sib字节1604,包括使用reg字段1644和基址字段1656和索引字段1654;或者3)使用操作码的寄存器字段。167.在第一前缀1501(a)中,位位置7:4被设置为0100。位位置3(w)可用于确定操作数尺寸,但可能不能单独确定操作数宽度。由此,当w=0时,操作数尺寸由代码段描述符(cs.d)确定,并且当w=1时,操作数尺寸为64位。168.请注意,添加另一个位允许寻址16(24)个寄存器,而单独的modr/mreg字段1644和modr/mr/m字段1646各自只能寻址8个寄存器。169.在第一前缀1501(a)中,位位置2(r)可以是modr/mreg字段1644的扩展,并且当该字段编码通用寄存器、64位紧缩数据寄存器(例如,sse寄存器)、或控制或调试寄存器时,可用于修改modr/mreg字段1644。当modr/m字节1602指定其他寄存器或定义扩展操作码时,r被忽略。170.位位置1(x)x位可以修改sib字节索引字段1654。171.位位置b(b)b可以修改modr/mr/m字段1646或sib字节基址字段1656中的基址;或者其可以修改用于访问通用寄存器(例如,通用寄存器1425)的操作码寄存器字段。172.图18(a)-图18(d)图示如何使用第一前缀1501(a)的r、x和b字段的实施例。图18(a)图示当sib字节1604不用于存储器寻址时,来自第一前缀1501(a)的r和b用于扩展modr/m字节1602的reg字段1644和r/m字段1646。图18(b)图示当sib字节1604未被使用时(寄存器-寄存器寻址),来自第一前缀1501(a)的r和b用于扩展modr/m字节1602的reg字段1644和r/m字段1646。图18(c)图示当sib字节1604用于存储器寻址时,来自第一前缀1501(a)的r、x和b用于扩展modr/m字节1602的reg字段1644以及索引字段1654和基址字段1656。图18(d)图示当寄存器被编码在操作码1503中时,来自第一前缀1501(a)的b用于扩展modr/m字节1602的reg字段1644。173.图19(a)-图19(b)图示第二前缀1501(b)的实施例。在一些实施例中,第二前缀1501(b)是vex前缀的实施例。第二前缀1501(b)编码允许指令具有多于两个操作数,并允许simd向量寄存器(例如,向量/simd寄存器1410)长于64位(例如,128位和256位)。第二前缀1501(b)的使用提供了三操作数(或更多操作数)的语法。例如,先前的两操作数指令执行诸如a=a+b之类的操作,其覆写源操作数。第二前缀1501(b)的使用使操作数能执行非破坏性操作,诸如a=b+c。174.在一些实施例中,第二前缀1501(b)有两种形式——两字节形式和三字节形式。两字节的第二前缀1501(b)主要用于128位、标量和一些256位指令;而三字节的第二前缀1501(b)提供了对第一前缀1501(a)和3字节操作码指令的紧凑替换。175.图19(a)图示两字节形式的第二前缀1501(b)的实施例。在一个示例中,格式字段1901(字节01903)包含值c5h。在一个示例中,字节11905包括位[7]中的“r”值。该值是第一前缀1501(a)的相同值的补码。位[2]用于指示向量的长度(l)(其中值0是标量或128位向量,而值1是256位向量)。位[1:0]提供操作码的扩展性,相当于一些传统前缀(例如,00=无前缀,01=66h,10=f3h,并且11=f2h)。位[6:3]示出为vvvv,可用于:1)编码第一源寄存器操作数,以反转(1补码)的形式指定,并且对具有2个或更多个源操作数的指令有效;2)编码目的地寄存器操作数,以1补码的形式指定,用于某些向量移位;或者3)不编码任何操作数,字段被保留,并且应当包含某个值,诸如1111b。[0176]使用该前缀的指令可以使用modr/mr/m字段1646来编码引用存储器地址的指令操作数,或者编码目的地寄存器操作数或源寄存器操作数。[0177]使用该前缀的指令可以使用modr/mreg字段1644来编码目的地寄存器操作数或源寄存器操作数,被视为操作码扩展并且不用于编码任何指令操作数。[0178]对于支持四个操作数的指令语法,vvvv、modr/mr/m字段1646和modr/mreg字段1644编码四个操作数中的三个操作数。然后,立即数1509的位[7:4]用于编码第三源寄存器操作数。[0179]图19(b)图示三字节形式的第二前缀1501(b)的实施例。在一个示例中,格式字段1911(字节01913)包含值c4h。字节11915包括位[7:5]中的“r”、“x”和“b”,它们是第一前缀1501(a)的相同值的补码。字节11915的位[4:0](示出为mmmmm)包括用于根据需要编码一个或多个隐含前导操作码字节的内容。例如,00001暗示0fh前导操作码,00010暗示0f38h前导操作码,00011暗示0f3ah前导操作码,等等。[0180]字节21917的位[7]与第一前缀1501(a)的w类似地使用,包括帮助确定可提升的操作数尺寸。位[2]用于指示向量的长度(l)(其中值0是标量或128位向量,而值1是256位向量)。位[1:0]提供操作码的扩展性,相当于一些传统前缀(例如,00=无前缀,01=66h,10=f3h,并且11=f2h)。位[6:3]示出为vvvv,可用于:1)编码第一源寄存器操作数,以反转(1补码)的形式指定,并且对具有2个或更多个源操作数的指令有效;2)编码目的地寄存器操作数,以1补码的形式指定,用于某些向量移位;或者3)不编码任何操作数,字段被保留,并且应当包含某个值,诸如1111b。[0181]使用该前缀的指令可以使用modr/mr/m字段1646来编码引用存储器地址的指令操作数,或者编码目的地寄存器操作数或源寄存器操作数。[0182]使用该前缀的指令可以使用modr/mreg字段1644来编码目的地寄存器操作数或源寄存器操作数,被视为操作码扩展并且不用于编码任何指令操作数。[0183]对于支持四个操作数的指令语法,vvvv、modr/mr/m字段1646和modr/mreg字段1644编码四个操作数中的三个操作数。然后,立即数1509的位[7:4]用于编码第三源寄存器操作数。[0184]图20图示第三前缀1501(c)的实施例。在一些实施例中,第一前缀1501(a)是evex前缀的实施例。第三前缀1501(c)是四字节前缀。[0185]第三前缀1501(c)可以以64位模式编码32个向量寄存器(例如,128位、256位和512位寄存器)。在一些实施例中,利用写掩码/操作掩码(参见前面的图中对寄存器的讨论,诸如图14)或断言的指令利用该前缀。操作掩码寄存器允许条件处理或选择控制。使用第二前缀1501(b)来编码操作掩码指令,其源/目的地操作数是操作掩码寄存器,并将操作掩码寄存器的内容视为单个值。[0186]第三前缀1501(c)可以编码专用于指令类的功能(例如,具有“加载+操作”语义的紧缩指令可以支持嵌入式广播功能,具有舍入语义的浮点指令可以支持静态舍入功能,具有非舍入算术语义的浮点指令可以支持“抑制所有异常”功能,等等)。[0187]第三前缀1501(c)的第一字节是格式字段2011,在一个示例中,格式字段2011的值为62h。后续的字节被称为有效载荷字节2015-2019,并且共同形成24位值p[23:0],从而以一个或多个字段的形式提供特定能力(本文中详述)。[0188]在一些实施例中,有效载荷字节2019的p[1:0]与低两个mmmmm位相同。在一些实施例中,p[3:2]被保留。位p[4](r’)在与p[7]和modr/mreg字段1644组合时允许对高16个向量寄存器集合的访问。当不需要sib类型寻址时,p[6]也可以提供对高16个向量寄存器的访问。p[7:5]由r、x和b组成,它们是用于向量寄存器、通用寄存器、存储器寻址的操作数指定符修饰符位,并且当与modr/m寄存器字段1644和modr/mr/m字段1646组合时,允许对低8个寄存器之外的下一组8个寄存器的访问。p[9:8]提供操作码扩展性,相当于一些传统前缀(例如,00=无前缀,01=66h,10=f3h,并且11=f2h)。在一些实施例中,p[10]是固定值1。p[14:11]示出为vvvv,可用于:1)编码第一源寄存器操作数,以反转(1补码)的形式指定,并且对具有2个或更多个源操作数的指令有效;2)编码目的地寄存器操作数,以1补码的形式指定,用于某些向量移位;或者3)不编码任何操作数,字段被保留,并且应当包含某个值,诸如1111b。[0189]p[15]类似于第一前缀1501(a)和第二前缀1511(b)的w,并且可以用作操作码扩展位或操作数尺寸提升。[0190]p[18:16]指定操作掩码(写掩码)寄存器(例如,写掩码/断言寄存器1415)中的寄存器的索引。在本发明的一个实施例中,特定值aaa=000具有暗示没有操作掩码用于特定指令的特殊行为(这能以各种方式实现,包括使用硬连线为全部为一的操作掩码或者绕过掩码硬件的硬件来实现)。当合并时,向量掩码允许在执行(由基础操作和扩充操作指定的)任何操作期间保护目的地中的任何元素集免于更新;在另一实施例中,保持其中对应掩码位具有0的目的地的每一元素的旧值。相反,当归零时,向量掩码允许在执行(由基础操作和扩充操作指定的)任何操作期间使目的地中的任何元素集归零;在一个实施例中,目的地的元素在对应掩码位具有0值时被设置为0。该功能的子集是控制正在被执行的操作的向量长度的能力(即,从第一个到最后一个正在被修改的元素的跨度);然而,被修改的元素不一定要是连续的。由此,操作掩码字段允许部分向量操作,包括加载、存储、算术、逻辑等。尽管描述了其中操作掩码字段的内容选择多个操作掩码寄存器中的包含要使用的操作掩码的一个操作掩码寄存器(并且由此操作掩码字段的内容间接地标识要执行的掩码)的本发明的实施例,但是替代实施例相反或另外允许掩码写字段的内容直接地指定要执行的掩码。[0191]p[19]可以与p[14:11]组合,以非破坏性源语法编码第二源向量寄存器,其可以使用p[19]访问高16个向量寄存器。p[20]编码多种功能,其在不同类别的指令之间有所不同,并且可以影响向量长度/舍入控制指定符字段(p[22:21])的含义。p[23]指示对合并-写掩码的支持(例如,当设置为0时)或对归零和合并-写掩码的支持(例如,当设置为1时)。[0192]使用第三前缀1501(c)的指令中的对寄存器的编码的示例性实施例在下面的表中详述。表1:64位模式下的32寄存器支持[2:0]寄存器类型常见用途regmodr/mreggpr,向量目的地或源vvvvvvvvgpr,向量第二源或目的地rmmodr/mr/mgpr,向量第一源或目的地基址modr/mr/mgpr存储器寻址索引sib.索引gpr存储器寻址vidxsib.索引向量vsib存储器寻址表2:32位模式下的编码寄存器指定符[2:0]寄存器类型常见用途regmodr/mregk0-k7源vvvvvvvvk0-k7第二源rmmodr/mr/mk0-7第一源{k1]aaak01-k7操作掩码表3:操作掩码寄存器指定符编码[0193]可将程序代码应用于输入指令以执行本文描述的功能并生成输出信息。可以按已知方式将输出信息应用于一个或多个输出设备。为了本技术的目的,处理系统包括具有处理器的任何系统,该处理器诸如例如,数字信号处理器(dsp)、微控制器、专用集成电路(asic)或微处理器。[0194]程序代码可以用高级的面向过程的编程语言或面向对象的编程语言来实现,以便与处理系统通信。如果需要,也可用汇编语言或机器语言来实现程序代码。事实上,本文中描述的机制不限于任何特定的编程语言的范围。在任何情况下,该语言可以是编译语言或解释语言。[0195]本文公开的机制的各实施例可以被实现在硬件、软件、固件或此类实现方式的组合中。本发明的实施例可实现为在可编程系统上执行的计算机程序或程序代码,该可编程系统包括至少一个处理器、存储系统(包括易失性和非易失性存储器和/或存储元件)、至少一个输入设备以及至少一个输出设备。[0196]至少一个实施例的一个或多个方面可以由存储在机器可读介质上的表示性指令来实现,该指令表示处理器中的各种逻辑,该指令在被机器读取时使得该机器制造用于执行本文中所述的技术的逻辑。被称为“ip核”的此类表示可以被存储在有形的机器可读介质上,并可被供应给各个客户或生产设施以加载到实际制造该逻辑或处理器的制造机器中。[0197]此类机器可读存储介质可以包括但不限于通过机器或设备制造或形成的制品的非暂态、有形布置,其包括存储介质,诸如硬盘;任何其他类型的盘,包括软盘、光盘、紧致盘只读存储器(cd-rom)、可重写紧致盘(cd-rw)以及磁光盘;半导体器件,诸如,只读存储器(rom)、诸如动态随机存取存储器(dram)和静态随机存取存储器(sram)的随机存取存储器(ram)、可擦除可编程只读存储器(eprom)、闪存、电可擦除可编程只读存储器(eeprom);相变存储器(pcm);磁卡或光卡;或适于存储电子指令的任何其他类型的介质。[0198]因此,本发明的实施例还包括非暂态有形机器可读介质,该介质包含指令或包含设计数据,诸如硬件描述语言(hdl),它定义本文中描述的结构、电路、装置、处理器和/或系统特征。这些实施例也可被称为程序产品。仿真(包括二进制变换、代码变形等)[0199]在一些情况下,指令转换器可用于将指令从源指令集转换至目标指令集。例如,指令转换器可以将指令变换(例如,使用静态二进制变换、包括动态编译的动态二进制变换)、变形、仿真或以其他方式转换成要由核处理的一条或多条其他指令。指令转换器可以用软件、硬件、固件、或其组合来实现。指令转换器可以在处理器上、在处理器外、或者部分在处理器上且部分在处理器外。[0200]图21图示根据本发明的实施例的对照使用软件指令转换器将源指令集中的二进制指令转换成目标指令集中的二进制指令的框图。在所图示的实施例中,指令转换器是软件指令转换器,但替代地,该指令转换器可以用软件、固件、硬件或其各种组合来实现。图21示出可使用第一isa编译器2104来编译高级语言2102形式的程序,以生成可由具有至少一个第一指令集核的处理器2116原生执行的第一isa二进制代码2106。具有至少一个第一isa指令集核的处理器2116表示任何处理器,这些处理器能通过兼容地执行或以其它方式处理以下内容来执行与具有至少一个第一isa指令集核的处理器基本相同的功能:1)第一isa指令集核的指令集的实质部分,或2)目标为在具有至少一个第一isa指令集核的英特尔处理器上运行的应用或其他软件的目标代码版本,以便取得与具有至少一个第一isa指令集核的处理器基本相同的结果。第一isa编译器2104表示可用于生成第一isa二进制代码2106(例如,目标代码)的编译器,该第一isa二进制代码2106能够通过附加的链接处理或无需附加的链接处理而在具有至少一个第一isa指令集核的处理器2116上被执行。类似地,图21示出可使用替代的指令集编译器2108来编译高级语言2102形式的程序,以生成可由不具有第一isa指令集核的处理器2114原生执行的替代的指令集二进制代码2110。指令转换器2112用于将第一isa二进制代码2106转换成可以由不具有第一isa指令集核的处理器2114原生执行的代码。该转换后的代码不大可能与替代的指令集二进制代码2110相同,因为能够这样做的指令转换器难以制造;然而,转换后的代码将完成一般操作,并且由来自替代指令集的指令构成。因此,指令转换器2112通过仿真、模拟或任何其他过程来表示允许不具有第一isa指令集处理器或核的处理器或其他电子设备执行第一isa二进制代码2106的软件、固件、硬件或其组合。[0201]示例性实施例包括但不限于:1.一种装置,包括:解码器电路,用于对单条指令解码,所述单条指令用于包括用于操作码的一个或多个字段和用于标识源操作数的一个或多个字段,所述源操作数用于存储或编码目的地地址,其中,所述操作码用于指示执行电路用于:读取存储器加密引擎的密钥数据结构;对所读取的密钥数据结构的内容进行加密;至少对经加密的所读取的密钥数据结构生成消息认证码(mac);将所述mac和所述经加密的所读取的密钥数据结构存储在所述目的地地址处;以及执行电路,用于根据所述操作码执行经解码的指令。2.如示例1所述的装置,其中,用于所述源操作数的标识符的字段用于标识用于存储所述目的地地址的向量寄存器。3.如示例1所述的装置,其中,用于所述源操作数的标识符的字段用于标识用于存储所述目的地地址的存储器位置。4.如示例1所述的装置,其中,所述密钥数据结构的条目包括加密密钥标识符和用于对密钥的使用的模式。5.如示例1所述的装置,其中,所述密钥数据结构的条目进一步用于包括加密密钥。6.一种方法,包括:解码器电路,用于对单条指令解码,所述单条指令用于包括用于操作码的一个或多个字段和用于标识源操作数的一个或多个字段,所述源操作数用于存储或编码目的地地址,其中,所述操作码用于指示执行电路用于:读取存储器加密引擎的密钥数据结构;对所读取的密钥数据结构的内容进行加密;至少对经加密的所读取的密钥数据结构生成消息认证码(mac);将所述mac和所述经加密的所读取的密钥数据结构存储在所述目的地地址处;以及执行电路,用于根据所述操作码执行经解码的指令。7.如示例6所述的方法,其中,用于所述源操作数的标识符的字段用于标识用于存储所述目的地地址的向量寄存器。8.如示例6所述的方法,其中,用于所述源操作数的标识符的字段用于标识用于存储所述目的地地址的存储器位置。9.如示例6所述的方法,其中,所述密钥数据结构的条目包括加密密钥标识符和用于对密钥的使用的模式。10.如示例6所述的方法,其中,所述密钥数据结构的条目进一步用于包括加密密钥。11.如示例6所述的方法,进一步包括:在解码之前将所述单条指令变换为具有不同指令集架构的一条或多条指令,其中,对具有所述不同指令集架构的所述一条或多条指令的执行用于在功能上与根据所述单条指令的所述操作码的执行等效。12.一种装置,包括:解码器电路,用于对单条指令解码,所述单条指令用于包括用于操作码的一个或多个字段、用于标识用于存储或编码源地址的源操作数的一个或多个字段、和用于标识用于存储操作状态的目的地操作数位置的一个或多个字段,其中,所述操作码用于指示执行电路用于:从所述源地址读取经加密的密钥数据结构和相关联的消息认证码(mac);对所读取的密钥数据结构的内容进行解密;至少对经解密的所读取的密钥数据结构生成mac;确定所生成的mac何时与所读取的mac匹配,其中,当mac不匹配时,异常被生成,并且当mac匹配时,所述密钥数据结构在密码引擎中被恢复;以及生成操作状态并将所述操作状态存储在所标识的目的地操作数位置中;以及执行电路,用于根据所述操作码执行经解码的指令。13.如示例12所述的装置,其中,用于所述源操作数的标识符的字段用于标识用于存储所述源地址的向量寄存器。14.如示例12所述的装置,其中,用于所述源操作数的标识符的字段用于标识用于存储所述源地址的存储器位置。15.如示例12所述的装置,其中,所述密钥数据结构的条目包括加密密钥标识符和用于对密钥的使用的模式。16.如示例12所述的装置,其中,所述密钥数据结构的条目进一步用于包括加密密钥。17.如示例12所述的装置,其中,用于所述目的地操作数的标识符的字段用于标识向量寄存器。18.如示例12所述的装置,其中,用于所述目的地操作数的标识符的字段用于标识存储器位置。[0202]对“一个实施例”、“实施例”、“示例实施例”等的引用指示所描述的实施例可包括特定的特征、结构或特性,但是每个实施例可以不一定包括该特定的特征、结构或特性。而且,此类短语不一定是指同一实施例。此外,当结合实施例描述特定的特征、结构或特性时,认为结合无论是否被明确描述的其他实施例而影响此类特征、结构或特性是在本领域技术人员的知识范围之内的。[0203]此外,在上文描述的各实施例中,除非另外专门指出,否则,诸如短语“a、b或c中的至少一个”之类的分隔语言旨在被理解为意味着a、b、或c、或其任何组合(例如,a、b、和/或c)。由此,分隔语言不旨在也不应当被理解为暗示给定的实施例要求a中的至少一个、b中的至少一个或c中的至少一个各自都存在。[0204]因此,说明书和附图应被认为是说明性而非限制性意义的。然而,将显而易见的是,可对这些实现方式作出各种修改和改变,而不背离如权利要求中所述的本公开的更宽泛的精神和范围。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1