一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

完好性受保护的访问控制机制的制作方法

2022-07-02 11:32:45 来源:中国专利 TAG:
1.本公开涉及完好性受保护的访问控制机制。
背景技术
::2.现代计算系统采用盘加密来保护在硬盘驱动器盘或其他数据存储装置上静态存储的数据。然而,攻击者可能使用各种技术,包括总线扫描、存储器扫描等等,来从存储器取回数据。存储器本身可包括用于盘加密的密钥,因而暴露出盘驱动器上加密的数据。即使存储在存储器中的数据首先被加密,对加密数据的访问仍然允许各种类型的重放攻击。因此,采用了各种技术来保护驻留在存储器的至少一些区域中的敏感数据。这样做已成为一种挑战,尤其是在云或服务器环境中,在这样的环境中在同一服务器上可能同时支持多个客户工作负载(来自不同实体)。对不同实体的数据进行充分保护的要求也扩展到针对重放攻击的保护。技术实现要素:3.根据本公开的一个方面,提供了一种处理器,包括:处理器核心;以及与所述处理器核心相耦合的存储器控制器,所述存储器控制器包括密码引擎,所述密码引擎用于:在对数据缓存线的写入请求内检测密钥标识符(id);确定所述密钥id是多个密钥id中的信任域密钥id;响应于确定所述密钥id是所述信任域密钥id,设置所述缓存线的所有权比特(td比特)以指示所述缓存线属于信任域;确定td比特缓存线不在元数据缓存中,其中td比特缓存线包括多个td比特;从存储器取得所述td比特缓存线以及关联的mac;缓存所述所取得的td比特缓存线;尝试验证与所述td比特缓存线相关联的mac;当与所述td比特缓存线相关联的mac得到验证时,在所述元数据缓存中更新所述td比特缓存线;对所述数据缓存线进行加密以生成加密数据;将所述加密的数据缓存线写入到所述存储器。4.根据本公开的另一方面,提供了一种系统,包括:存储器设备,用于存储缓存线和关联的所有权比特;处理器核心;以及耦合在所述存储器设备和所述处理器核心之间的存储器控制器,其中所述存储器控制器包括密码引擎,所述密码引擎用于:在对数据缓存线的写入请求内检测密钥标识符(id);确定所述密钥id是多个密钥id中的信任域密钥id;响应于确定所述密钥id是所述信任域密钥id,设置所述缓存线的所有权比特(td比特)以指示所述缓存线属于信任域;确定td比特缓存线不在元数据缓存中,其中td比特缓存线包括多个td比特;从存储器取得所述td比特缓存线以及关联的mac;缓存所述所取得的td比特缓存线;尝试验证与所述td比特缓存线相关联的mac;当与所述td比特缓存线相关联的mac得到验证时,在所述元数据缓存中更新所述td比特缓存线;对所述数据缓存线进行加密以生成加密数据;将加密的数据缓存线写入到所述存储器。附图说明5.将参考附图描述根据本公开的各种实施例,附图中:6.图1a是根据本公开的实现方式使用td在虚拟化系统中提供隔离的计算系统100的示意性框图。7.图1b是处理器核心的详细视图的示意性框图,该处理器核心执行tdrm,该tdrm与mot以及一个或多个信任域控制结构(tdcs)和信任域线程控制结构(tdtcs)通信。8.图2a图示了在一个实现方式中将加密密钥id空间划分成tdx和mk-tme密钥id,具有分隔非受限密钥id与受限密钥id的单个边界。9.图2b是根据各种实现方式的包括分配给密钥id的地址比特的一部分的n比特物理存储器地址的框图。10.图3是根据一个实现方式的用于对td进行软件攻击的方法300的流程图。11.图4图示了利用td比特的系统的实施例。12.图5(a)-(b)图示了完好性受保护的td比特的元数据布局的实施例。13.图6图示了处理写入请求的方法的实施例。14.图7图示了由密码引擎处理读取请求的方法的实施例。15.图8图示了详述存储器加密能力的模型特定寄存器(msr)的实施例。16.图9图示了详述存储器激活的模型特定寄存器(msr)的实施例。17.图10图示了示范性系统的实施例。18.图11图示了处理器的实施例的框图,该处理器可具有多于一个核心,可具有集成的存储器控制器,并且可具有集成的图形。19.图12(a)是根据实施例图示出示范性有序管线和示范性寄存器重命名、无序发出/执行管线两者的框图。20.图12(b)是根据实施例图示出要被包括在处理器中的有序体系结构核心的示范性实施例以及示范性寄存器重命名、无序发出/执行体系结构核心两者的框图。21.图13图示了(一个或多个)执行单元电路的实施例。22.图14是根据一些实施例的寄存器体系结构的框图。23.图15图示了指令格式的实施例。24.图16图示了寻址字段的实施例。25.图17图示了第一前缀的实施例。26.图18(a)-(d)图示了如何使用第一前缀的r、x和比特字段的实施例。27.图19(a)-(b)图示了第二前缀的实施例。28.图20图示了第三前缀的实施例。29.图21图示了根据实施例对比使用软件指令转换器来将源指令集中的二进制指令转换成目标指令集中的二进制指令的框图。具体实施方式30.本公开涉及用于完好性保护的方法、装置、系统和非暂态计算机可读存储介质。31.本公开的一些方面涉及处理器的存储器控制器,该存储器控制器可以用存储器所有权比特(memoryownershipbit,mob)——也称为信任域比特(trustdomainbit,td比特)——来标记存储在系统存储器中的缓存线。可被包括在与缓存线相关联的元数据中的mob指示出缓存线是否属于信任域(trustdomain,td)。所有权比特可响应于确定位于写入请求的物理地址内的密钥标识符(keyidentifier,id)属于td而在缓存线写入时被设置。在执行缓存线的读取时,读取请求中的密钥id的访问类型(例如,是否是td密钥id)被对照所有权比特的值进行检查。如果存在不匹配,则存储器控制器可响应于该读取请求而返回中毒比特和与固定模式(例如,全零或全一)相匹配的无效数据。通过这种方式,攻击者无法获得对存储在缓存线中的td的加密数据的访问。在各种实现方式中,通过使用基于缓存线的所有权比特来提供的额外安全性是在利用多密钥全存储器加密(multi-keytotalmemoryencryption,mk-tme)技术工作的td基础设施的情境中提供的。mk-tme技术是tme技术的扩展,它提供对多个加密密钥的支持,允许了分区的存储器加密。例如,mk-tme技术为操作系统(或者虚拟计算环境中的超级监督者,也称为虚拟机监视器(virtualmachinemonitor,vmm))提供了使用不同的加密密钥来加密与不同客户端/应用相关联的物理存储器的页。这些客户端/应用在此一般被称为虚拟机(virtualmachine,vm),其中一个可能是超级监督者,但客户端/应用在不同的实现方式中可能是另一种类型。td基础设施是指允许一些vm(被称为td)在高度安全的环境内执行,在这种环境中,甚至操作系统(或者超级监督者)也可能无法访问属于td的物理存储器页。多密钥扩展尤其适合与多域体系结构一起工作,例如csp使用的多域体系结构,因为支持的密钥的数目可能是依赖于实现方式的。在一些实现方式中,mk-tme技术包括完好性保护,例如,经由消息认证码(messageauthenticationcode,mac)验证,因此有时被称为mk-tmei技术。32.在td扩展(tdextensions,tdx)体系结构中,可以有多个安全td,对应于不同的客户机(例如,虚拟机)、访客操作系统、主机操作系统、超级监督者(例如,vmm),等等。此外,甚至同一客户端在同一访客操作系统内运行的不同应用也可以被安全地执行。为了确保在多个td存在时安全计算的可缩放性,每个td可以使用一个或多个私钥,这些私钥对于在td之外操作的软件是不可用的。在一些实例中,在一个安全域中执行的软件可能够访问特定于该特定域的私钥和可由多个域使用的共享密钥。例如,在安全域内部运行的软件可以为其安全执行使用私钥,例如读取、写入或运行操作。另一方面,同一软件可以使用共享密钥来访问与其他域共享的结构或设备,例如打印机、键盘、鼠标、显示器、网络适配器、路由器,等等。33.虽然在mk-tme引擎中实现的密码机制被利用来向td数据提供保密性和完好性,但它们并不足以针对所有攻击进行保护。更具体而言,能够访问td密文数据的非可信软件(例如,csp软件)可以通过推测性和非推测性手段危害数据的保密性和/或完好性。这些攻击一般被称为重放攻击,例如为跟踪不成功的登录尝试的计数器提供密文数据,以重置计数器,并且使能了破解口令的无限蛮力尝试。在设置重放攻击时,攻击者可以生成以密文数据为索引的存储器地址的字典,然后使用这个字典以便以后将密文存储到特定的存储器位置。34.由其客户的要求驱动的云安全性提供商(cloudsecurityprovider,csp)对在其平台上运行的客户工作负载要求密码隔离。amd宣布了sme(securememoryencryption,安全存储器加密)和sev(secureencryptedvirtualization,安全加密虚拟化),以满足对于云提供商的这些要求。为了满足竞争和来自csp的要求,英特尔发布了其解决方案的规范,信任域扩展(trustdomainextension,tdx),用于在服务器上提供隔离,并且将csp软件(vmm)从信任边界移除。tdx利用既提供保密性也提供完好性的多密钥全存储器加密引擎(mktme)为云环境中的客户工作负载提供了密码隔离。虽然在典型的密码引擎中实现的密码机制对于向td数据提供保密性和完好性而言是必要的,但它们不是足够的。更具体而言,能够访问td密文数据的非可信软件(例如,csp软件)可能危害数据的保密性和/或完好性(既通过推测性手段来通过非推测性手段)。35.图1a图示了计算系统100的实施例,该计算系统在支持多个客户端设备102a、102b和102c的虚拟化服务器110上实现了tdx和mk-tme技术的共存。计算系统100还可包括网络接口104和共享硬件设备160a和160b。虚拟化服务器110可包括但不限于处理器112、存储器设备130、以及一个或多个td150a、150b和150c。处理器112可以执行虚拟机监视器(vmm)或超级监督者140、td资源管理器(tdresourcemanager,tdrm)142,进而又可以运行一个或多个虚拟机(vm)155。在各种实现方式中,处理器112可包括一个或多个处理器核心114、一个或多个寄存器116(例如,硬件寄存器)、缓存118、存储器所有权比特(mob)缓存118a、以及存储器控制器120,例如,存储器管理单元。36.在一个实现方式中,存储器控制器120进而包括密码引擎136(例如一个实现方式中的mk-tme引擎),该引擎具有一个或多个密钥数据结构121,在其中存储密钥加密表(keyencryptiontable,ket)122和密钥所有权表(keyownershiptable,kot)124,将参考图2对其进行更详细论述。在另一个实现方式中,密码引擎136位于存储器控制器120之外的非核心中,但又与存储器控制器120耦合,如虚线所示(作为可选的)。mob缓存118a可以是片上缓存,供密码引擎136使用,以缓存来自存储器设备130的隔绝范围的存储器所有权比特,如将参考图4所论述。在实现方式中,存储器设备130是以下各项中的任何一者:动态随机访问存储器(dynamicrandom-accessmemory,dram)、同步dram(synchronousdram,sdram)、静态存储器(例如静态随机访问存储器(staticrandomaccessmemory,sram))、闪存、数据存储设备、或者这种存储器设备的组合。为了简洁,存储器设备130也被简称为存储器130。37.在一个实现方式中,虚拟化服务器110是运行虚拟化体系结构的csp主机服务器,它同时运行mk-tme技术和tdx体系结构,以高效执行客户端/租户应用。例如,主机服务器可以在td内执行高度敏感的应用,以便超级监督者140不能访问分配给td的存储器页和加密密钥以及td的可信计算基础(trustedcomputingbase,tcb)。同时,虚拟化服务器110可以使用mk-tme技术来运行对安全性和隔离性要求较低的应用,其中超级监督者140保留对这些不太敏感的应用中使用的存储器页和加密密钥的控制。然后,超级监督者140可以使用不同的mk-tme密钥将不同的应用相互隔离,但仍然保留在每个应用的tcb中。38.每个客户端设备102a、102b、102c可以是远程桌面计算机、平板设备、智能电话、另一服务器、薄/瘦客户端,等等。每个客户端设备可以在td150a、150b和150c的一个或多个和一个或多个vm155中执行虚拟化服务器110上的应用,其中vm在各个相应td的tcb的外部运行。超级监督者140可执行虚拟机环境,其中超级监督者利用主机的硬件能力并且执行一个或多个访客操作系统,这些访客操作系统支持从分开的客户端设备102a、102b和102c运行的客户端应用。在一个实现方式中,单个td,例如td150a,可以向单个客户端102a提供安全执行环境,并且支持单个访客os。在另一实现方式中,一个td可支持多个租户,每个租户运行单独的虚拟机并且由在td内部运行的租户虚拟机监视器(租户vmm)来促进。租户vmm(未明确图示)可以与超级监督者(主机vmm)140通信,以访问存储器130和处理器112。td150a-c的执行状态可由tdrm142进一步使能。tdrm142可以是超级监督者140的扩展,或者作为由超级监督者140支持的单独资源。39.在实现方式中,tdrm142和超级监督者140充当td的主机,并且控制td对处理器112和其他系统硬件的访问。处理器112可具有一个或多个处理器核心114、硬件寄存器116、和缓存118。存储器控制器120可控制存储器操作,包括使用密码引擎136对被写入到存储器的数据进行加密和用适当的加密密钥对被从存储器读取的数据进行解密。处理器112可以有能力进入tdx模式,其中tdx指令被加载到处理器112的硬件寄存器116(例如,控制寄存器或模型特定寄存器)中,以促进存储器与不属于td的tcb的任何软件的隔离。tdrm142可以进入和退出tdx模式。tdrm142可充当主机并且对处理器和其他平台硬件具有控制权。tdrm142可以向td(例如,td150a)中的软件指派(一个或多个)逻辑处理器,但可不访问td在所指派的(一个或多个)逻辑处理器上的执行状态。类似地,tdrm142可以向td指派物理存储器和i/o资源,但不暗中参与访问/骗取td的存储器状态,这是由于分开的加密密钥,以及存储器上的其他完好性/重放控制。40.td代表一种软件环境,该软件环境可支持包括vmm、访客操作系统和由(一个或多个)访客os托管的各种应用软件的软件堆栈。每个td可以独立于其他td进行操作,并且使用tdrm所指派的(一个或多个)逻辑处理器、存储器和i/o。在td中执行的软件可以以降低的权限进行操作,从而使得tdrm可保留对平台资源的控制。另一方面,tdrm不能够访问与td相关联的数据或者以某种其他方式影响td的保密性或完好性。41.tdrm142(或者tdrm的超级监督者部分)可以执行加密密钥的管理。例如,tdrm可以将不同的密钥指派给不同的td,在存储器加密引擎上配置密钥,当密钥要被重指派到不同的td时要求执行缓存冲刷,等等。在本公开的实现方式中,td体系结构中的tdrm对于td充当主机并且对于核心和其他平台硬件具有完全控制权。tdrm142向td中的软件指派(一个或多个)逻辑处理器。然而,tdrm142可不具有对td在所指派的(一个或多个)逻辑处理器上的执行状态的访问权。类似地,tdrm142向td指派物理存储器和i/o资源,但可能不会暗中参与访问td的存储器状态,这是由于处理器对每个td所强制执行的分开的加密密钥的使用,以及存储器上的其他完好性/重放控制。在td中执行的软件以降低的权限进行操作,从而使得tdrm142可保留对平台资源的控制。然而,tdrm142可能不被允许通过获得对td的可信计算基础的访问而危害td的保密性或完好性。42.为了进一步提高td中的数据的安全性,tdx体系结构可以采用安全生成的k个加密密钥。在一个实现方式中,tdrm142可以使得处理器112(例如,使用指令tdcreate)为每个td生成临时存储器加密密钥和相应的密钥标识符(id)。加密密钥(例如,k个加密密钥)可以通过唯一密钥id被识别给在处理器上运行的软件。在一个实现方式中,td的密钥id可被附加到与该td相关联的物理存储器地址。基本输入/输出系统(basicinput/outputsystem,bios)(或其他启动固件)在启动期间可以在物理存储器地址内为特定数目的密钥id分配某个范围的比特。例如,bios可以在硬件寄存器116中存储某个范围的比特,例如在一个实现方式中的模型特定寄存器(model-specificregister,msr)。在启动之后,计算系统100可以从msr取回该范围的比特,并且采用这些比特来在物理存储器地址内编码密钥id。43.在各种实现方式中,每个密钥id可以是具有二进制表示的任何数字。例如,在一个实现方式中,可以使用某个范围的k个连续数字,从0开始,以k-1结束。在另一个实现方式中,用于加密密钥id的表示的数字的范围可以从不同的数字开始。在一些实现方式中,该范围不需要是连续的。加密密钥id的二进制编码可包括m比特,其中m可以是整数,使得m≥log2k,以确保m比特的各种组合的总数2m不小于不同加密密钥的数目k。44.存储器130的物理页可被利用加密密钥之一来加密。如前所述,指示出用于存储器加密的加密密钥的密钥id可被添加到存储器的物理页的物理存储器地址,例如,主机服务器的物理存储器,这将在下文更详细说明。在密钥id被附加到物理存储器地址的情况下,软件所请求的存储器操作可能失败,除非存储器操作请求既包括页的物理存储器地址也包括用于对存储器的物理页进行加密/解密的加密密钥的正确密钥id。存储器操作可以是涉及存储器的物理页的“读取”、“写入”或“执行”操作,这可能与存储器130中的缓存线有关。45.将受限制的密钥id与分配给td用于私有用途的物理存储器的物理存储器地址相串接可以防止对这种存储器的未经授权或不安全的访问。为了维持受限制的加密密钥与不受限制的加密密钥的硬件隔离,处理器112可能需要使得能够将密钥id划分为受限td密钥id(例如,分配给tdx)和非受限mk-tme密钥id(例如,分配给超级监督者、tdrm、os、或者td的tcb之外的其他软件),并且在tdx体系结构的执行期间在存在于处理器内部的一个或多个数据结构(例如,微体系结构表)中维持这种划分。在一些实现方式中,启动软件或固件(例如,bios)可以设置这样的划分,并且将该划分的标识存储在处理器112的硬件寄存器116之一中,该硬件寄存器在计算系统100启动之后可以被软件访问。这允许了系统在主机服务器内同时运行td体系结构和mk-tme技术,以实现在td内部运行的高度安全的虚拟机,以及受mk-tme机制保护的未经修改的vm。46.为了维持与软件(例如,超级监督者140)的隔离,在一个实现方式中,将密钥id划分为受限和非受限的划分可能是静态的。如果在启动后的执行期间,确定对密钥id的不同划分可能是最优的,则启动后的软件(例如,超级监督者140)可请求密钥id重划分。这可能是有利的,例如,如果要求高度安全执行的应用的数目已增加。在一些实现方式中,这可以通过启动后软件发起与启动固件/软件的握手机制、请求修改密钥id划分来完成。在完成握手并且确定对密钥id空间的新的期望划分后,tdrm142可以保存当前使用密钥id在处理器上运行的td的执行状态并且执行系统重启。这可以提供灵活性,以基于工作负载和计算系统的当前状态在mk-tme和tdx之间定义密钥id的划分。47.超级监督者140可以向td指派逻辑处理器、物理存储器、加密密钥id、i/o设备等等,但可以不访问td的执行状态和/或指派给td的物理存储器中存储的数据。处理器112可以利用密码引擎136来使用受限加密密钥以促进安全的数据存储和处理。例如,密码引擎136可以在执行“写入”代码时在将数据从一个或多个寄存器116或缓存118移动到存储器130之前对其进行加密。相反,当数据遵循“读取”或“执行”命令被从存储器130移动到处理器112时,密码引擎136可对数据进行解密。48.处理器112的每个处理器核心114可以支持与逻辑处理器相对应的一个或多个硬件线程。在一些实现方式中,由处理器核心114支持的逻辑处理器可以被tdrm142指派给td150a-c。除了客户端虚拟机的基于tdx的实现方式以外,虚拟化服务器110还可以在td之外为一个或多个客户端设备102a-c执行一个或多个vm155。而在td的信任计算基础之外的软件——例如tdrm142和超级监督者140——可能无法访问分配给td的物理存储器页和/或td的执行状态,在td之外操作的虚拟机针对由超级监督者140进行的访问可能不是安全的。尽管如此,在每个td的tcb之外操作的虚拟机对于源自td或其他虚拟机的软件访问仍然可以是安全的。在一些实现方式中,可以通过密码引擎136用一个或多个非受限加密密钥对在处理器112和存储器130之间移动的数据进行加密来防止这种访问。术语“非受限”意指超级监督者140可访问的密钥。另一方面,在一些实现方式中,未经授权的td和vm可能被禁止使用这种密钥进行存储器操作。49.此外,在至少一些实现方式中,非受限密钥中的一个或多个可被共享。共享密钥可被两个或更多个实体访问,例如在tdx环境之外运行的td和vm。共享密钥可被用于访问一个或多个共享结构,例如共享硬件设备160a和160b,它们可以是打印机、键盘、鼠标、监视器、网络适配器、路由器,等等。例如,为了打印图像或文本页,在td150a中操作的软件可能需要用共享密钥对数据加密,并且在将数据传输到共享硬件设备之前将加密的数据存储在存储器130中。在一个实现方式中,共享硬件设备160a可经由网络接口104连接到虚拟化服务器110。在另一实现方式中,共享硬件设备可以在虚拟化服务器110本地,如例如共享硬件设备160b所示。50.存储器控制器120控制(一个或多个)处理器核心114、寄存器116、缓存118和存储器130之间的数据交换。在一些实现方式中,ket122被用于存储加密密钥和加密密钥的密钥id,并且kot124被用于存储密钥id到td的分配。存储器控制器120也可以耦合到vm,这些vm在tdx体系结构之外运行。51.图1b是根据一个实现方式图示出实现了td体系结构与mk-tme技术的共存的计算系统的处理器的示例处理器核心的框图。在图1b所示的实现方式中,每个处理器核114可包括mob缓存118a、硬件虚拟化支持电路117、和硬件寄存器116a。每个处理器核心102可经由互连网络107在多核心处理器封装上与相应的缓存和归属代理(cacheandhomeagent,cha)109通信,并且与存在于多核心处理器封装之外的一个或多个系统代理170通信。cha109可以在缓存线粒度上缓存存储器的归属于该存储器(例如,在该存储器本地)的缓存线的拷贝。在不同的实现方式中,互连网络107是外围组件互连(peripheralcomponentinterconnect,pcitm)总线,例如快速外围组件互连(peripheralcomponentinterconnectexpress,pcietm)总线,或者另一种定制总线。系统代理170可包括盘存储装置、设备驱动器、i/o设备,等等。52.处理器核心114可执行指令来运行若干个硬件线程,也称为逻辑处理器,包括第一逻辑处理器119a、第二逻辑处理器119b,以此类推,直到第n逻辑处理器119n。在一个实现方式中,第一逻辑处理器119a是虚拟机监视器(vmm)或者超级监督者。若干个虚拟机(vm)155可被vmm执行和控制。此外,如前所述,vmm可以向在计算系统100上操作的各种安全域(例如,vmm、vm)指派与相应的加密密钥相关联的密钥id。53.还参考图1b,硬件寄存器116a可包括例如若干个通用寄存器(未图示,例如eax、ebx、ecx、edx,等等)、模型特定寄存器116b(或者msr)、以及控制寄存器116c(例如,cr1、cr2、cr3,等等)。在一个实现方式中,计算系统100是为域服务的服务器,这些域例如是不同的工作负载,比如客户端机器、操作系统、应用、或者被支持的其他类型的工作负载。54.还参考图1a,在各种实现方式中,密码引擎136被实现为微控制器、微处理器、功能块、逻辑、或者能够执行本文描述的功能的其他电路或者电路的集合。密码引擎136可缓存内部密钥数据结构121,密码引擎136可使用该内部密钥数据结构121来识别要被保护的域访问。密钥数据结构121可以是能够被索引和存储在密码引擎136的硬件内的表格或者其他数据结构。在一个实现方式中,硬件是缓存、一组寄存器、或者其他闪速存储器。55.在各种实现方式中,密钥数据结构121可被密码引擎136的硬件或者被可信软件例如利用处理器112的密码引擎编程支持电路来控制和/或编程。密钥数据结构121可适应于为域存储密钥和域信息,如将参考图2更详细论述的。加密密钥和/或密钥数据结构121的其他秘密信息对于非可信软件(例如,os或vmm)可能是不可用的。在一些实现方式中,密码引擎136可与存储器控制器120和处理器核心114一起被包含在计算系统100的片上系统(system-on-a-chip,soc)中。56.加密密钥和与加密密钥相关联的密钥id可以在计算系统100启动时由bios配置的密码引擎136利用硬件寄存器116内的me激活(me_activate)msr来使能。为了使能mk-tme,me_activatemsr中的tme使能rwl比特可以被设置,并且比特35:32可以被设置为非零值,这些非零值指定为mk-tme配置的密钥id比特的数目。这些mk_tme_keyid_bits是要分配给mk-tme的密钥id比特的数目。与枚举类似,这是编码的值。写入大于最大支持keyid比特的枚举数目的值可能导致一般保护故障(#gp)。如果eax的比特1(tme使能)没有也被设置到“1”的话,向此字段写入非零值导致一般保护故障,因为tme将被使能来使用mk-tme。me_activatemsr也可被用于锁定其他tme相关msr(例如,exclud_mask、exclude_base),使得在其被锁定之后对这些寄存器的任何写入将被忽略。当计算系统100被重置时,该锁定可被重置。57.在一些实现方式中,当计算系统100被启动时,bios可在me_activatemsr中存储特定信息以供处理器112(例如,存储器控制器120)以后使用来限制对受限加密密钥和密钥id的访问。此信息可包括用于密钥id的物理存储器地址(例如,主机物理地址)的若干个地址比特的值。由bios存储到me_activatemsr中的特定信息还可包括划分标识符(例如,划分密钥id),以将密钥id划分为非受限密钥id和受限密钥id。此外,在一个实现方式中,物理存储器地址的第二数目的受限比特可被存储在me_activatemsr中,它指定如何划分受限密钥id与非受限密钥id。58.图2a图示了在一个实现方式中将加密密钥id空间划分200成tdx和mk-tme密钥id,具有分隔非受限密钥id与受限密钥id的单个边界。在启动时,处理器112可在寄存器116的msr内存储密钥id编码的比特范围。该比特范围可支持k个密钥id来识别k个加密密钥。处理器112还可在msr内识别密钥id空间的空间划分200。在一个实现方式中,k个密钥id可被划分成kmk个非受限密钥id和ktd个受限密钥id,使得kmk ktd=k。非受限密钥id可以是在图1a中所示的虚拟化实现方式中分配给超级监督者140的mk-tme密钥id(例如,用于分配给共享设备)。受限密钥id可以被分配给td基础设施,然后被进一步分配给一个或多个td150a-c。59.在一个实现方式中,密钥id可以被映射到范围从0到k-1的整数的连续区间上。非受限密钥id可以映射到范围从0到kmk-1的较低连续数字集合上,而受限密钥id映射到范围从kmk到k-1的较高连续数字集上。在图2a所示的实现方式中,定义了受限和非受限密钥id之间的一个边界,例如,位于密钥id=kmk线以下。虽然在一些实例中,将密钥id空间划分为两个连续的范围可能是有利的,但在其他实现方式中,可以定义多个边界,使得非受限密钥id的多个区域与限制性密钥id的区域穿插。60.图2b是根据各种实现方式的包括分配给密钥id的地址比特的一部分的n比特物理存储器地址201的框图。这一部分地址比特可以包含m比特,m可以至少是log2k。图2b中的虚线图示了所支持的最大物理地址宽度。因此,使用物理存储器地址的至少一些高位地址比特来为密钥id编码可能是有利的。然而,在其他实现方式中,用于密钥id的m比特可位于物理存储器地址内的其他地方,包括超出最大物理地址宽度。61.对于其他划分实现方式,边界的数目可能甚至更多。在一个实现方式中,受限密钥可以与非受限密钥id一个接一个地穿插。作为示例,如果用于密钥id编码的m比特中只有最低比特是受限比特,就可能发生这种情况。只要这个最低比特对于受限密钥id是被设置的而对于非受限密钥id是被清除的,那么每一个偶数(和第0th个)密钥id是非受限密钥id,并且每一个奇数密钥id是受限密钥id。在这样的实现方式中,受限密钥id的数目与非受限密钥id的数目相同。62.在mk-tme体系结构中(有或没有tdx),可以用加密密钥之一对每个存储器页进行加密。处理器112可以经由存储器控制器120来强制执行加密密钥使用。存储器控制器120可包括或可耦合到密钥数据结构121,其包括图2中所示的若干个表格,来实现这种强制执行。例如,存储器控制器可包括ket122,它存储加密密钥到密钥id的映射,如图2中对于一个实现方式所示,其中总共k=128个密钥和ktdx=96个受限密钥。在一个实现方式中,加密密钥255可以是128比特密钥。ket122可以通过密钥id250来索引。可以如上所述来实现密钥id的划分(以及因此,加密密钥的划分)。当存储器操作是针对存储器的物理页的物理存储器地址时,处理器可以从用于密钥id编码的物理存储器地址的高位m比特中提取密钥id。然后,处理器可以参考ket122,以确定哪个加密密钥将被用于对存储器的物理页进行解密或加密。63.在一些实现方式中,向ket122添加了额外的一行中毒状态比特260,其中中毒状态比特260的每个状态比特指示出相应的密钥和密钥id对是否已经中毒。在如下情况中可以设置中毒状态比特:在存储器读取请求期间,虽然存储器所有权比特(mob)匹配了访问类型,但存在mac不匹配。(注意,这里对“读取请求”的任何提及应当被解释为也包括“执行请求”,因为两者都访问存储器130的缓存线)。mac不匹配可能是对于构建加密数据的字典的尝试和/或为与缓存线一起存储或者与缓存线相关联存储的mac找到匹配的蛮力尝试的指示。64.在各种实现方式中,一旦密钥以这种方式中毒,密码引擎136就响应于使用相应的中毒密钥id的存储器访问请求(例如,写入、读取、执行)向请求方代理返回完好性失败。在一个实现方式中,ket122是用于配置密码引擎136的微体系结构硬件表。将ket122划分为tdx密钥和mk-tme密钥可以由tdconfigkey指令执行。在一些实现方式中,通过执行pconfig(或者类似的处理器配置指令)来清除中毒状态比特,以重新编程密钥id来用于新的密钥,但旧的“中毒”密钥现在是无效的,并且不会再被使用。通过这种方式,攻击者在未来任何时间都不能使用中毒的密钥来访问数据。65.存储器控制器120还可包括或耦合到kot124(图2)。kot124可以存储密钥id250到各种td和在各个td的tcb之外运行的软件(例如超级监督者140)的分配265。在一个实现方式中,kot可以通过密钥id250来索引。对于每个密钥id250,kot124可以存储对该密钥id250当前被指派给的实体的引用。例如,第一非受限密钥id=0可以被分配给超级监督者140,以对在超级监督者根操作中使用的物理存储器页进行加密。若干个其他非受限密钥id250可进一步被分配给超级监督者140,或者供其使用。超级监督者可以进一步将非受限密钥id250中的一些分配给其他应用,例如在tdx体系结构之外运行的vm155。kot124也可以存储受限密钥id到各种执行的td的分配:td1、td2、td3,等等。多于一个的受限密钥id250可被分配给同一个td。受限密钥id250中的一些可不被指派给任何td,而是可以根据需要被保留来供以后使用。66.在实现方式中,kot124是用于管理tdx和mk-tme库存的微体系结构硬件表,特别是用于将密钥id250指派给td150a-c,撤销密钥id250,以及在将密钥id250重指派给不同td之前控制冲刷缓存118。kot124可以提供硬件保护,防止同一tdx密钥id到不同td的多个并发指派。67.在实现方式中,ket122和kot124被组合到相同的密钥数据结构121中,因为两者都是由密钥id索引的。另外,存储器控制器120和/或密码引擎136可以参考ket122和kot124中的一者或两者,以便确定位于存储器操作的物理地址内的密钥id是否是td密钥id。因为ket122和kot124是在处理器112的硬件中实现的,所以这些表不能被软件直接访问。这允许处理器112跟踪软件的正确操作并且保证tdx安全性目标。68.在各种实现方式中,当存储器控制器120检测到针对分配给特定td的存储器的物理页的存储器操作时,存储器控制器120可以在若干种情形中生成故障和/或中止程序,包括但不限于以下情形:1)存储器操作包括与物理存储器地址串接的非受限id,而存储器的物理页是分配给td的私有页。2)存储器操作包括与物理存储器地址串接的错误受限密钥id,对于该物理存储器地址预期不同的受限密钥id。3)存储器操作包括与物理存储器地址串接的正确受限密钥id,但存储器操作是由受限密钥id被分配到的td的tcb之外的软件程序发起的(例如,由超级监督者140或者由在不同的td内部执行的软件程序发起的存储器操作)。69.具体地,在第一种情形中,在td150a中执行的可信软件可能错误地将非受限(共享或非共享)的mk-tme请求密钥id串接到利用分配给td150a的受限tdx密钥之一来加密(或者预期加密——在写入操作的情况下)的存储器的私有物理页的物理存储器地址。在这种情况下,存储器控制器120经由密码引擎136可以检测到请求密钥id的受限比特都没有被设置,因此,请求密钥id不是受限密钥id之一。70.相应地,响应于确定请求密钥id的受限比特中的至少一个被设置(或者在一些实现方式中被清除,如上所述),存储器控制器120可以生成故障,例如,非受限密钥页故障。该故障可用于向发起存储器操作的软件程序通知在预期受限密钥的地方使用了非受限密钥。在一些实现方式中,存储器控制器120可以进一步检测到存储器操作源自于td150a的信任计算基础之外(例如,来自td150b-c之一、在td之外操作的vm155之一、超级监督者140等等的操作),并且生成静默中止页语义。在一些实现方式中,这可能意味着写入操作被静默地忽略,而读取操作返回具有固定模式的无效数据,例如,全零值或全一值的比特。71.图3是根据一个实现方式的用于对td进行软件攻击的方法300的流程图。虽然使用vmm140作为示例,但该攻击可由在csp组件或设备上执行的处理逻辑或者通过csp组件或设备远程通信的组件或设备来执行。在图3的攻击场景中,在物理地址a处有属于td的缓存线(305)。仍在控制着调度决策的vmm140暂停拥有此缓存线的td(310)。vmm140可以进一步创建代码序列以允许它推测性地访问这个缓存线(315)。用推测性访问更容易攻击,因为完好性失败不会导致机器检查异常(machinecheckexception,mce)。因此,如果以非推测方式执行攻击并且必须等待mce清除,就会花费更多的时间来进行攻击。72.在实现方式中,考虑到缓存线是完好性受保护的,vmm140对缓存线的访问导致完好性失败,因为vmm140不知道td所使用的密钥。通过在发送到核心114的缓存线中断言中毒比特来导致完好性失败。中毒比特当前被用来指示来自存储器130的不可纠正的纠错码(errorcorrectioncode,ecc)差错。在使数据中毒的同时,数据被以固定的比特模式返回,例如,可以是全零值、全一值、或者每隔一个比特是一个零值和一个一值、以及其他可能性。当中毒的数据在核心上被消耗时,它会导致mce。注意,可以有其他方式将完好性故障通知回核心,并且这里突出的攻击可以适应于由实现方式选择的特定方法。73.在实现方式中,vmm140可以确定被返回的数据是否具有固定的比特模式(320)。如果是,则vmm140知道密钥不正确,并且改变密钥(325)。利用不同的密钥,vmm140可以重复对缓存线a的访问尝试(315),这些尝试可以被执行,直到找到如下密钥为止:该密钥生成与对于地址a处的密文使用td密钥生成的mac相同的mac。注意,成功完成这一任务可能要求的尝试次数取决于mac的强度。但是,由于mac比数据小得多,所以最终会出现冲突,并且量子计算机的能力使得执行这种攻击更加可行,因为蛮力猜测可以在更短的时间内完成。此外,较小的mac会增大发现这种冲突的概率,因此增大这种攻击成功的可能性。74.为了vmm140不被通过完好性失败而检测到,对td数据的访问可以被推测性地进行,并且vmm可以留下踪迹来检测特定的尝试是否成功。在将中毒和归零的数据返回给核心的特定实现方式中,vmm140可以留下踪迹,以表明加载的数据没有固定的比特模式,这将表明该尝试是成功的。这种踪迹的一个示例可以是其中vmm140在检测到来自a的没有固定模式的数据时加载特定的存储器位置,然后在非推测性路径中,加载相同的位置并且测量访问时间以确定该位置是否在缓存中。使用这些边通道,vmm140可以确定它何时发现了针对利用td的密钥生成的该数据生成冲突的mac的密钥。vmm可以记录这个数据和用于生成冲突mac的密钥(330)。然后,vmm140可以恢复td,以允许td继续执行(335)。75.在当前的攻击场景中,在稍后的时间点,当td将新值写入到a时,vmm140使用它发现的冲突密钥和记录的数据并且写入到a(340)。这种写入可能会恢复vmm140早前记录的td域中的密文,从而成功地向td重放陈旧的数据。注意,该攻击可以针对重放可导致破坏td的安全性的位置,例如重放跟踪未成功登录到计算机、设备或应用中的计数器值的情况。这样,攻击者几乎可以无限次地尝试登录并且以蛮力确定口令。76.注意,虽然上述攻击使用完好性失败时数据中的固定比特模式作为检测完好性失败的边通道,但在其他实现方式中可以有其他边通道来检测完好性失败,使得这些攻击广泛适用于不同的实现方式。此外,参考图3论述的攻击也可以由vmm140非推测性地完成。在这种情况下,vmm可以简单地使用处理器核心上的mce来检测完好性失败,而不必依赖于中毒比特或者固定数据模式指示。在其他实现方式中,还有其他已知的攻击,其中vmm140只要知道密文数据或者密度数据的改变,就可发现明文数据。作为一个示例,vmm140可以使用频率分析构造密文值的字典,以确定td中的特定位置处的明文数据。77.因此,如果不受信任的软件被允许对需要被保护并且与不受信任的软件(例如,在示例场景中是vmm,但其他不受信任的基于csp的软件也存在风险)隔离的数据的甚至基于密文的访问,则可以进行多种攻击。78.为了抵御其中不受信任的软件单独使用密文来发动攻击的攻击(例如,保密性泄漏构建字典),在一些实现方式中,使用存储器所有权比特。存储器所有权比特在写入时被设置,这取决于是否使用了tdkeyid或非tdkeyid。在读取时,连同请求缓存线一起从存储器读取的所有权比特被对照原始请求来进行验证。79.本文详述了允许完好性受保护的访问控制来提供针对确定性软件攻击的抵御的实施例。可以利用其中数据本身仅由td比特保护的密码完好性来抵御软件攻击,例如针对td比特本身的行锤(rowhammer)攻击。因此,软件被化简到只执行非确定性攻击(例如,随机破坏),但所有的确定性攻击都被抵御。此外,针对简单硬件攻击保护了完好性受保护的访问控制比特,在这些简单硬件攻击中,对机器具有物理访问权的对手可以翻转td比特来获得软件中的密文访问权,这可以破坏保密性。80.为了解决源于对密文的访问的攻击,先前的解决方案部署了硬件访问控制。更具体而言,核心硬件实现了范围寄存器,并且阻止从不在可信计算基础(tcb)中的软件对该范围的访问。使用td比特连同数据的存储器完好性提供了期望的安全保护,但它的代价是存储和性能开销。mac是以每个缓存线为基础来关联的,并且即使每个缓存线有32bmac,在启动时也会损失总存储器的一部分。此外,mac需要在读取时被取得,并且在写入时被更新,这也会导致额外的性能开销。81.本文详细介绍了完好性受保护的访问控制的实现方式。利用该选项,访问控制比特,或者td比特,利用密码完好性来加以保护。在对存储器读取时,数据与关联的td比特一起被取得。与缓存线相关联的td比特被存储在隔绝的存储器中,并且也需要被取得。单个缓存线的td比特为512个数据缓存线取得td比特,从而高效地利用了解决方案所实现的任何元数据缓存。完好性受保护的访问控制通过体系结构msr被暴露给软件,并且由软件使用本发明中扩展的密钥编程指令来进行编程。bios负责选择这种模式并且激活它以供软件使用。82.这里详述的实施例提供了针对确定性软件攻击的保护。这些攻击是软件可以以确定性方式危害安全的攻击。作为示例,允许对密文的访问可以允许软件创建密文的字典并且破坏保密性。通过防止对密文的访问,抵御了可由软件使用行锤翻转与缓存线相关联的td比特来进行的密文泄漏攻击。对于提出的发明,由于td比特受密码保护,软件尝试使用行锤翻转(一个或多个)td比特的行为将被检测为完好性差错。密码完好性也提供了针对硬件攻击的保护,在硬件攻击中,对机器有物理访问权的攻击者可以翻转td比特来绕过由td比特提供的保护。83.图4图示了利用td比特的系统的实施例。在各种实施例中,来自处理器核心114的写入或读取请求(包括执行请求)的流程包括cha109、存储器控制器120、和/或与存储器130中的缓存线进行通信的密码引擎136。存储器设备130存储缓存线数据405,以及在隔绝存储器430中,存储td比特缓存线406和关联的mac415。在一些实施例中,td比特缓存线406包括多个td比特。注意,取决于布局(如图5(a)-(b)中所论述),mac415可以与td比特缓存线相邻。为了优化性能,内部td比特缓存118a根据元数据布局缓存td比特缓存线420。84.图5(a)-(b)图示了完好性受保护的td比特的元数据布局的实施例。图5(a)图示了第一布局,其中mac503与td比特缓存线501一起被存储在单个缓存线中。利用32比特mac,访问控制比特空间中的每个512比特缓存线将存储480个缓存线的td比特。通过这种嵌入式元数据布局,在一次访问中,取得td比特也将取得与之相关联的mac。然而,对于这种布局,密码引擎136中的地址计算是非琐碎的,并且可能要求额外的周期时延来进行计算。85.图5(b)图示了第二布局,其中每个td比特缓存线511存储512个缓存线的td比特,并且与单独的被盗空间(隔绝存储器430)中的mac513相关联。对于这种不相交的布局,mac513被存储在单独的区域中,并且td比特缓存线511和关联的mac513需要在两个不同的访问中被单独取得,这可能导致性能开销的增大。86.利用嵌入式mac布局,一旦该线被缓存,mac就可以被丢弃,因为mac与td缓存线本身相关联并且对于其他访问是不需要的。然而,对于不相交的mac布局,mac被存储在单独的区域中,因此根据mac的大小将为多个td线带来mac,使得缓存td缓存线和mac缓存线两者都是有用的,以便为未来的存储器访问尽量减少存储器访问。87.图6图示了处理写入请求的方法的实施例。在601处,由密码引擎136接收到写入请求。该写入请求包括数据、地址和密钥id。在603处,确定该密钥id是否是td密钥id。密码引擎136可以参考ket122和kot124中的一者或两者,以便确定位于存储器操作的物理地址内的密钥id是否是td密钥id。88.当密钥id不是td密钥id时,在607处,相应的td比特被设置为零。当密钥id是td密钥id时,在605处,相应的td比特被设置为1。89.在确定了td比特的情况下,在609处,确定该td比特是否在内部元数据缓存118a中。例如,在内部元数据缓存118a中是否有用于td密钥id的td比特缓存线?当内部元数据缓存118a中没有td比特缓存线时,在611处,td比特缓存线被从存储器中取得(包括关联的mac)并且被缓存。90.在613处,尝试验证与td缓存线相关联的mac。在一些实施例中,通过在接收到的td缓存线上生成mac来执行验证,并且如果生成的mac与接收到的mac不匹配,则验证失败。当mac不能正确验证时,在617处,提出安全性异常。这个异常可以有多种形式,但在一些实施例中采取的是毒化读取响应的形式,以向核心表明数据是坏的。91.如果mac检查正确,或者如果td比特缓存线已经存在于元数据缓存中,则在619处所确定的td比特值被用来更新元数据缓存中的td缓存线。该数据也可被加密并且被存储在存储器中由该请求提供的地址处。92.图7图示了由密码引擎处理读取请求的方法的实施例。在701处,由密码引擎136接收到读取请求。该读取请求包括地址和密钥id。93.在703处,确定该密钥id是否是td密钥id。94.当密钥id不是td密钥id时,在707处,将访问类型设置为不用担心使用td比特。当密钥id是td密钥id时,那么读取需要考虑td比特信息,并且在705处,相应的访问类型被设置。95.在709处,从所提供的存储器地址读取缓存线。96.在711处,确定在元数据缓存中是否存在与访问类型(例如,td比特密钥)相关联的td比特缓存线。注意,这可以与存储器读取并行进行。97.当td比特不在缓存中时,在713处,将td比特缓存线与它的mac一起从存储器中取得。在715处,尝试验证与td缓存线相关联的mac。在一些实施例中,通过在接收到的td缓存线上生成mac来执行验证,并且如果生成的mac与接收到的mac不匹配,则验证失败。当mac不能正确验证时,在719处提出安全性异常。这个异常可以有多种形式,但在一些实施例中采取的是毒化读取响应的形式,以表明数据是坏的。98.当mac验证正确时,在721处,确定访问类型是否要考虑到td比特。比如,缓存中的td比特是否具有与此前计算的相同的值?99.如果没有匹配,则在723处,返回中毒指示以及归零的数据。当存在匹配时,从存储器读取的数据线被解密并且被返回给请求者。100.注意,在上面详述的流程中,在此前详述的两种元数据布局之间没有进行区分。如果td比特缓存线不存在于具有不相交元数据布局的元数据缓存中,则将需要向存储器发送额外的请求,以取得和验证关联的mac。在从元数据缓存中逐出时,将在逐出的行上(如果被修改)计算mac并且将其存储在存储器中,这取决于实现方式所选择的元数据布局。嵌入式元数据布局将只要求一次存储器访问,而不相交元数据布局将要求两次存储器访问,以将td比特缓存线安全地存储在存储器中。101.使用一个或多个msr来使能和激活密码保护。102.图8图示了详述存储器加密能力的模型特定寄存器(msr)的实施例。在一些实施例中,该寄存器是me_capability。该图示出了msr比特字段801和它们相应的描述803。注意,字段可以被重排列,等等,因为这只是一个示范性msr布局。103.前五个字段指示出要使用什么加密和mac。比特4指示出使用完好性受保护的访问控制。104.比特63:32指示出要使用的密钥id。105.在一些实施例中,pconfig指令可以支持用于配置和管理受保护域的各种叶函数。例如,当pconfig指令被执行时,可以在硬件寄存器(例如,eax寄存器)中指定要调用的特定叶函数。在一些实施例中,还可以在硬件寄存器(例如,rbx/rcx/rdx寄存器)中指定特定叶函数所使用的参数。106.下面的表格说明了可用来实现对多个叶函数的支持的pconfig叶编码的示例。虽然只示出了一个叶函数(key_program叶),但为了扩展pconfig指令的功能,例如支持上述的指令,可以使用保留的叶编码来定义额外的叶函数。107.pconfig叶函数编码[0108][0109]pconfig指令的密钥编程叶函数(key_program)可被用来为受保护域编程密钥。在一些实施例中,可以在密钥编程结构(key_program_struct)中指定密钥编程叶函数使用的参数,并且可以在硬件寄存器(例如,rbx寄存器)中指定密钥编程结构的地址。下面的表格说明了密钥编程结构(key_program_struct)的示例实施例。[0110]密钥编程结构(key_program_struct)[0111][0112]如以上表格中所示,密钥编程结构识别正被编程的特定域的密钥id,并且它还指定密钥编程命令。在一些实施例中,例如,密钥编程叶函数可以支持多个密钥编程命令,并且可以在密钥编程结构中指定期望的命令。此外,在一些实施例中,密钥编程结构还可包括(一个或多个)保留字段,这些保留字段可用于密钥编程叶函数的后续扩展。[0113]下面的表格说明了密钥编程叶函数可以支持的密钥编程命令的示例。[0114]密钥编程命令[0115][0116][0117]在执行密钥编程叶函数之后,可以在硬件寄存器中指定返回值或状态代码,以指示出密钥编程函数是否成功。下面的表格说明了密钥编程叶函数可以返回的状态代码的示例。[0118]密钥编程叶函数返回的状态代码(key_program)[0119]状态代码编码描述prog_success0域被成功编程。invalid_prog_cmd1密钥编程命令无效。entropy_error2随机生成的密钥的熵是不充足的。invalid_keyid3域密钥id无效。invalid_enc_alg4无效加密算法被选择。device_busy5无法获得域密钥表的锁定。[0120]虽然图示的实施例使用pconfig处理器指令来执行域配置,但其他实施例可以使用替换和/或额外的方法来进行域配置。例如,在一些实施例中,可以使用硬件寄存器来执行域配置。例如,可以实现pconfig模型特定寄存器(msr)来执行域配置,允许软件通过向pconfigmsr写入而调用pconfig操作(例如,执行wrmsr指令,在寄存器(例如ecx寄存器)中传递pconfigmsr的索引)。此外,可以在硬件寄存器中传递pconfig操作(及其关联的叶函数和命令)的某些参数。例如,可以在硬件寄存器中传递密钥编程结构(key_program_struct)的地址,例如edx寄存器、eax寄存器、或者这两个寄存器(例如,对于64比特存储器地址)。然后,可以按与上述类似的方式执行pconfig操作。[0121]此外,在一些实施例中,pconfig操作可以利用包装二进制大型对象(blob)来进行域密钥编程。以这种方式,可以对域密钥进行编程,而不将密钥透露给管理软件。在一些实施例中,例如,可以实现额外的pconfig叶函数,以使得密钥能够被包装,然后在被解包装之后被编程到存储器安全性引擎`invb05。[0122]下面提供了用于实现pconfig指令的示例伪代码。[0123][0124][0125][0126][0127][0128][0129][0130]图9图示了详述存储器激活的模型特定寄存器(msr)的实施例。在一些实施例中,该寄存器是me_activate,它至少部分被用于锁定msr。该图示出了msr比特字段901和它们相应的描述903。注意,字段可以被重排列,等等,因为这只是一个示范性msr布局。[0131]比特0指示出在存储器加密被激活之后msemsr上的只读锁定。例如,通过写入到activate_msr寄存器(例如,使用写入msr或wrmsr指令),在激活存储器加密之后可以激活该锁定。可以通过将该比特字段设置为1来使能锁定,并且可以通过将该比特字段设置为0来禁用锁定。[0132]比特1当被设置时使能存储器加密(可以是全存储器加密)。比特2被用于选择默认模式的密钥。或者在启动时创建新的密钥(当为0时),或者恢复密钥(当为1时)。[0133]比特3指示出当从待机状态恢复时将密钥保存到存储装置中。[0134]比特7:4指示出要使用的加密算法。该值与图8的msr的前五个字段一致。[0135]比特35:32指示出要支持的密钥的数目。例如,如果它的值是8,则将支持多达256个密钥。[0136]比特47:36被保留。[0137]比特63:48充当每个密钥id的比特掩码,如果密钥id具有指定的有效加密算法的话。[0138]可在各种体系结构、系统、核心等等中利用上述方面的实施例。managementintegratedcircuit,pmic)或者在处理器外部的另一组件来实现。在另外的其他实施例中,pcu1017要执行的功率管理操作可被实现在bios或其他系统软件内。[0147]各种i/o设备1014可耦合到第一互连1016,以及将第一互连1016耦合到第二互连1020的互连(总线)桥1018。在一些实施例中,一个或多个额外的处理器1015,例如协处理器、高吞吐量mic处理器、gpgpu、加速器(例如,图形加速器或数字信号处理(dsp)单元)、现场可编程门阵列(fpga)、或者任何其他处理器被耦合到第一互连1016。在一些实施例中,第二互连1020可以是低引脚数(lowpincount,lpc)互连。各种设备可耦合到第二互连1020,包括例如键盘和/或鼠标1022、通信设备1027、和存储单元电路1028。存储单元电路1028可以是盘驱动器或其他大容量存储设备,在一些实施例中,它可以包括指令/代码和数据1030。另外,音频i/o1024可耦合到第二互连1020。注意,除了上述的点到点体系结构以外其他体系结构也是可能的。例如,取代点到点体系结构,诸如多处理器系统1000之类的系统可以实现多点分支互连或者其他这种体系结构。[0148]示范性核心体系结构、处理器和计算机体系结构[0149]可以按不同的方式、为了不同的目的、在不同的处理器中实现处理器核心。例如,这种核心的实现方式可包括:1)旨在用于通用计算的通用有序核心;2)旨在用于通用计算的高性能通用无序核心;3)主要旨在用于图形和/或科学(吞吐量)计算的专用核心。不同处理器的实现方式可包括:1)包括旨在用于通用计算的一个或多个通用有序核心和/或旨在用于通用计算的一个或多个通用无序核心的cpu;以及2)包括主要旨在用于图形和/或科学(吞吐量)的一个或多个专用核心的协处理器。这样的不同处理器产生不同的计算机系统体系结构,这些体系结构可包括:1)协处理器在与cpu分开的芯片上;2)协处理器在与cpu相同的封装中的分开的管芯上;3)协处理器与cpu在同一管芯上(在此情况下,这种协处理器有时被称为专用逻辑,例如集成图形和/或科学(吞吐量)逻辑,或者被称为专用核心);以及4)片上系统,其可在与所描述的cpu(有时称为(一个或多个)应用核心或者(一个或多个)应用处理器)相同的管芯上包括上述的协处理器以及额外的功能。接下来描述示范性核心体系结构,然后是对示范性处理器和计算机体系结构的描述。[0150]图11图示了处理器1100的实施例的框图,该处理器可具有多于一个的核心,可具有集成的存储器控制器,并且可具有集成的图形。实线框图示了具有单个核心1102a、系统代理1110和一组一个或多个互连控制器单元电路1116的处理器1100,而虚线框的可选添加图示了具有多个核心1102(a)-(n)、系统代理单元电路1110中的一组一个或多个集成存储器控制单元电路1114、和专用逻辑1108、以及一组一个或多个互连控制器单元电路1116的替换处理器1100。注意,处理器1100可以是图10的处理器1070或1080或者协处理器1038或1015之一。[0151]因此,处理器1100的不同实现方式可包括:1)其中专用逻辑1108是集成图形和/或科学(吞吐量)逻辑(其可包括一个或多个核心,未示出),并且核心1102(a)-(n)是一个或多个通用核心(例如,通用有序核心、通用无序核心、或者两者的组合)的cpu;2)其中核心1102(a)-(n)是大量的主要旨在用于图形和/或科学(吞吐量)的专用核心的协处理器;以及3)其中核心1102(a)-(n)是大量的通用有序核心的协处理器。因此,处理器1100可以是通用处理器、协处理器或者专用处理器,例如,网络或通信处理器、压缩引擎、图形处理器、gpgpu(通用图形处理单元电路)、高吞吐量集成众核(manyintegratedcore,mic)协处理器(包括30个或更多个核心)、嵌入式处理器,等等。处理器可被实现在一个或多个芯片上。处理器1100可以是一个或多个衬底的一部分和/或可利用若干个工艺技术中的任何一者被实现在一个或多个衬底上,这些技术例如是bicmos、cmos或nmos。[0152]存储器层次体系包括核心1102(a)-(n)内的一级或多级缓存单元电路1104(a)-(n)、一组一个或多个共享缓存单元电路1106、以及耦合到该组集成存储器控制器单元电路1114的外部存储器(未示出)。该组一个或多个共享缓存单元电路1106可包括一个或多个中间级别缓存(例如第2级(l2)、第3级(l3)、第4级(4))、或者其他级别的缓存(例如最后一级缓存(lastlevelcache,llc))、和/或这些的组合。虽然在一些实施例中基于环的互连网络电路1112互连专用逻辑1108(例如,集成图形逻辑)、该组共享缓存单元电路1106和系统代理单元电路1110,但替换实施例使用任何数目的公知技术来互连这种单元。在一些实施例中,在共享缓存单元电路1106和核心1102(a)-(n)中的一个或多个之间维持一致性。[0153]在一些实施例中,核心1102(a)-(n)中的一个或多个能够进行多线程处理。系统代理单元电路1110包括协调和操作核心1102(a)-(n)的那些组件。系统代理单元电路1110可包括例如功率控制单元(powercontrolunit,pcu)电路和/或显示单元电路(未示出)。pcu可以是或者可以包括调节核心1102(a)-(n)和/或专用逻辑1108(例如,集成图形逻辑)的功率状态所需要的逻辑和组件。显示单元电路用于驱动一个或多个在外部连接的显示器。[0154]核心1102(a)-(n)就体系结构指令集而言可以是同构的或者异构的;也就是说,核心1102(a)-(n)中的两个或更多个可能够执行同一指令集,而其他核心可能够执行仅该指令集的子集或者不同的指令集。[0155]示范性核心体系结构[0156]有序和无序核心框图[0157]图12(a)是根据本发明的实施例图示出示范性有序管线和示范性寄存器重命名、无序发出/执行管线两者的框图。图12(b)是根据本发明的实施例图示出要被包括在处理器中的有序体系结构核心的示范性实施例以及示范性寄存器重命名、无序发出/执行体系结构核心两者的框图。图12(a)-12(b)中的实线框图示了有序管线和有序核心,而虚线框的可选添加图示了寄存器重命名、无序发出/执行管线和核心。考虑到有序方面是无序方面的子集,将描述无序方面。[0158]在图12(a)中,处理器管线1200包括取得阶段1202、可选的长度解码阶段1204、解码阶段1206、可选的分配阶段1208、可选的重命名阶段1210、调度(也称为调遣或发出)阶段1212、可选的寄存器读取/存储器读取阶段1214、执行阶段1216、写回/存储器写入阶段1218、可选的异常处理阶段1222、以及可选的提交阶段1224。在这些处理器管线阶段的每一者中可执行一个或多个操作。例如,在取得阶段1202期间,从指令存储器取得一个或多个指令,在解码阶段1206期间,可以对取得的一个或多个指令进行解码,可以生成使用转发寄存器端口的地址(例如,加载存储单元(loadstoreunit,lsu)地址),并且可以执行分支转发(例如,立即数偏移或者链接寄存器(linkregister,lr))。在一个实施例中,解码阶段1206和寄存器读取/存储器读取阶段1214可以被组合到一个管线阶段中。在一个实施例中,在执行阶段1216期间,可以执行解码的指令,可以执行到高级微控制器总线(advancedmicrocontrollerbus,ahb)接口的lsu地址/数据管线化,可以执行乘法和加法运算,可以执行具有分支结果的算术运算,等等。[0159]作为示例,示范性寄存器重命名、无序发出/执行核心体系结构可实现管线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。[0160]图12(b)示出了处理器核心1290包括耦合到执行引擎单元电路1250的前端单元电路1230,并且两者都耦合到存储器单元电路1270。核心1290可以是精简指令集计算(reducedinstructionsetcomputing,risc)核心、复杂指令集计算(complexinstructionsetcomputing,cisc)核心、超长指令字(verylonginstructionword,vliw)核心、或者混合或替换核心类型。作为另外一个选项,核心1290可以是专用核心,例如,网络或通信核心、压缩引擎、协处理器核心、通用计算图形处理单元(generalpurposecomputinggraphicsprocessingunit,gpgpu)核心、图形核心,等等。[0161]前端单元电路1230可包括分支预测单元电路1232,其耦合到指令缓存单元电路1234,指令缓存单元电路1234耦合到指令转化后备缓冲器(translationlookasidebuffer,tlb)1236,指令tlb1236耦合到指令取得单元电路1238,指令取得单元电路1238耦合到解码单元电路1240。在一个实施例中,指令缓存单元电路1234被包括在存储器单元电路1270中,而不是前端单元电路1230。解码单元电路1240(或解码器)可对指令解码,并且生成一个或多个微操作、微代码入口点、微指令、其他指令或者其他控制信号作为输出,这些微操作、微代码入口点、微指令、其他指令或者其他控制信号是从原始指令解码来的,或者以其他方式反映原始指令,或者是从原始指令得出的。解码单元电路1240可还包括地址生成单元电路(agu,未示出)。在一个实施例中,agu使用转发的寄存器端口来生成lsu地址,并且可进一步执行分支转发(例如,立即数偏移分支转发,lr寄存器分支转发,等等)。可利用各种不同的机制来实现解码单元电路1240。适当机制的示例包括但不限于查找表、硬件实现、可编程逻辑阵列(programmablelogicarray,pla)、微代码只读存储器(readonlymemory,rom),等等。在一个实施例中,核心1290包括微代码rom(未示出)或其他介质,其为某些宏指令存储微代码(例如,在解码单元电路1240中或者以其他方式在前端单元电路1230内)。在一个实施例中,解码单元电路1240包括微操作(micro-op)或操作缓存(未示出),以保持/缓存在解码或处理器管线1200的其他阶段期间生成的经解码的操作、微标记或微操作。解码单元电路1240可耦合到执行引擎单元电路1250中的重命名/分配器单元电路1252。[0162]执行引擎电路1250包括重命名/分配器单元电路1252,其耦合到引退单元电路1254和一组一个或多个调度器电路1256。(一个或多个)调度器电路1256表示任何数目的不同调度器,包括预留站、中央指令窗口,等等。在一些实施例中,(一个或多个)调度器电路1256可包括算术逻辑单元(arithmeticlogicunit,alu)调度器/调度电路、alu队列、算术生成单元(arithmeticgenerationunit,agu)调度器/调度电路、agu队列,等等。(一个或多个)调度器电路1256耦合到(一个或多个)物理寄存器文件电路1258。(一个或多个)物理寄存器文件电路1258的每一者表示一个或多个物理寄存器文件,这些物理寄存器文件中的不同物理寄存器文件存储一个或多个不同的数据类型,例如标量整数、标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点、状态(例如,作为要执行的下一指令的地址的指令指针),等等。在一个实施例中,(一个或多个)物理寄存器文件单元电路1258包括向量寄存器单元电路、写入掩码寄存器单元电路、以及标量寄存器单元电路。这些寄存器单元可提供体系结构式向量寄存器、向量掩码寄存器、通用寄存器,等等。(一个或多个)物理寄存器文件单元电路1258与引退单元电路1254(也称为退役队列或引退队列)重叠以说明可用来实现寄存器重命名和无序执行的各种方式(例如,利用(一个或多个)重排序缓冲器(reorderbuffer,rob)和(一个或多个)引退寄存器文件;利用(一个或多个)未来文件、(一个或多个)历史缓冲器、以及(一个或多个)引退寄存器文件;利用寄存器图谱和寄存器的池;等等)。引退单元电路1254和(一个或多个)物理寄存器文件电路1258耦合到(一个或多个)执行集群1260。(一个或多个)执行集群1260包括一组一个或多个执行单元电路1262和一组一个或多个存储器访问电路1264。执行单元电路1262可以对各种类型的数据(例如,标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点)执行各种算术、逻辑、浮点或其他类型的运算(例如,移位、加法、减法、乘法)。虽然一些实施例可包括专用于特定功能或功能集合的若干个执行单元或执行单元电路,但其他实施例可只包括一个执行单元电路或者全部执行所有功能的多个执行单元/执行单元电路。(一个或多个)调度器电路1256、(一个或多个)物理寄存器文件单元电路1258、以及(一个或多个)执行集群1260被示为可能是多个,因为某些实施例为某些类型的数据/操作创建单独的管线(例如,标量整数管线、标量浮点/紧缩整数/紧缩浮点/向量整数/向量浮点管线、和/或存储器访问管线,它们各自具有其自己的调度器电路、(一个或多个)物理寄存器文件单元电路和/或执行集群—并且在单独的存储器访问管线的情况下,实现了其中只有此管线的执行集群具有(一个或多个)存储器访问单元电路1264的某些实施例)。还应当理解,在使用分开的管线的情况下,这些管线中的一个或多个可以是无序发出/执行,并且其余的是有序的。[0163]在一些实施例中,执行引擎单元电路1250可以执行到高级微控制器总线(ahb)接口(未示出)的加载存储单元(lsu)地址/数据管线化,以及地址阶段和写回、数据阶段加载、存储、以及分支。[0164]存储器访问电路1264的集合耦合到存储器单元电路1270,存储器单元电路1270包括数据tlb单元电路1272,数据tlb单元电路1272耦合到数据缓存电路1274,数据缓存电路1274耦合到第2级(l2)缓存电路1276。在一个示范性实施例中,存储器访问单元电路1264可包括加载单元电路、存储地址单元电路、以及存储数据单元电路,它们中的每一者耦合到存储器单元电路1270中的数据tlb电路1272。指令缓存电路1234进一步耦合到存储器单元电路1270中的第2级(l2)缓存单元电路1276。在一个实施例中,指令缓存1234和数据缓存1274在l2缓存单元电路1276、第3级(l3)缓存单元电路(未示出)和/或主存储器中被组合成单个指令和数据缓存(未示出)。l2缓存单元电路1276耦合到一个或多个其他级别的缓存并且最终耦合到主存储器。[0165]核心1290可以支持一个或多个指令集(例如,x86指令集(具有已随着较新版本添加的一些扩展);mips指令集;arm指令集(具有可选的额外扩展,例如neon)),包括本文描述的(一个或多个)指令。在一个实施例中,核心1290包括逻辑来支持紧缩数据指令集扩展(例如,avx1、avx2),从而允许被许多多媒体应用使用的操作被利用紧缩数据来执行。[0166]示范性(一个或多个)执行单元电路[0167]图13图示了(一个或多个)执行单元电路的实施例,例如图12(b)的(一个或多个)执行单元电路1262。如图所示,(一个或多个)执行单元电路1262可包括一个或多个alu电路1301、向量/simd单元电路1303、加载/存储单元电路1305、和/或分支/跳转单元电路1307。alu电路1301执行整数算术和/或布尔(boolean)运算。向量/simd单元电路1303对紧缩数据(例如,simd/向量寄存器)执行向量/simd操作。加载/存储单元电路1305执行加载和存储指令,以将数据从存储器加载到寄存器中,或者从寄存器存储到存储器。加载/存储单元电路1305也可以生成地址。分支/跳转单元电路1307依据指令引起到某个存储器地址的分支或跳转。浮点单元(floating-pointunit,fpu)电路1309执行浮点算术。(一个或多个)执行单元电路1262的宽度依据实施例而有所不同,并且可以在从16比特到1024比特的范围中。在一些实施例中,两个或更多个更小的执行单元被从逻辑上组合以形成更大的执行单元(例如,两个128比特执行单元被从逻辑上组合以形成256比特执行单元)。[0168]示范性寄存器体系结构[0169]图14是根据一些实施例的寄存器体系结构1400的框图。如图所示,存在向量/simd寄存器1410,其宽度从128比特到1024比特变化。在一些实施例中,向量/simd寄存器1410在物理上为512比特,并且取决于映射,只有一些低位比特被使用。例如,在一些实施例中,向量/simd寄存器1410是512比特的zmm寄存器:较低256比特被用于ymm寄存器,并且较低128比特被用于xmm寄存器。因此,存在寄存器的覆盖。在一些实施例中,向量长度字段在最大长度和一个或多个其他更短长度之间做出选择,其中每个这种更短长度是前一长度的一半长度。标量操作是在zmm/ymm/xmm寄存器中的最低阶数据元素位置上执行的操作;更高阶数据元素位置或者被保持与其在该指令之前相同,或者被归零,这取决于实施例。[0170]在一些实施例中,寄存器体系结构1400包括写入掩码/谓词寄存器1415。例如,在一些实施例中,有8个写入掩码/谓词寄存器(有时称为k0至k7),其中各自是16比特、32比特、64比特或128比特大小的。写入掩码/谓词寄存器1415可以允许合并(例如,允许目的地中的任何元素集合在任何操作的执行期间免受更新)和/或归零(例如,归零向量掩码允许目的地中的任何元素集合在任何操作的执行期间被归零)。在一些实施例中,给定的写入掩码/谓词寄存器1415中的每个数据元素位置对应于目的地的一个数据元素位置。在其他实施例中,写入掩码/谓词寄存器1415是可缩放的,并且由给定向量元素的设定数目的使能比特组成(例如,每个64比特向量元素有8个使能比特)。[0171]寄存器体系结构1400包括多个通用寄存器1425。这些寄存器可以是16比特、32比特、64比特等等,并且可被用于标量操作。在一些实施例中,这些寄存器通过名称rax、rbx、rcx、rdx、rbp、rsi、rdi、rsp以及r8至r15来引用。[0172]在一些实施例中,寄存器体系结构1400包括标量浮点寄存器1445,它被用于使用x87指令集扩展的32/64/80比特浮点数据上的标量浮点操作,或者作为mmx寄存器来对64比特紧缩整数数据执行操作,以及为mmx和xmm寄存器之间执行的一些操作保存操作对象。[0173]一个或多个标志寄存器1440(例如,eflags,rflags,等等)存储状态和控制信息以用于算术、比较和系统操作。例如,一个或多个标志寄存器1440可以存储条件代码信息,例如进位、奇偶性、辅助进位、零、符号、以及溢出。在一些实施例中,一个或多个标志寄存器1440被称为程序状态和控制寄存器。[0174]片段寄存器1420包含用于访问存储器的片段点。在一些实施例中,这些寄存器通过名称cs、ds、ss、es、fs和gs来引用。[0175]机器特定寄存器(machine-specificregister,msr)1435控制和报告处理器性能。大多数msr1435处理与系统有关的功能,并且是应用程序不可访问的。机器检查寄存器1460由用于检测和报告硬件差错的控制、状态和差错报告msr组成。[0176]一个或多个指令指针寄存器1430存储指令指针值。(一个或多个)控制寄存器1455(例如,cr0-cr4)确定处理器(例如,处理器1070、1080、1038、1015和/或1100)的操作模式和当前执行任务的特性。调试寄存器1450控制并允许监视处理器或核心的调试操作。[0177]存储器管理寄存器1465指定用于受保护模式存储器管理中的数据结构的位置。这些寄存器可包括gdtr、idrt、任务寄存器、以及ldtr寄存器。[0178]本发明的替代实施例可使用更宽或更窄的寄存器。此外,本发明的替代实施例可使用更多、更少或不同的寄存器文件和寄存器。[0179]指令集[0180]指令集体系结构(isa)可包括一个或多个指令格式。给定的指令格式可定义各种字段(例如,比特的数目、比特的位置)来指定要执行的操作(例如,操作码)和要在其上执行该操作的(一个或多个)操作对象和/或其他(一个或多个)数据字段(例如,掩码),等等。一些指令格式通过指令模板(或子格式)的定义被进一步分解。例如,给定的指令格式的指令模板可被定义为具有该指令格式的字段的不同子集(包括的字段通常是按相同顺序的,但至少一些具有不同的比特位置,因为包括的字段更少)和/或被定义为具有以不同方式被解读的给定字段。因此,isa的每个指令是利用给定的指令格式来表达的(并且如果被定义的话,以该指令格式的指令模板中的给定一个指令模板来表达),并且包括用于指定操作和操作对象的字段。例如,示范性add指令具有特定的操作码和指令格式,该指令格式包括操作码字段来指定该操作码并且包括操作对象字段来选择操作对象(源1/目的地和源2);并且此add指令在指令流中的出现将在选择特定操作对象的操作对象字段中具有特定内容。[0181]示范性指令格式[0182]可以以不同的格式来实现本文描述的(一个或多个)指令的实施例。此外,下文详述了示范性系统、体系结构和管线。(一个或多个)指令的实施例可在这种系统、体系结构和管线上被执行,但不限于详述的那些。[0183]图15图示了指令格式的实施例。如图所示,指令可包括多个组件,包括但不限于一个或多个字段,用于:一个或多个前缀1501、操作码1503、寻址信息1505(例如,寄存器标识符、存储器寻址信息,等等)、位移值1507、和/或立即数1509。注意,一些指令利用了该格式的一些或所有字段,而其他指令可能只使用操作码1503的字段。在一些实施例中,图示的顺序是这些字段要被编码的顺序,然而,应理解,在其他实施例中,这些字段可被以不同的顺序来编码、被组合,等等。[0184](一个或多个)前缀字段1501当被使用时修改指令。在一些实施例中,一个或多个前缀被用于重复字符串指令(例如,0xf0、0xf2、0xf3,等等),以提供片段覆盖(例如,0x2e、0x36、0x3e、0x26、0x64、0x65、0x2e、0x3e,等等),以执行总线锁定操作,和/或改变操作对象(例如,0x66)和地址大小(例如,0x67)。某些指令要求强制性的前缀(例如,0x66、0xf2、0xf3,等等)。这些前缀中的某些可能被认为是“传统”前缀。其他前缀——其一个或多个示例在此详述——指示出和/或提供了进一步的能力,例如指定特定的寄存器,等等。其他前缀通常在“传统”前缀之后。[0185]操作码字段1503被用于至少部分地定义在指令解码时要执行的操作。在一些实施例中,在操作码字段1503中编码的主操作码的长度为1、2或3个字节。在其他实施例中,主操作码可以是不同的长度。额外的3比特操作码字段有时被编码在另一个字段中。[0186]寻址字段1505被用于寻址指令的一个或多个操作对象,例如存储器中的位置或者一个或多个寄存器。图16图示了寻址字段1505的实施例。在该图示中,示出了可选的modr/m字节1602和可选的缩放比例、索引、基址(scale,index,base,sib)字节1604。modr/m字节1602和sib字节1604被用于编码指令的多达两个操作对象,每个操作对象是直接寄存器或有效存储器地址。注意,这些字段中的每一者是可选的,即不是所有的指令都包括这些字段中的一个或多个。modr/m字节1602包括mod字段1642、寄存器字段1644、和r/m字段1646。[0187]mod字段1642的内容区分存储器访问和非存储器访问模式。在一些实施例中,当mod字段1642的值为b11时,利用寄存器直接寻址模式,否则使用寄存器间接寻址。[0188]寄存器字段1644可编码目的地寄存器操作对象或者源寄存器操作对象,或者可编码操作码扩展,并且可不被用于编码任何指令操作对象。寄存器索引字段1644的内容直接指定或者通过地址生成指定源或目的地操作对象的位置(在寄存器中或者在存储器中)。在一些实施例中,寄存器字段1644被补充以来自前缀(例如,前缀1501)的额外比特,以允许更大的寻址。[0189]r/m字段1646可被用于编码引用存储器地址的指令操作对象,或者可被用于编码目的地寄存器操作对象或源寄存器操作对象。注意r/m字段1646在一些实施例中可以与mod字段1642相组合以规定寻址模式。[0190]sib字节1604包括缩放比例字段1652、索引字段1654、以及基址字段1656,以用于地址的生成。缩放比例字段1652指示缩放因子。索引字段1654指定要使用的索引寄存器。在一些实施例中,索引字段1654被补充有来自前缀(例如,前缀1501)的额外比特,以允许更大的寻址。基址字段1656指定了要使用的基址寄存器。在一些实施例中,基址字段1656被补充有来自前缀(例如,前缀1501)的额外比特,以允许更大的寻址。在实践中,缩放比例字段1652的内容允许了缩放索引字段1654的内容以进行存储器地址生成(例如,对于使用2缩放比例*索引 基址的地址生成)。[0191]一些寻址形式利用位移值来生成存储器地址。例如,可以根据2缩放比例*索引 基址 位移、索引*缩放比例 位移、r/m 位移、指令指针(rip/eip) 位移、寄存器 位移等等来生成存储器地址。该位移可以是1字节、2字节、4字节等等的值。在一些实施例中,位移字段1507提供这个值。此外,在一些实施例中,在寻址字段1505的mod字段中编码了位移因子使用,其指示出压缩位移方案,对于该方案,位移值是通过将disp8与缩放因子n结合相乘来计算的,该缩放因子n是基于向量长度、b比特的值和指令的输入元素大小而确定的。该位移值被存储在位移字段1507中。[0192]在一些实施例中,立即数字段1509为指令指定立即数。立即数可以被编码为1字节值、2字节值、4字节值,等等。[0193]图17图示了第一前缀1501(a)的实施例。在一些实施例中,第一前缀1501(a)是rex前缀的实施例。使用这个前缀的指令可以指定通用寄存器、64比特紧缩数据寄存器(例如,单指令、多数据(singleinstruction,multipledata,simd)寄存器或向量寄存器)、和/或控制寄存器和调试寄存器(例如,cr8-cr15和dr8-dr15)。[0194]使用第一前缀1501(a)的指令可以使用3比特字段指定最多达三个寄存器,这取决于格式:1)使用modr/m字节1602的reg字段1644和r/m字段1646;2)使用modr/m字节1602与sib字节1604,包括使用reg字段1644和基址字段1656和索引字段1654;或者3)使用操作码的寄存器字段。[0195]在第一前缀1501(a)中,比特位置7:4被设置为0100。比特位置3(w)可被用于确定操作对象大小,但可能不单独确定操作对象宽度。因此,当w=0时,操作对象大小由代码段描述符(codesegmentdescriptor,cs.d)决定,而当w=1时,操作对象大小为64比特。[0196]注意,添加另一个比特允许寻址16(24)个寄存器,而单独的modr/mreg字段1644和modr/mr/m字段1646各自只能寻址8个寄存器。[0197]在第一前缀1501(a)中,比特位置2(r)可以是modr/mreg字段1644的扩展,并且当该字段编码通用寄存器、64比特紧缩数据寄存器(例如,sse寄存器)或者控制或调试寄存器时,可被用来修改modr/mreg字段1644。当modr/m字节1602指定其他寄存器或定义扩展操作码时,r被忽略。[0198]比特位置1(x)x比特可以修改sib字节索引字段1654。[0199]比特位置b(b)b可以修改modr/mr/m字段1646中的基址或sib字节基址字段1656;或者它可以修改用于访问通用寄存器(例如,通用寄存器1425)的操作码寄存器字段。[0200]图18(a)-(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。[0201]图19(a)-(b)图示了第二前缀1501(b)的实施例。在一些实施例中,第二前缀1501(b)是vex前缀的实施例。第二前缀1501(b)编码允许指令具有多于两个操作对象,并且允许simd向量寄存器(例如,向量/simd寄存器1410)长于64比特(例如,128比特和256比特)。第二前缀1501(b)的使用提供了三操作对象(或更多)的语法。例如,先前的两操作对象指令执行比如a=a b之类的操作,这覆写了源操作对象。对第二前缀1501(b)的使用使得操作对象能够执行非破坏性操作,例如a=b c。[0202]在一些实施例中,第二前缀1501(b)有两种形式——两字节形式和三字节形式。两字节的第二前缀1501(b)被主要用于128比特、标量和一些256比特指令;而三字节的第二前缀1501(b)提供了对第一前缀1501(a)的紧凑替换和3字节操作码指令。[0203]图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)。被示为vvvv的比特[6:3]可被用于:1)编码以反转(反码)形式指定的第一源寄存器操作对象,并且对于具有2个或更多个源操作对象的指令是有效的;2)编码对于某些向量移位以反码形式指定的目的地寄存器操作对象;或者3)不编码任何操作对象,该字段被保留并且应当包含某个值,例如1111b。[0204]使用这个前缀的指令可以使用modr/mr/m字段1646来编码引用存储器地址的指令操作对象,或者编码目的地寄存器操作对象或源寄存器操作对象。[0205]使用这个前缀的指令可以使用modr/mreg字段1644来编码目的地寄存器操作对象或者源寄存器操作对象,被作为操作码扩展来对待,而不被用于编码任何指令操作对象。[0206]对于支持四个操作对象的指令语法,vvvv,modr/mr/m字段1646和modr/mreg字段1644编码了四个操作对象中的三个。然后立即数1509的比特[7:4]被用来编码第三源寄存器操作对象。[0207]图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操作码,等等。[0208]字节21917的比特[7]与第一前缀1501(a)的w被类似地使用,包括帮助确定可提升的操作对象大小。比特[2]被用来规定向量的长度(l)(其中0的值是标量或者128比特向量,而1的值是256比特向量)。比特[1:0]提供等同于一些传统前缀的操作码外延性(例如,00=无前缀,01=66h,10=f3h,并且11=f2h)。被示为vvvv的比特[6:3]可被用于:1)编码以反转(反码)形式指定的第一源寄存器操作对象,并且对于具有2个或更多个源操作对象的指令是有效的;2)编码对于某些向量移位以反码形式指定的目的地寄存器操作对象;或者3)不编码任何操作对象,该字段被保留并且应当包含某个值,例如1111b。[0209]使用这个前缀的指令可以使用modr/mr/m字段1646来编码引用存储器地址的指令操作对象,或者编码目的地寄存器操作对象或源寄存器操作对象。[0210]使用这个前缀的指令可以使用modr/mreg字段1644来编码目的地寄存器操作对象或者源寄存器操作对象,被作为操作码扩展来对待,而不被用于编码任何指令操作对象。[0211]对于支持四个操作对象的指令语法,vvvv,modr/mr/m字段1646和modr/mreg字段1644编码了四个操作对象中的三个。然后立即数1509的比特[7:4]被用来编码第三源寄存器操作对象。[0212]图20图示了第三前缀1501(c)的实施例。在一些实施例中,第一前缀1501(a)是evex前缀的实施例。第三前缀1501(c)是四字节前缀。[0213]第三前缀1501(c)可以在64比特模式中编码32个向量寄存器(例如,128比特、256比特和512比特寄存器)。在一些实施例中,利用写入掩码/操作掩码(见先前图中对于寄存器的论述,例如图14)或预测的指令利用这个前缀。操作掩码寄存器允许了条件处理或选择控制。操作掩码指令——其源/目的地操作对象是操作掩码寄存器并且将操作掩码寄存器的内容视为单个值——是使用第二前缀1501(b)来编码的。[0214]第三前缀1501(c)可以编码指令类所特定的功能(例如,具有“加载 操作”语义的紧缩指令可以支持嵌入式广播功能,具有舍入语义的浮点指令可以支持静态舍入功能,具有非舍入算术语义的浮点指令可以支持“抑制所有异常”功能,等等)。[0215]第三前缀1501(c)的第一字节是格式字段2011,它在一个示例中具有62h的值。随后的字节被称为有效载荷字节2015-2019,并且共同形成p[23:0]的24比特值,以一个或多个字段的形式提供特定的能力(在此详述)。[0216]在一些实施例中,有效载荷字节2019的p[1:0]与低位的两个mmmm比特相同。在一些实施例中,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。被示为vvvv的p[14:11]可被用于:1)编码以反转(反码)形式指定的第一源寄存器操作对象,并且对于具有2个或更多个源操作对象的指令是有效的;2)编码对于某些向量移位以反码形式指定的目的地寄存器操作对象;或者3)不编码任何操作对象,该字段被保留并且应当包含某个值,例如1111b。[0217]p[15]类似于第一前缀1501(a)和第二前缀1511(b)的w,并且可以作为操作码扩展比特或操作对象大小提升。[0218]p[18:16]指定操作掩码(写入掩码)寄存器(例如,写入掩码/谓词寄存器1415)中的寄存器的索引。在本发明的一个实施例中,特定值aaa=000具有特殊行为,暗示着没有操作掩码被用于特定指令(这可按多种方式来实现,包括使用硬连线到全一的操作掩码或者绕过掩蔽硬件的硬件)。当合并时,向量掩码允许了目的地中的任何元素集合被保护免于在(由基本操作和增强操作指定的)任何操作的执行期间的更新;在其他的一个实施例中,保留目的地的相应的掩码比特具有0的每个元素的旧值。与之不同,归零向量掩码允许了目的地中的任何元素集合在(由基本操作和增强操作指定的)任何操作的执行期间被归零;在一个实施例中,目的地的元素在相应的掩码比特具有0值时被设置到0。这个功能的子集是控制被执行的操作的向量长度(即,被修改的元素的跨度,从第一个到最后一个)的能力;然而,被修改的元素不是必须要连续。从而,操作掩码字段允许了部分向量操作,包括加载、存储、算术、逻辑,等等。虽然描述了其中操作掩码字段的内容选择若干个操作掩码寄存器中包含要使用的操作掩码的那一个(从而操作掩码字段的内容间接识别要执行的该掩蔽)的本发明实施例,但替换实施例作为替代或附加允许掩码写入字段的内容直接指定要执行的掩蔽。[0219]p[19]可以与p[14:11]相组合,来以非破坏性源语法编码第二源向量寄存器,该语法可以使用p[19]来访问高16个向量寄存器。p[20]编码多种功能,这些功能在不同类别的指令中有所不同,并且可影响向量长度/舍入控制指定符字段(p[22:21])的含义。p[23]指示出对合并-写入掩蔽的支持(例如,当被设置为0时)或者对归零和合并-写入掩蔽的支持(例如,当被设置为1时)。[0220]在下面的表格中详述了在使用第三前缀1501(c)的指令中对寄存器的编码的示范性实施例。[0221][0222][0223]表格1:64比特模式中的32寄存器支持[0224][0225]表格2:32比特模式中的编码寄存器指定符[0226][0227]表格3:操作掩码寄存器指定符编码[0228]程序代码可被应用到输入指令以执行本文描述的功能并且生成输出信息。输出信息可按已知的方式被应用到一个或多个输出设备。对于本技术而言,处理系统包括任何具有处理器的系统,例如数字信号处理器(digitalsignalprocessor,dsp)、微控制器、专用集成电路(applicationspecificintegratedcircuit,asic)、或者微处理器。[0229]可以用高级别过程式或面向对象的编程语言来实现程序代码以与处理系统进行通信。如果希望,也可以用汇编或机器语言来实现程序代码。实际上,本文描述的机制在范围上不限于任何特定的编程语言。在任何情况下,该语言可以是经编译或者经解译的语言。[0230]可以用硬件、软件、固件或者这种实现方案的组合来实现本文公开的机制的实施例。本发明的实施例可被实现为在包括至少一个处理器、存储系统(包括易失性和非易失性存储器和/或存储元件)、至少一个输入设备、以及至少一个输出设备的可编程系统上执行的计算机程序或程序代码。[0231]至少一个实施例的一个或多个方面可由被存储在机器可读介质上的表示处理器内的各种逻辑的代表性指令来实现,这些代表性指令当被机器读取时使得该机器制作逻辑来执行本文描述的技术。这种被称为“ip核心”的表现形式可被存储在有形机器可读介质上并且被提供到各种客户或制造设施以加载到实际制作该逻辑或处理器的制作机器中。[0232]这种机器可读存储介质可包括但不限于由机器或设备制造或形成的物品的非暂态有形布置,包括诸如以下项之类的存储介质:硬盘,任何其他类型的盘(包括软盘、光盘、致密盘只读存储器(compactdiskread-onlymemory,cd-rom)、可改写致密盘(compactdiskrewritable,cd-rw)、以及磁光盘),半导体设备(诸如,只读存储器(read-onlymemory,rom),诸如动态随机访问存储器(dynamicrandomaccessmemory,dram)、静态随机访问存储器(staticrandomaccessmemory,sram)之类的随机访问存储器(randomaccessmemory,ram),可擦除可编程只读存储器(erasableprogrammableread-onlymemory,eprom),闪速存储器,电可擦除可编程只读存储器(electricallyerasableprogrammableread-onlymemory,eeprom),相变存储器(phasechangememory,pcm)),磁卡或光卡,或者适合用于存储电子指令的任何其他类型的介质。[0233]因此,本发明的实施例还包括非暂态有形机器可读介质,其包含指令或者包含定义本文描述的结构、电路、装置、处理器和/或系统特征的设计数据,例如硬件描述语言(hardwaredescriptionlanguage,hdl)。这种实施例也可被称为程序产品。[0234]仿真(包括二进制转化、代码变形等等)[0235]在一些情况下,指令转换器可被用于将指令从源指令集转换到目标指令集。例如,指令转换器可将指令转化(例如,利用静态二进制转化、包括动态编译的动态二进制转化)、变形、仿真或者以其他方式转换到要被核心处理的一个或多个其他指令。可以用软件、硬件、固件或者其组合来实现指令转换器。指令转换器可以在处理器上、在处理器外、或者一部分在处理器上一部分在处理器外。[0236]图21是根据本发明的实施例对比使用软件指令转换器来将源指令集中的二进制指令转换成目标指令集中的二进制指令的框图。在图示的实施例中,指令转换器是软件指令转换器,虽然可替换地,可以用软件、固件、硬件或者其各种组合来实现指令转换器。图21示出了高级别语言2102的程序可被利用第一isa编译器2104来编译以生成第一isa二进制代码2106,第一isa二进制代码2106可由具有至少一个第一指令集核心的处理器2116原生执行。具有至少一个第一isa指令集核心的处理器2116表示任何这样的处理器:这种处理器可通过兼容地执行或以其他方式处理(1)第一isa指令集核心的指令集的实质部分或者(2)目标为在具有至少一个第一isa指令集核心的英特尔处理器上运行的应用或其他软件的目标代码版本,来执行与具有至少一个第一isa指令集核心的处理器基本上相同的功能,以便实现与具有至少一个第一isa指令集核心的处理器基本上相同的结果。第一isa编译器2104表示可操作来生成第一isa二进制代码2106(例如,目标代码)的编译器,第一isa二进制代码2106在带有或不带有额外的链接处理的情况下可在具有至少一个第一isa指令集核心的处理器2116上被执行。类似地,图21示出了高级别语言2102的程序可被利用替换指令集编译器2108来编译以生成替换指令集二进制代码2110,替换指令集二进制代码2110可由没有第一isa指令集核心的处理器2114原生执行。指令转换器2112用于将第一isa二进制代码2106转换成可由没有第一isa指令集核心的处理器2114原生执行的代码。这个转换后的代码不太可能与替换指令集二进制代码2110相同,因为能够做到这一点的指令转换器是难以制作的;然而,转换后的代码将实现一般操作并且由来自替换指令集的指令构成。从而,指令转换器2112表示通过仿真、模拟或任何其他过程允许不具有第一isa指令集处理器或核心的处理器或其他电子设备执行第一isa二进制代码2106的软件、固件、硬件或者其组合。[0237]示范性实施例包括但不限于:[0238]1.一种处理器,包括:[0239]处理器核心;以及[0240]与所述处理器核心相耦合的存储器控制器,所述存储器控制器包括密码引擎,所述密码引擎用于:[0241]在对数据缓存线的写入请求内检测密钥标识符(id);[0242]确定所述密钥id是多个密钥id中的信任域密钥id;[0243]响应于确定所述密钥id是所述信任域密钥id,设置所述缓存线的所有权比特(td比特)以指示所述缓存线属于信任域;[0244]确定td比特缓存线不在元数据缓存中,其中td比特缓存线包括多个td比特;[0245]从存储器取得所述td比特缓存线以及关联的mac;[0246]缓存所述所取得的td比特缓存线;[0247]尝试验证与所述td比特缓存线相关联的mac;[0248]当与所述td比特缓存线相关联的mac得到验证时,在所述元数据缓存中更新所述td比特缓存线;[0249]对所述数据缓存线进行加密以生成加密数据;[0250]将所述加密的数据缓存线写入到所述存储器。[0251]2.如权利要求1所述的处理器,其中取得的mac被存储在隔绝存储器中。[0252]3.如权利要求1所述的处理器,其中为了验证所述mac,所述密码引擎还用于:通过在至少所述加密数据、加密物理地址和所述所有权比特的组合上应用带密钥散列算法来生成mac,并且将生成的mac与取得的mac相比较。[0253]4.如权利要求1所述的处理器,其中取得的mac被与所述td比特缓存线相邻地存储。[0254]5.如权利要求1所述的处理器,其中与所述td比特缓存线相关联的mac未被验证,将生成安全性异常。[0255]6.如权利要求1所述的处理器,其中,响应于对所述缓存线的读取请求,所述存储器控制器还用于:[0256]从存储器读取数据缓存线;[0257]在对数据缓存线的读取请求内检测密钥标识符(id);[0258]确定并且设置访问类型;[0259]响应于确定所述密钥id是所述信任域密钥id,设置所述缓存线的所有权比特(td比特)以指示所述缓存线属于信任域;[0260]确定td比特缓存线不在元数据缓存中,其中td比特缓存线包括多个td比特;[0261]从存储器取得所述td比特缓存线以及关联的mac;[0262]缓存所取得的td比特缓存线;[0263]尝试验证与所述td比特缓存线相关联的mac;[0264]当与所述td比特缓存线相关联的mac得到验证时,在所述元数据缓存中更新所述td比特缓存线;[0265]对所述数据缓存线进行解密以生成解密数据;[0266]将解密的数据缓存线返回到所述存储器。[0267]7.如权利要求6所述的处理器,其中所述存储器控制器还用于:[0268]确定经验证的td比特具有与所确定和设置的访问类型相同的访问类型,其中当所述td比特和访问类型不匹配时,中毒和归零的数据被返回。[0269]8.如权利要求7所述的处理器,其中所述密码引擎还用于:在所述密码引擎的密钥数据结构中设置中毒状态比特,所述中毒状态比特与所述密钥id相关联。[0270]9.如权利要求6所述的处理器,其中所述密码引擎还包括密钥数据结构,该密钥数据结构具有包括密钥id和密钥的条目。[0271]10.一种系统,包括:[0272]存储器设备,用于存储缓存线和关联的所有权比特;[0273]处理器核心;以及[0274]耦合在所述存储器设备和所述处理器核心之间的存储器控制器,其中所述存储器控制器包括密码引擎,所述密码引擎用于:[0275]在对数据缓存线的写入请求内检测密钥标识符(id);[0276]确定所述密钥id是多个密钥id中的信任域密钥id;[0277]响应于确定所述密钥id是所述信任域密钥id,设置所述缓存线的所有权比特(td比特)以指示所述缓存线属于信任域;[0278]确定td比特缓存线不在元数据缓存中,其中td比特缓存线包括多个td比特;[0279]从存储器取得所述td比特缓存线以及关联的mac;[0280]缓存所述所取得的td比特缓存线;[0281]尝试验证与所述td比特缓存线相关联的mac;[0282]当与所述td比特缓存线相关联的mac得到验证时,在所述元数据缓存中更新所述td比特缓存线;[0283]对所述数据缓存线进行加密以生成加密数据;[0284]将加密的数据缓存线写入到所述存储器。[0285]11.如权利要求10所述的系统,其中取得的mac被存储在隔绝存储器中。[0286]12.如权利要求10所述的系统,其中为了验证所述mac,所述密码引擎还用于:通过在至少所述加密数据、加密物理地址和所述所有权比特的组合上应用带密钥散列算法来生成mac,并且将生成的mac与所述取得的mac相比较。[0287]13.如权利要求10所述的系统,其中取得的mac被与所述td比特缓存线相邻地存储。[0288]14.如权利要求10所述的系统,其中与所述td比特缓存线相关联的mac未被验证,将生成安全性异常。[0289]15.如权利要求10所述的系统,其中,响应于对所述缓存线的读取请求,所述存储器控制器还用于:[0290]从存储器读取数据缓存线;[0291]在对数据缓存线的读取请求内检测密钥标识符(id);[0292]确定并且设置访问类型;[0293]响应于确定所述密钥id是所述信任域密钥id,设置所述缓存线的所有权比特(td比特)以指示所述缓存线属于信任域;[0294]确定td比特缓存线不在元数据缓存中,其中td比特缓存线包括多个td比特;[0295]从存储器取得所述td比特缓存线以及关联的mac;[0296]缓存所取得的td比特缓存线;[0297]尝试验证与所述td比特缓存线相关联的mac;[0298]当与所述td比特缓存线相关联的mac得到验证时,在所述元数据缓存中更新所述td比特缓存线;[0299]对所述数据缓存线进行解密以生成解密数据;[0300]将解密的数据缓存线返回到所述存储器。[0301]16.如权利要求15所述的系统,其中所述存储器控制器还用于:[0302]确定经验证的td比特具有与所确定和设置的访问类型相同的访问类型,其中当所述td比特和访问类型不匹配时,中毒和归零的数据被返回。[0303]17.如权利要求16所述的系统,其中所述密码引擎还用于:在所述密码引擎的密钥数据结构中设置中毒状态比特,所述中毒状态比特与所述密钥id相关联。[0304]18.如权利要求10所述的系统,其中所述密码引擎还包括密钥数据结构,该密钥数据结构具有包括密钥id和密钥的条目。[0305]提及“一个实施例”、“实施例”、“示例实施例”等等表明描述的实施例可包括特定的特征、结构或特性,但可能不一定每个实施例都包括该特定特征、结构或特性。此外,这种短语不一定指的是同一实施例。另外,当结合实施例来描述特定的特征、结构或特性时,认为结合其他实施例(无论是否明确描述)来实现这种特征、结构或特性是在本领域技术人员的知识范围内的。[0306]此外,在上文描述的各种实施例中,除非另有特别注明,否则诸如短语“a、b或c中的至少一者”之类的析取语言旨在被理解为意指a、b或c,或者其任何组合(例如,a、b和/或c)。因此,析取语言并不旨在也不应当被理解为暗示给定的实施例要求至少一个a、至少一个b或者至少一个c各自都存在。[0307]说明书和附图因此应被认为是说明性的,而不是限制性的。然而,将明显的使,在不脱离如权利要求中记载的本公开的更宽精神和范围的情况下,可对其进行各种修改和改变。当前第1页12当前第1页12
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献