用于通过不受信任的链路对硬件进行编程的ISA支持的制作方法

文档序号:30623439发布日期:2022-07-02 05:39阅读:257来源:国知局
用于通过不受信任的链路对硬件进行编程的ISA支持的制作方法
用于通过不受信任的链路对硬件进行编程的isa支持


背景技术:

1.3d交叉点(3dxp)存储器可以提供持久存储器,该持久存储器可以在诸如存储器扩展之类的其他用途中代替传统的盘驱动器,并且可以在2级存储器(远存储器)配置中使用,在该2级存储器配置中,随机存取存储器(ram)是“近存储器”,而3dxp是“远存储器”。3dxp存储器除了其持久性的特性外还具有高密度,从而允许在平台上存在多个tb的此类存储器,从而产生性能和功率效率。在系统启动时,基本输入/输出系统(bios)利用零来初始化全部存储器,以满足在对存储器的第一次读取时获得零数据的软件期望。对于具有千兆字节的存储器的典型系统,该过程可能是耗时的。
附图说明
2.将参考附图来描述根据本公开的各实施例,其中:
3.图1图示示例计算系统的示意图。
4.图2图示多密钥密码存储器保护系统的示例实施例。
5.图3图示使用处理器指令来配置受保护的域的示例。
6.图4图示包括提供快速归零支持的加密引擎的系统的实施例。
7.图5图示用于使用fzm-mktme引擎处理读取和写入的方法的实施例。
8.图6图示用于使用fzm-mktme引擎处理读取和写入的方法的实施例。
9.图7图示由处理器执行的用于处理wrap_key指令的方法的实施例。
10.图8图示用于使用wrap_key指令的流程的实施例。
11.图9图示示例性系统的实施例。
12.图10图示可具有多于一个的核、可具有集成存储器控制器、并且可具有集成图形器件的处理器的实施例的框图。
13.图11(a)是图示根据实施例的示例性有序流水线以及示例性寄存器重命名的乱序发布/执行流水线两者的框图。
14.图11(b)是图示根据实施例的要包括在处理器中的有序架构核的示例性实施例和示例性的寄存器重命名的乱序发布/执行架构核两者的框图。
15.图12图示(多个)执行单元电路的实施例。
16.图13是根据一些实施例的寄存器架构的框图。
17.图14图示指令格式的实施例。
18.图15图示寻址字段的实施例。
19.图16图示第一前缀的实施例。
20.图17(a)-图17(d)图示如何使用第一前缀的r、x和b字段的实施例。
21.图18(a)-图18(b)图示第二前缀的实施例。
22.图19图示第三前缀的实施例。
23.图20图示根据实施例的对照使用软件指令转换器将源指令集中的二进制指令转换成目标指令集中的二进制指令的框图。
具体实施方式
24.本公开涉及用于以下操作的方法、装置、系统和非暂态计算机可读存储介质:在接收到来自控制器的、关于从存储器读取的数据是第一次被读取的指示时,对被归零的数据进行加密和完整性保护,然后使用远存储器控制器中的加密引擎将其存储在近存储器中。
25.如在背景技术中指出的,对存储器的归零会对用于初始化的引导时间产生负面影响。对于3dxp存储器,当作为易失性存储器使用时,在平台上可能存在多个tb的存储器,以充分利用3dxp存储器的优势。即使是初始化1tb的存储器也可能花费约4分钟,这严重影响用户体验。为了改善3dxp存储器的不切实际的长初始化时间的这种体验,本文详述被称为快速归零存储器(fzm)的特征,其中存储器控制器维护元数据以知晓在引导周期中第一次读取何时被发送至3dxp存储器中的任何位置,从而减轻对软件初始化的需求。
26.图1图示示例计算系统100的示意图。在各实施例中,系统100和/或其基本组件可以包括贯穿本公开描述的密码存储器保护功能。例如,云服务提供方120通常为多个客户或第三方主控工作负载130(例如,数据和/或应用)。因此,在一些实施例中,云服务提供方120可以实现多密钥密码存储器保护以逐租户地提供存储器加密,从而确保每个客户工作负载130使用唯一的加密密钥被单独地保护和隔离。密码存储器保护还可以由系统100的其他组件(诸如,边缘设备110)来实现。贯穿本公开结合其余附图进一步描述密码存储器保护的示例实施例。
27.现在将在下文中进一步讨论计算系统100的所图示示例中的各种组件。边缘设备110可包括靠近通信系统100的“边缘”而部署或连接的任何装备和/或设备。在所图示的实施例中,边缘设备110包括终端用户设备112(例如,台式机、膝上型计算机、移动设备)、物联网(iot)设备114以及网关和/或路由器116,等等此类示例。边缘设备110可通过一个或多个网络和/或通信协议(诸如,通信网络150)彼此通信和/或与其他远程网络和服务(例如,云服务120)通信。此外,在一些实施例中,某些边缘设备110可以包括贯穿本公开描述的密码存储器保护功能。
28.终端用户设备112可包括允许或促进与计算系统100的用户交互的任何设备,包括例如,台式计算机、膝上型计算机、平板、移动电话和其他移动设备、以及可穿戴设备(例如,智能手表、智能眼镜、头戴式耳机),等等此类示例。
29.iot设备114可包括能够通信和/或能够参与物联网(iot)系统或网络的任何设备。iot系统可以指由为特定应用或用例交互操作或协同的多个不同设备(例如,iot设备114)组成的新的或改善的自组织(ad-hoc)系统和网络。随着越来越多的产品和装备演变成变得“智能”,此类自组织系统正在兴起,这意味着这些自组织系统由计算机处理器控制或监测,并且能够与其他设备通信。例如,iot设备114可包括计算机处理器和/或通信接口以允许与系统100的其他组件(诸如,与云服务120和/或与其他边缘设备110)交互操作。iot设备114可以是从头开发出iot能力的“绿野”(“greenfield”)设备、或通过将iot能力整合到最初并没有开发出iot能力的现有传统设备中而创建的“棕野”(“brownfield”)设备。例如,在一些情况下,iot设备114可从整合在“物体”中或附连至“物体”的传感器和通信模块建立,该“物体”诸如装备、玩具、工具、运载工具、活物(例如,植物、动物、人),等等。替代地或附加地,某些iot设备114可依赖于中介组件(诸如,边缘网关或路由器116)来与系统100的各种组件通信。
30.iot设备114可包括用于监测、检测、测量和生成与它们的环境特性相关联的传感器数据和信号的各种类型的传感器。例如,给定的传感器可被配置成用于检测一个或多个相应特性,诸如,移动、重量、物理接触、生物属性、温度、风、噪声、光、位置、湿度、辐射、液体、具体的化学化合物、电池寿命、无线信号、计算机通信和带宽,等等此类示例。传感器可包括物理传感器(例如,物理监测组件)和虚拟传感器(例如,基于软件的监测组件)。iot设备114还可包括用于在其相应的环境中执行各种动作的致动器。例如,致动器可用于选择性地激活某些功能,诸如,切换安全系统(例如,警报、摄像头、锁)或家用装置(例如,音频系统、照明、hvac装置、车库门)的功率或操作,等等此类示例。
31.实际上,本公开构想了潜在地无限范围的iot设备114和相关联的传感器/致动器的使用。iot设备114可包括,例如,与任何类型的系统100和/或行业相关联的任何类型的装备和/或设备,上述行业包括:交通(例如,汽车、航空)、工业制造、能量(例如,发电厂)、电信(例如,因特网、蜂窝和电视服务提供方)、医疗(例如,保健、制药)、食品加工和/或零售行业,等等。例如,在交通行业,iot设备114可包括与飞行器、汽车或船舶相关联的装备和设备,诸如,导航系统、自主飞行或驾驶系统、交通传感器和控制器和/或由传感器监测的任何内部机械或电气组件(例如,引擎)。iot设备114还可包括与工业制造和生产、航运(例如,货物跟踪)、通信网络(例如,网关、路由器、服务器、蜂窝塔)、服务器场、发电厂、风力场、油气管线、水处理和配送、废水收集和处理以及天气监测(例如,温度、风和湿度传感器)等此类示例相关联的装备、设备和/或基础设施。iot设备114还可包括例如任何类型的“智能”设备或系统,诸如,智能娱乐系统(例如,电视机、音频系统、电子游戏系统)、智能家庭或办公室装置(例如,供热-通风-空气调节(hvac)装置、冰箱、洗衣机、烘干机、咖啡机)、功率控制系统(例如,自动电、光和hvac控制)、安全系统(例如,警报、锁、摄像头、运动检测器、指纹扫描器、面部识别系统)以及其他家庭自动化系统,等等此类示例。iot设备114可静态地定位,诸如,安装在建筑物、墙壁、地板、地面、灯杆、标识牌、水塔或任何其他固定或静态结构上。iot设备114还可以是移动的,诸如,在车辆或飞行器中的设备、无人机、包裹(例如,用于跟踪货物)、移动设备以及可穿戴设备,等等此类示例。此外,iot设备114也可以是任何类型的边缘设备110,包括终端用户设备112以及边缘网关和路由器116。
32.边缘网关和/或路由器116可用于促进去往边缘设备110以及来自边缘设备110的通信。例如,网关116可将通信能力提供给最初没有开发出任何此类能力的现有传统设备(例如,“棕野”iot设备)。网关116也可用于延伸具有短程、专属或以其他方式受限的通信能力的边缘设备110(诸如,具有蓝牙或zigbee通信能力的iot设备114)的地理范围。例如,网关116可通过使用其原生通信能力(例如,蓝牙、zigbee)将前传(front-haul)提供给iot设备114并且使用另一有线或无线通信介质(例如,以太网、wifi、蜂窝)将后传(back-haul)提供给其他网络150和/或云服务120以在iot设备114与远程网络或服务之间充当中介。在一些实施例中,网关116可由专用网关设备实现,或可由通用设备(诸如,另一iot设备114、终端用户设备112或其他类型的边缘设备110)实现。
33.在一些实例中,网关116还可单独地或与其他组件(诸如,云服务120和/或其他边缘设备110)结合地实现某些网络管理和/或应用功能(例如,用于iot设备114的iot管理和/或iot应用功能)。例如,在一些实施例中,可向网关设备116推送配置参数和/或应用逻辑或从网关设备116拉取配置参数和/或应用逻辑,从而允许网关116的范围或接近范围内的iot
设备114(或其他边缘设备110)被配置成用于特定的iot应用或用例。
34.云服务120可包括通过网络150或在“云”中被远程地主控的服务。例如,在一些实施例中,云服务120可在数据中心中的服务器(例如,应用服务器或数据库服务器)上被远程地主控。云服务120可包括可由边缘设备110利用或可用于边缘设备110的任何服务,包括但不限于,数据和应用主控、计算服务(例如,数据分析、搜索、诊断和故障管理)、安全服务(例如,监控、警报、用户认证)、绘图与导航、地理位置服务、网络或基础设施管理、iot应用和管理服务、支付处理、音频和视频流送、消息传送、社交联网、新闻和天气,等等此类示例。此外,在一些实施例中,某些云服务120可以包括贯穿本公开描述的密码存储器保护功能。例如,云服务提供方120通常为多个客户或第三方主控工作负载130(例如,数据和/或应用)。因此,在一些实施例中,云服务提供方120可以实现多密钥密码存储器保护以逐租户地提供存储器加密,从而确保每个客户工作负载130使用唯一的加密密钥被单独地保护和隔离。
35.网络150可用于促进计算系统100的组件之间的通信。例如,边缘设备110(诸如,终端用户设备112和iot设备114)可使用网络150来彼此通信和/或访问一个或多个远程云服务120。网络150可包括任何数量或类型的通信网络,包括例如,局域网、广域网、公共网络、因特网、蜂窝网络、wi-fi网络、短程网络(例如,蓝牙或zigbee)和/或任何其他有线或无线网络或通信介质。
36.系统100的计算设备中的任一者、全部或一些可适于执行任何操作系统,包括linux或其他基于unix的操作系统、微软windows、windows server、macos、苹果ios、谷歌安卓、或任何定制和/或专属操作系统,以及适于虚拟化特定操作系统的执行的虚拟机。
37.尽管图1被描述为包含或关联于多个元件,但并非图1的系统100内示出的所有元件可被用于本公开的每个替代实现方式中。此外,结合图1的示例所述的元件中的一个或多个元件可以位于系统100外部,而在其他实例中,某些元件可以被包括在其他所述元件中的一个或多个以及未在所示实现方式中描述的其他元件内,或被包括作为其他所述元件中的一个或多个以及未在所示实现方式中描述的其他元件的一部分。进一步地,图1中图示的某些元件可以与其他组件相组合,并且除本文中所描述的那些目的之外还被用于替代的目的或附加的目的。
38.图2图示多密钥密码存储器保护系统200的示例实施例。在所示的实施例中,存储器保护系统200包括处理器202、系统代理204和存储器210。如下文进一步所述,存储器保护系统200为存储在存储器210上的数据提供密码保护。
39.处理器202可用于执行指令、代码和/或任何其他形式的逻辑或软件,诸如与软件应用相关联的指令。处理器202可包括可操作以执行指令的逻辑或处理元件的任何组合,无论是从存储器加载的还是直接实现在硬件中的,诸如微处理器、数字信号处理器、现场可编程门阵列(fpga)、图形处理单元(gpu)、可编程逻辑阵列(pla)或专用集成电路(asic),以及其他示例。在一些实施例中,例如,处理器202和/或存储器保护系统200可以使用图6-图10的计算机架构来实现。
40.存储器210可用于存储信息,诸如在执行期间由处理器202使用的代码和/或数据,和/或与系统200的应用或用户相关联的持久数据。存储器210可包括任何类型或组合的能够存储信息的组件,包括易失性存储器(例如,随机存取存储器(ram),诸如动态ram(dram)、同步动态ram(sdram)和静态ram(sram))和/或非易失性存储器(例如,存储类存储器(scm)、
直接存取存储(das)存储器、非易失性双列直插存储器模块(nvdimm)和/或其他形式的闪存或固态存储)。
41.系统代理204可以用于为处理器202提供各种功能,诸如,管理对存储器210和/或系统200的其他资源的访问。在所图示的实施例中,例如,系统代理204包括存储器控制器208,用于控制和/或管理对系统200的存储器210的访问。此外,如下文进一步描述,系统代理204还包括存储器保护控制器206(有时称为多密钥总存储器加密(mktme)引擎),用于保护存储在存储器210上的数据。在一些实施例中,系统代理204还可(例如,使用直接媒体接口(dmi)和/或pci-express桥)提供处理器202与系统200的其他组件之间的接口。在各种实施例中,系统代理204可以包括被配置为执行本文所述的系统代理204的功能的逻辑元件的任何组合,无论是从存储器或其他非暂态计算机可读介质加载,还是直接在硬件中实现,通过非限制性示例,其包括:微处理器、数字信号处理器(dsp)、现场可编程门阵列(fpga)、图形处理单元(gpu)、可编程逻辑阵列(pla)、专用集成电路(asic)和/或虚拟机(vm)处理器。系统代理204可与处理器202集成,或者替代地,系统代理204可实现在通信地耦合或连接到处理器202的单独的芯片上。
42.存储器控制器208可用于控制和/或管理对系统200的存储器210的访问。在各种实施例中,存储器控制器208可使用硬件和/或软件逻辑的任何组合来实现,包括微处理器、专用集成电路(asic)、现场可编程门阵列(fpga)、可编程逻辑阵列(pla)、虚拟机(vm)、和/或任何其他类型的电路系统或逻辑。
43.在所图示的实施例中,系统200为存储器210提供密码存储器保护。在一些实施例中,例如,密码存储器保护可以通过扩展和/或修改特定的计算机架构来实现。例如,密码存储器保护可以通过扩展处理器202的功能和/或引入存储器保护控制器206来实现。在所图示的实施例中,例如,处理器202被扩展为支持控制寄存器203和可以用于启用和/或配置密码存储器保护的(多条)处理器指令,并且存储器保护控制器206被实现为提供密码存储器保护。虽然所图示的示例使用分开的逻辑块来描绘存储器保护控制器206和处理器202,但在实际的实施例中,存储器保护控制器206和处理器202可以集成在一起,或者替代地可以实现为分开的组件。在各实施例中,例如,存储器保护控制器206可以使用硬件和/或软件逻辑的任何组合来实现,包括微处理器、专用集成电路(asic)、现场可编程门阵列(fpga)、可编程逻辑阵列(pla)、虚拟机(vm)、和/或任何其他类型的电路系统或逻辑。
44.存储器保护控制器206使用存储器加密来保护存储在存储器210上的数据。在一些实施例中,例如,存储器保护控制器206可以实现在存储器路径或存储器总线上以允许对传送至存储器210的、和从存储器210传送的、和/或存储在存储器210上的数据的加密。此外,在一些实施例中,存储器保护控制器206可以是可配置或可编程的,并且可包括对多个加密密钥的支持。相应地,存储器保护控制器206可以(例如,由软件)配置或编程为使用不同的加密密钥和/或算法对存储器210的不同区域或页进行加密。以此方式,可以为不同的用户、租户、客户、应用和/或工作负载单独地提供和配置存储器加密。
45.例如,在一些实施例中,存储器保护控制器206可用于定义可以使用存储器加密单独地配置和保护的各种安全的或受保护的域。在一些实施例中,例如,“域”可以被视为与特定工作负载(例如,特定用户或应用的工作负载)相关联的资源的集合,并且可以包括存储器的包含与该工作负载相关联的数据的任何区域。例如,用于云服务供应方的客户工作负
载的受保护的域可包括与操作系统(o/s)、虚拟机(vm)(例如,在虚拟机管理器(vmm)上运行的vm)和/或在o/s或vm上运行的任何环3应用相关联的资源(例如,存储器)。存储器保护控制器206可允许受保护的域被单独地配置和保护,从而允许每个受保护的域通过利用唯一的加密密钥对其相关联的代码和/或数据进行加密而在存储器中以密码方式被隔离。以此方式,通过为各种工作负载定义不同的保护域,不同的用户、客户和/或租户的工作负载能以密码方式被隔离。
46.在一些实施例中,可使用处理器指令和/或硬件寄存器来发现和配置系统200的密码存储器保护。例如,在一些实施例中,处理器指令可以用于判定密码存储器保护是否由系统200支持,诸如,由软件用于标识特定处理器的能力的cpu标识(cpuid)指令。
47.在判定了密码存储器保护由系统200支持之后,随后可使用硬件寄存器来启用和/或配置密码存储器保护,这些硬件寄存器诸如处理器202的控制寄存器203。例如,控制寄存器203可以包括允许软件发现、启用和/或配置系统200的密码存储器保护能力的各种型号专用寄存器(msr)。在一些实施例中,例如,控制寄存器203可包括存储器加密能力寄存器、存储器加密激活寄存器、和/或一个或多个存储器加密排除寄存器,如下文进一步描述。
48.存储器加密能力寄存器(me_capability_msr)可用于允许软件发现系统200的存储器加密能力。例如,软件可以读取me_capability_msr(例如,使用读取msr(rdmsr)指令)来标识所支持的加密类型和/或算法、可并发地使用的加密密钥的最大数量等。下表图示存储器加密能力寄存器(me_capability_msr)的示例实施例。存储器加密能力寄存器(me capability msr)
49.存储器加密激活寄存器(me_activate_msr)可用于激活系统200的密码存储器保护(例如,通过在寄存器字段中设置适当的值)。下表图示存储器加密激活寄存器(me_activate_msr)的示例实施例。存储器加密激活寄存器(me_activate_msr)
50.存储器加密排除寄存器(me_exclude_base_msr和me_exclude_mask_msr)可用于将某些存储器区域排除在由系统200提供的密码存储器保护之外。例如,在一些实施例中,
排除寄存器可用于标识存储器基址,并且然后可针对与基址匹配的存储器地址绕过存储器加密(例如,允许被排除或被绕过的存储器地址以明文模式被访问)。
51.下表图示存储器加密排除掩码寄存器(me_exclude_mask_msr)的示例实施例,并且接下来的表图示存储器加密排除基址寄存器(me_exclude_base_msr)的示例实施例。存储器加密排除掩码寄存器(me_exclude_mask_msr)存储器加密排除掩码寄存器(me_exclude_mask_msr)存储器加密排除基址寄存器(me_exclude_base_msr)
52.在所图示的实施例中,存储器保护控制器206维护内部域密钥表207以标识已在系统200中配置的受保护的域。密钥表207可以使用任何形式的存储器或存储(例如,ram)来实现,并且还可以直接实现在存储器保护控制器206上、在存储器210中和/或使用另一存储器组件来实现。
53.存储器保护控制器206包括密码单元205,用于使用或构建要在加密/解密中使用的微调(tweak)。存储器保护控制器206被布置为使用微调和共同密钥集来对由读取请求利用经加密的存储器地址指定的数据解密。此处,共同密钥集是被使用的单个密钥集,而不考虑若干租户或租户工作负载中的哪一个正在被加密或解密。例如,使用来自共同密钥集的与第二租户的工作负载数据相同的密钥来加密第一租户的工作负载数据。这些工作负载的加密之间的区别在于,从来自密钥id注册的租户专用的密钥id-现时数(nonce)创建的租户(或域)专用微调。在示例中,解密是通过执行基于高级加密标准(aes)xex的微调的代码本模式与密文窃取(xts)(aes-xts)解密来完成的,其中aes-xts密钥k1和k2在共同密钥集中(例如,相同的k1和k2用于所有租户工作负载),并且微调跨互不信任的域是唯一的。以下表示传统的多密钥aes-xts技术:t=aes(k2,tweak)pp=p xor t
23.cc=aes(k1,pp)c=cc xor t
54.其中p是明文,c是所生成的密文,并且k1和k2是域专用密钥。因此,在该最后一个示例中,k1和k2来自共同密钥集并且不是域专用密钥,但微调专用于域。
55.与上文所述的用于从存储器(例如,dram、远存储器等)读取经加密数据的那些技术类似的一组技术用于对要存储在存储器中的数据进行加密。因此,系统代理被布置为接收针对经加密的存储器的写入请求。同样,写入请求包括经加密的存储器地址。系统代理使用密钥id位从密钥表207中检取密钥id-现时数,并从密钥id-现时数、密钥id位和物理地址位构建微调。然后,微调结合共同密钥集用于对由写入请求指定的数据进行加密。然后,经加密的数据可以存储在存储器中位于经加密的存储器地址中的物理地址处。
56.域密钥表207的条目207a-d各自对应于不同的受保护的域。例如,每个条目207a-d包括密钥或域标识符(id)、保护模式、和相关联的加密密钥(如果适用)。在一些实施例中,例如,密钥id可以表示在相关联的受保护的域内的存储器地址的较高阶位。例如,如上文所讨论,me_activate_msr寄存器的me_keyid_bits字段指定用于密钥id的位的数量。在所图示的示例中,域密钥表207中的每个密钥id使用5个位来表示。相应地,与给定的密钥id相关联的受保护的域覆盖其最高阶的5位与密钥id匹配的所有存储器地址。在所图示的实施例中,密钥id作为字段存储在密钥表207中,但在替代实施例中,密钥id可以用作到密钥表207中的索引而不是直接存储在密钥表207中。
57.此外,在一些实施例中,可以支持多个保护模式,并且可以使用特定的保护模式来保护每个受保护的域。例如,在一些实施例中,所支持的保护模式可包括明文模式(例如,未加密的)、标准或默认加密模式(例如,使用标准或默认加密密钥加密的)、和/或定制加密模式(例如,使用唯一的加密密钥加密的)。相应地,密钥表207可标识与每个受保护的域或密钥id相关联的保护模式。
58.例如,在所图示的示例中,域密钥表207包括四个条目。第一条目标识对应于密钥id 00000的受保护的域(因此覆盖在最高阶5位中包括00000的所有存储器地址),其以默认加密模式使用密钥“abc”来保护。第二条目标识对应于密钥id 00001的受保护的域(因此覆盖在最高阶5位中包括00001的所有存储器地址),其以明文模式来保护并且因此不具有相关联的加密密钥。第三条目标识对应于密钥id 00010的受保护的域(因此覆盖在最高阶5位中包括00010的所有存储器地址),其以定制加密模式使用密钥“xyz”来保护。第四条目标识对应于密钥id 00011的受保护的域(因此覆盖在最高阶5位中包括00011的所有存储器地址),其以默认加密模式使用密钥“abc”来保护。如这些示例所示,使用定制加密模式来保护的域具有唯一密钥(“xyz”),使用默认加密模式来保护的域共享加密密钥(“abc”),并且以明文模式来保护的域未被加密并且因此不具有相关联的密钥。
59.在一些实施例中,可使用由处理器202实现的处理器指令(诸如结合图3和贯穿本公开描述的“平台配置”(pconfig)指令)来定义和/或配置受保护的域。例如,pconfig指令可用于通过对存储器保护控制器206的密钥表207中的新条目进行编程(或通过修改现有的条目)来定义和/或配置受保护的域。以此方式,可以使用pconfig指令来以编程方式(例如,由管理软件)定义和配置受保护的域。
60.图3图示使用处理器指令来配置受保护的域的示例300。在一些实施例中,例如,处理器可以实现可用于配置与存储器保护系统相关联的受保护的域的指令。例如,处理器指令可以是“平台配置”(pconfig)指令、“受信任平台行动管理程序”(tpas)指令和/或任何其他合适类型的指令。
61.例如,“平台配置”(pconfig)指令可用于通过对存储器保护控制器的域密钥表(例如,来自图2的存储器保护控制器206的域密钥表207)中的新条目进行编程(或通过修改现有的条目)来定义和/或配置受保护的域。以此方式,可以使用pconfig指令来以编程方式定义和配置受保护的域。一旦已经使用pconfig指令来配置受保护的域,与受保护的域相关联的存储器地址就按照由针对受保护的域的配置所指定的方式被保护。例如,当使用加密保护时,数据在被写入受保护的域内的存储器地址之前被加密,并且从受保护的域内的存储器地址读取的数据在被返回到作出请求的处理器之前被解密。
62.在一些实施例中,pconfig指令可能需要某个特权级别或特权环。例如,处理器可以支持特权级别或特权环的层级结构以限制对某些资源的访问。在一些实施例中,特权环0可能是限制性最小的级别,而数字较高的特权环可能是限制性越来越强的。例如,特权环0可用于系统管理软件(例如,操作系统内核和设备驱动程序),而特权环3可用于用户区应用。因此,在一些实施例中,pconfig指令可以是环-0指令,其只能由在最高特权环中执行的软件使用(例如,用于配置受保护的域的管理软件)。替代地或附加地,pconfig指令可以是环-3指令,其可以由任何用户区应用使用以配置其自身的受保护的域。
63.图3图示与pconfig指令相关联的示例调用流程300。所图示的示例标识在使用pconfig指令执行域配置的软件310与存储器保护控制器320之间的调用流程300。存储器保护控制器320可以包括提供密码存储器保护的任何引擎、控制器或其他组件(例如,图2的存储器保护控制器206)。软件310可以包括用于配置由存储器保护控制器320保护的域的任何软件,诸如虚拟机管理器和/或其他管理软件。所图示的调用流程通过软件310选择用于对特定域的加密密钥进行编程的密钥编程模式而开始(调用302a)。例如,如下文进一步讨论,
软件310可以直接为域指定密钥,或者可以请求生成随机密钥。然后,软件310可以调用pconfig处理器指令来执行域配置(调用302b)。当pconfig指令被调用时,存储器保护控制器320对特定域的密钥和保护模式进行编程(调用302c)。然后,存储器保护控制器320将状态代码返回至软件310(调用302d),并且然后状态代码由软件310处理(调用302e)。
64.在一些实施例中,pconfig指令可以支持用于配置和管理受保护的域的各种叶函数。当pconfig指令被执行时,例如,可以在硬件寄存器(例如,eax寄存器)中指定要调用的特定叶函数。在一些实施例中,还可以在硬件寄存器(例如,rbx/rcx/rdx寄存器)中指定由特定叶函数使用的参数。
65.下表图示可用于启用对多个叶函数的支持的pconfig叶编码的示例。虽然仅示出一个叶函数(key_program叶),但可以使用保留的叶编码来定义附加的叶函数,以扩展pconfig指令的功能。pconfig叶函数编码
66.pconfig指令的密钥编程叶函数(key_program)可用于对受保护的域的密钥进行编程。在一些实施例中,由密钥编程叶函数使用的参数可以在密钥编程结构(key_program_struct)中指定,并且密钥编程结构的地址可以在硬件寄存器(例如,rbx寄存器)中指定。下表图示密钥编程结构(key_program_struct)的示例实施例。密钥编程结构(key_program_struct)
67.如图所示,密钥编程结构标识被编程的特定域的密钥id,并且它还指定密钥编程命令。在一些实施例中,例如,密钥编程叶函数可以支持多个密钥编程命令,并且可以在密钥编程结构中指定期望的命令。此外,在一些实施例中,密钥编程结构还可以包括(多个)保留字段,保留字段可用于对密钥编程叶函数的后续扩展。
68.下表图示可由密钥编程叶函数支持的密钥编程命令的示例。密钥编程命令
69.在执行密钥编程叶函数后,可在硬件寄存器中指定返回值或状态代码,以指示密钥编程函数是否成功。下表图示可由密钥编程叶函数返回的状态代码的示例。由密钥编程叶函数(key_program)返回的状态代码
70.虽然所图示的实施例使用pconfig处理器指令来执行域配置,但其他实施例可以使用替代和/或附加的方法来进行域配置。例如,在一些实施例中,域配置可以使用硬件寄存器来执行。例如,可以实现pconfig型号专用寄存器(msr)以用于执行域配置,从而允许软件通过写入pconfig msr(例如,利用在寄存器(诸如ecx寄存器)中传递的pconfig msr的索引来执行wrmsr指令)来调用pconfig操作。此外,pconfig操作的某些参数(及其相关联的叶函数和命令)可以在硬件寄存器中传递。例如,密钥编程结构(key_program_struct)的地址可以在硬件寄存器中传递,这些硬件寄存器诸如edx寄存器、eax寄存器、或这两个寄存器(例如,对于64位存储器地址)。然后,pconfig操作可以以上述类似的方式执行。
71.此外,在一些实施例中,pconfig操作可以利用经包裹的blob(二进制大对象)以用于域密钥编程。以此方式,可以对域密钥进行编程,而不将密钥透露给管理软件。在一些实施例中,例如,可以实现附加的pconfig叶函数,以使密钥能被包裹,并且然后在被解开包裹后随后被编程到存储器保护控制器320。
72.用于实现pconfig指令的示例伪代码提供如下:
73.在一些实施例中,存储器加密技术被应用于与ram不同的存储器。具体而言,被应用于诸如3dxp之类的远存储器或可用作易失性存储器的其他大型存储器。3dxp存储器可以提供持久存储器,该持久存储器可以在诸如存储器扩展之类的其他用途中代替传统的盘驱动器。3dxp存储器除了其持久性的特性外还具有高密度,从而允许在平台上存在多个tb的此类存储器,从而产生性能和功率效率。在系统启动时,bios利用零来初始化全部存储器,以满足在对存储器的第一次读取时获得零数据的软件期望。
74.为了处理针对3dxp存储器的不切实际的长初始化时间,实现被称为快速归零存储器(fzm)的特征,其中存储器控制器维护元数据以知晓在引导周期中第一次读取何时被发送至3dxp存储器中的任何位置,从而减轻对软件初始化的需求。
75.在使用fzm的情况下,从远存储器的第一次读取将作为全零被高速缓存在近存储器中,并且然后在返回到软件之前,这些零将由加密引擎解密为垃圾,从而打破在第一次读取时读取全零的软件假设。即使关于在第一次读取时返回零的指示被发送至加密引擎,近存储器也将高速缓存全零,从而打破在存储器中存储经加密的所有内容的加密承诺。由于这个原因,fzm与存储器加密和完整性是互斥的。存储器完整性引入了其他挑战,其中与数据相关联的消息认证码(mac)需要在加密引擎处通过完整性检查,以使经解密的数据被发送至请求者。
76.在本文详述的实施例中描述了一种具有快速归零支持的加密架构(例如,fz-mktme),以允许存储器加密和完整性架构与3dxp存储器或其他远存储器一起高效地工作。具体而言,详述了用于远存储器控制器中的快速归零的加密引擎以及用于对该引擎的一致的密钥编程的机制。例如,详述了指令,该指令允许软件即使在控制器位于芯片上系统(soc)之外时也能发送受保护的密钥,等等。
77.图4图示包括提供快速归零支持的加密引擎的系统的实施例。注意,该系统的一些方面与图2相同,并且不再详述。逻辑上耦合至存储器210的是远存储器控制器502。该远存储器控制器502读取和写入远存储器506。在远存储器控制器502内是支持快速归零的fzm mktme引擎504(与存储器保护控制器206性质类似的多密钥加密引擎)。在接收到来自fzm逻辑506(其跟踪访问)的关于从存储器读取的数据是第一次被读取的fzm指示时,fzm mktme 504将对被归零的数据进行加密和完整性保护,然后将其存储在近存储器(存储器210)中。要使用的密钥的标识符与物理地址一起被携载在顶阶地址位中,并且fzm mktme引擎504使用这些位来索引密钥表505(类似于图2中的密钥表),该密钥表被编程为具有与密钥id中的每一个相关联的密钥。
78.图5图示用于使用fzm-mktme引擎处理读取和写入的方法的实施例。当在501处接收到来自近存储器控制器的请求(近存储器中的未命中)时,在503处,fzm-mktme引擎检查该请求是读取请求还是写入请求。当请求是写入请求时,近存储器加密引擎(例如,存储器保护控制器206)将对写入数据进行加密和完整性保护,并将密文与相关联的mac一起发送至远存储器控制器502。由此,该密文与相关联的mac一起将被存储在远存储器中。
79.当从近存储器控制器接收到读取请求时,在507处,fz-mktme引擎使用与请求一起接收的物理地址中的密钥id相关联的密钥开始微调生成,并将读取请求发送至远存储器的物理地址处。这是读取是从存储器的第一次读取的预期,并且因此将需要在fz-mktme引擎处的进一步处理。
80.当在509处从远存储器返回数据时,在511处,fz-mktme引擎确定指示对来自远存储器的位置的第一次读取的fzm指示是否被设置。如果未设置,则在513处,fz-mktme引擎丢弃其在读取将是从存储器的第一次读取的预期下生成的微调值,并将来自远存储器的所接收的数据和相关联的mac向上游发送至近存储器。
81.当fzm指示被设置时,在515处,fz-mktme引擎使用所生成的微调来加密所返回的数据,并针对经加密的被归零的数据生成相关联的mac。然后在517处,将经加密的零和mac
发送至近存储器以供存储,并进一步发送至近存储器后面的mktme引擎存储器保护控制器206以对零解密并将零正确地返回至作出请求的代理。
82.注意一些实施例,fz-mktme引擎可以针对功率而不是性能进行优化,其中代替于假设读取是对存储器的第一次读取并在接收到读取请求时开始生成微调,它可以等待接收来自存储器的fzm指示,并且仅在fzm指示被设置的情况下,它才生成微调以执行加密和mac生成。
83.图6图示用于使用fzm-mktme引擎处理读取和写入的方法的实施例。当在601处接收到来自近存储器控制器的请求(近存储器中的未命中)时,在603处,fzm-mktme引擎检查该请求是读取请求还是写入请求。当请求是写入请求时,近存储器加密引擎(例如,存储器保护控制器206)将对写入数据进行加密和完整性保护,并将密文与相关联的mac一起发送至远存储器控制器502。由此,该密文与相关联的mac一起将被存储在远存储器中。
84.当从近存储器控制器接收到读取请求时,在607处,fz-mktme存储标签(请求id)和相关联的密钥id和地址信息。在607处,读取请求被发送至远存储器的物理地址处。
85.当在609处从远存储器返回数据时,在611处,fz-mktme引擎确定指示对来自远存储器的位置的第一次读取的fzm指示是否被设置。如果未设置,则在613处,fz-mktme引擎放弃对请求的跟踪,并将从远存储器检取的数据发送至近存储器。
86.当fzm指示被设置时,在615处,fz-mktme引擎生成用于对所返回的数据进行加密的微调(并对数据进行加密),并使用所标识的密钥生成相关联的mac。然后,在617处,经加密的数据和mac被发送至近存储器以供存储,并进一步发送至近存储器后面的mktme引擎存储器保护控制器206。
87.在一些实施例中,需要对fz-mktme引擎进行编程。例如,需要在近存储器与fz-mktme引擎之间对密钥id和相关联的密钥进行一致地编程。在一些实施例中,上文详述的pconfig指令用于对fz-mktme引擎进行编程。在其他实施例中,例如,当远存储器控制器与mktme引擎不在同一soc或管芯上时,使用wrap_key(包裹_密钥)指令。wrap_key指令取得输入,并利用密钥对其进行包裹,并且往回提供经加密和受到完整性保护的blob作为输出。
88.下表示出由wrap_key指令使用的密钥编程结构(key_program_struct_towrap)的实施例:密钥编程结构(key_program_struct_towrap)
89.密钥id字段标识正在被编程的域的密钥id。
90.keyid_ctrl字段携载两个子字段,这两个子字段由软件使用以控制密钥id、命令、和密钥id加密算法标识符的行为。所使用的命令控制密钥id的加密模式。加密(密码)算法字段允许软件为密钥id选择被激活的密码算法中的一种。如先前所讨论,bios可以激活一组算法,以允许在使用msr(诸如tme_activate msr)对密钥进行编程时使用。
91.key_field_1字段针对软件提供的数据密钥,当使用直接密钥编程选项(keyid_set_key_direct)时用于密钥id。当使用随机密钥编程选项(keyid_set_key_random)时,该字段携载软件提供的熵以被混合在cpu生成的随机数据密钥中。软件有责任确保针对直接编程选项提供的密钥或针对随机编程选项提供的熵不导致弱密钥。在一些实施例中,当使用aes xts-128时,较高的48b被视为保留,并在执行指令之前由软件归零。
92.key_field_2字段携载软件提供的微调密钥,当使用直接密钥编程选项(keyid_set_key_direct)时用于密钥id。当使用随机密钥编程选项(keyid_set_key_random)时,该字段携载软件提供的熵以被混合在cpu生成的随机微调密钥中。软件有责任确保针对直接编程选项提供的密钥或针对随机编程选项提供的熵不导致弱密钥。在一些实施例中,当使用aes xts-128时,较高的48b被视为保留,并在执行指令之前由软件归零。
93.mac字段存储针对密钥编程结构的mac。
94.在一些实施例中,wrap_key指令使用以下操作数:输入结构(key_program_struct_towrap)的第一源(例如,寄存器或存储器位置)位置,用于存储输出结构(key_program_struct_towrap)的第一目的地(例如,寄存器或存储器位置)位置,和第二目的地。具体而言,wrap_key指令包括用于标识这些源和目的地的一个或多个字段。wrap_key指令的操作码指示执行电路用于:将来自输入结构的key_field1字段和key_field2字段存储到输出结构中,对输出结构生成mac,并且通过使用会话密钥对结构进行加密来对整个结构进
行完整性保护。这生成要存储在由第二源提供的位置处的blob。注意,会话密钥被存储在处理器上的安全存储中。
95.经认证的加密算法(例如,aes-gcm)可用于该包裹。然后,从wrap_key指令中生成的经包裹的blob的地址可以被提供至不受信任的软件。在一些实施例中,不受信任的软件使用常规的mmio将经包裹的blob编程到远存储器控制器。注意,由于blob(携载密钥id信息)是经加密的,因此当blob传输通过不受信任的软件时,没有信息泄漏。然后,远存储器控制器要求提供mmio寄存器来接收blob,并在接收到blob时使用会话密钥来对blob进行解密和完整性验证,并在成功验证后将密钥id信息(包括与密钥id相关联的密钥)编程到fz-mktme引擎。
96.注意,本发明中介绍的密钥编程方案可以扩展到仅存储器扩展器。密钥编程方案也可以用于第三方设备,这些设备实现其自己的存储器加密引擎以用于保护附连到该设备的存储器。换言之,所公开的密钥编程是通用的,并且可用于跨不受保护的链路对密钥进行编程。
97.图7图示由处理器执行的用于处理wrap_key指令的方法的实施例。例如,如图11(b)中所示的处理器核、如下文详述的流水线等执行该方法。
98.在701处,取出指令。例如,取出wrap_key指令。wrp指令包括用于操作码的字段、用于标识目的地操作数的一个或多个字段、用于标识第一源操作数、第一目的地操作数和第二目的地操作数的一个或多个字段。第一源操作数用于存储第一数据结构的地址,第一目的地操作数用于存储指令的执行结果的地址。操作码用于指示执行电路用于:将来自第一数据结构的第一密钥信息和第二密钥信息(例如,key_field1和keyfield2)存储到第二数据结构中,对第二数据结构生成mac,对第二数据结构进行加密,并且将经加密的第二数据结构存储在由第一目的地操作数提供的地址处。在一些实施例中,操作数是寄存器(例如,rax、rbx和rcx)。在一些实施例中,操作数中的一个或多个是存储器位置。第二目的地操作数用于存储指令的操作状态。在一些实施例中,用于对第二数据结构进行加密的加密密钥是会话密钥。
99.在703处,对取出的指令进行解码。例如,由诸如本文中详述的解码电路之类的解码电路对取出的wrap_key指令进行解码。
100.在705处,检取与经解码的指令的源操作数相关联的数据值。例如,当源操作数中的一个或多个是存储器操作数时,检取来自所指示的存储器位置的数据。
101.在707处,由诸如本文中详述的执行电路(硬件)之类的执行电路(硬件)执行经解码的指令。对于wrap_key指令,该执行将使执行电路根据操作码执行经解码的指令以:将来自第一数据结构的第一密钥信息和第二密钥信息存储到第二数据结构中,对第二数据结构生成mac,对第二数据结构进行加密,并且将经加密的第二数据结构存储在由第一目的地操作数提供的地址处,并且更新第二目的地操作数中的指令的状态。
102.在一些实施例中,在709处,提交或引退指令。
103.图8图示用于使用wrap_key指令的流程的实施例。在801处,执行初始化。具体而言,安全代理启动与远存储器控制器的密钥交换。该密钥交换可以使用标准密钥交换协议(诸如经认证的diffie-hellman(dh)协议)来完成。在初始化的末尾,存在共享的共同会话密钥。会话密钥被存储在核可访问的位置中。
104.在803处,软件使用pconfig(或其他指令)将密钥id编程在mktme引擎上,并且安全代理调用wrap_key指令来包裹密钥id信息以用于对远存储器控制器进行编程。在一些实施例中,3dxp控制器使用mmio寄存器来接收blob,并在接收到blob时使用会话密钥来对blob进行解密和完整性验证,并在成功验证后将密钥id信息(包括与密钥id相关联的密钥)编程到fz-mktme引擎。
105.在805处,将经包裹的blob移交至远存储器控制器。在807处,远存储器控制器对blob解开包裹(使用会话密钥)并检取密钥id信息。
106.在809处,远存储器控制器确定是否存在完整性失败。例如,密钥id是否与预期值匹配?在经包裹的blob被不受信任的软件篡改或在通过链路的传输期间被篡改的情况下,在远存储器控制器处的解开包裹期间的完整性检查将失败。当存在失败时,在811处,远存储器控制器生成指示失败的经认证的响应(使用会话密钥的密码响应)。当不存在失败时,在813处,远存储器控制器生成指示成功的经认证的响应(使用会话密钥的密码响应)。在允许由安全软件使用密钥id之前,必须由安全代理对该响应进行验证。
107.下文详述可与上文详述的实施例一起使用的计算机架构、系统、处理器、指令格式等的实施例。示例性计算机架构
108.下文详述示例性计算机架构的描述。本领域中已知的对膝上型设备、台式机、手持式pc、个人数字助理、工程工作站、服务器、网络设备、网络中枢、交换机、嵌入式处理器、数字信号处理器(dsp)、图形设备、视频游戏设备、机顶盒、微控制器、蜂窝电话、便携式媒体播放器、手持式设备以及各种其他电子设备的其他系统设计和配置也是合适的。一般地,能够包含如本文中所公开的处理器和/或其他执行逻辑的各种各样的系统或电子设备一般都是合适的。
109.图9图示示例性系统的实施例。多处理器系统900是点对点互连系统,并且包括多个处理器,多个处理器包括经由点对点互连950耦合的第一处理器970和第二处理器980。在一些实施例中,第一处理器970和第二处理器980是同构的。在一些实施例中,第一处理器970和第二处理器980是异构的。
110.处理器970和980示出为分别包括集成存储器控制器(imc)单元电路972和982。处理器970还包括作为其互连控制器单元的一部分的点对点(p-p)接口976和978;类似地,第二处理器980包括p-p接口986和988。处理器970、980可以经由使用点对点(p-p)接口电路978、988的p-p互连950来交换信息。imc 972和982将处理器970、980耦合到相应的存储器,即存储器932和存储器934,这些存储器可以是本地附连到相应处理器的主存储器的部分。
111.处理器970、980可各自经由使用点对点接口电路976、994、986和998的各个p-p互连952和954与芯片组990交换信息。芯片组990可以任选地经由高性能接口992来与协处理器938交换信息。在一些实施例中,协处理器938是专用处理器,诸如例如,高吞吐量mic处理器、网络或通信处理器、压缩引擎、图形处理器、gpgpu、嵌入式处理器,等等。
112.共享高速缓存(未示出)可被包括在任一处理器970、980中,或在这两个处理器的外部但经由p-p互连与这些处理器连接,使得如果处理器被置于低功率模式,则任一个或这两个处理器的本地高速缓存信息可被存储在共享高速缓存中。
113.芯片组990可以经由接口996耦合到第一互连916。在一些实施例中,第一互连916
可以是外围组件互连(pci)互连或诸如pci快捷互连或另一i/o互连之类的互连。在一些实施例中,互连中的一个互连耦合到功率控制单元(pcu)917,功率控制单元917可以包括用于执行与处理器970、980和/或协处理器938有关的功率管理操作的电路、软件和/或固件。pcu 917将控制信息提供给电压调节器,以使电压调节器生成适当的经调节的电压。pcu 917还提供控制信息以控制所生成的操作电压。在各实施例中,pcu 917可包括用于执行基于硬件的功率管理的各种功率管理逻辑单元(电路)。此类功率管理可以完全由处理器控制(例如,由各种处理器硬件控制,并且其可以由工作负载和/或功率、热约束或其他处理器约束触发),并且/或者功率管理可以响应于外部源(诸如,平台或管理功率源或系统软件)而被执行。
114.pcu 917被图示为作为与处理器970和/或处理器980分开的逻辑存在。在其他情形下,pcu 917可以在处理器970或980的核中的给定的一个或多个核(未示出)上执行。在一些情况下,可将pcu 917实现为被配置成用于执行其自身的专用功率管理代码(有时被称为p代码)的(专用的或通用的)微控制器或其他控制逻辑。在另外的其他实施例中,将由pcu 917执行的功率管理操作可在处理器外部实现,诸如,通过分开的功率管理集成电路(pmic)或处理器外部的另一组件的方式。在另外的其他实施例中,将由pcu 917执行的功率管理操作可在bios或其他系统软件内实现。
115.各种i/o设备914可连同互连(总线)桥918耦合至第一互连916,互连桥918将第一互连916耦合至第二互连920。在一些实施例中,诸如协处理器、高吞吐量mic处理器、gpgpu、加速器(诸如例如,图形加速器或数字信号处理(dsp)单元)、现场可编程门阵列(fpga)或任何其他处理器的一个或多个附加处理器915耦合到第一互连916。在一些实施例中,第二互连920可以是低引脚数(lpc)互连。各种设备可以耦合到第二互连920,包括例如,键盘和/或鼠标922、通信设备927和存储单元电路928。在一些实施例中,存储单元电路928可以是可以包括指令/代码和数据930的盘驱动器或其他大容量存储设备。此外,音频i/o 924可被耦合至第二互连920。注意,与上述点对点架构不同的其他架构是可能的。例如,代替点对点架构,诸如多处理器系统900之类的系统可以实现多分支互连或其他此类架构。示例性核架构、处理器和计算机架构
116.处理器核能以不同方式、出于不同的目的、在不同的处理器中实现。例如,此类核的实现方式可以包括:1)旨在用于通用计算的通用有序核;2)旨在用于通用计算的高性能通用乱序核;3)旨在主要用于图形和/或科学(吞吐量)计算的专用核。不同处理器的实现方式可包括:1)cpu,其包括旨在用于通用计算的一个或多个通用有序核和/或旨在用于通用计算的一个或多个通用乱序核;以及2)协处理器,其包括旨在主要用于图形和/或科学(吞吐量)的一个或多个专用核。此类不同的处理器导致不同的计算机系统架构,这些计算机系统架构可包括:1)在与cpu分开的芯片上的协处理器;2)在与cpu相同的封装中但在分开的管芯上的协处理器;3)与cpu在相同管芯上的协处理器(在该情况下,此类协处理器有时被称为专用逻辑或被称为专用核,该专用逻辑诸如,集成图形和/或科学(吞吐量)逻辑);以及4)芯片上系统,其可以将所描述的cpu(有时被称为(多个)应用核或(多个)应用处理器)、以上描述的协处理器和附加功能包括在同一管芯上。接着描述示例性核架构,随后描述示例性处理器和计算机架构。
117.图10图示可具有多于一个的核、可具有集成存储器控制器、并且可具有集成图形
器件的处理器1000的实施例的框图。实线框图示具有单个核1002a、系统代理1010、一个或多个互连控制器单元电路的集合1016的处理器1000,而虚线框的任选增加图示具有多个核1002(a)-(n)、系统代理单元电路1010中的一个或多个集成存储器控制器单元电路的集合1014、和专用逻辑1008、以及一个或多个互连控制器单元电路的集合1016的替代处理器1000。注意,处理器1000可以是图9的处理器970或980、或协处理器938或915中的一个。
118.因此,处理器1000的不同实现方式可包括:1)cpu,其中专用逻辑1008是集成图形和/或科学(吞吐量)逻辑(其可包括一个或多个核,未示出),并且核1002(a)-(n)是一个或多个通用核(例如,通用有序核、通用乱序核、或这两者的组合);2)协处理器,其中核1002(a)-(n)是旨在主要用于图形和/或科学(吞吐量)的大量专用核;以及3)协处理器,其中核1002(a)-(n)是大量通用有序核。因此,处理器1000可以是通用处理器、协处理器或专用处理器,诸如例如,网络或通信处理器、压缩引擎、图形处理器、gpgpu(通用图形处理单元电路)、高吞吐量的集成众核(mic)协处理器(包括30个或更多核)、嵌入式处理器,等等。处理器可以被实现在一个或多个芯片上。处理器1000可以是一个或多个基板的一部分,和/或可使用多种工艺技术(诸如例如,bicmos、cmos、或nmos)中的任何技术被实现在一个或多个基板上。
119.存储器层级结构包括核1002(a)-(n)内的一个或多个级别的高速缓存单元电路1004(a)-(n)、一个或多个共享高速缓存单元电路的集合1006、以及耦合至集成存储器控制器单元电路的集合1014的外部存储器(未示出)。一个或多个共享高速缓存单元电路的集合1006可包括一个或多个中间级别的高速缓存(诸如第二级(l2)、第三级(l3)、第四级(l4))或其他级别的高速缓存(诸如末级高速缓存(llc))和/或以上各项的组合。尽管在一些实施例中,基于环的互连网络电路1012将专用逻辑1008(例如,集成图形逻辑)、共享高速缓存单元电路的集合1006以及系统代理单元电路1010互连,但替代实施例使用任何数量的公知技术来将这些单元互连。在一些实施例中,维持共享高速缓存单元电路1006和核1002(a)-(n)中的一个或多个之间的一致性。
120.在一些实施例中,核1002(a)-(n)中的一个或多个能够实现多线程化。系统代理单元电路1010包括协调和操作核1002(a)-(n)的那些组件。系统代理单元电路1010可包括例如功率控制单元(pcu)电路和/或显示单元电路(未示出)。pcu可以是对核1002(a)-(n)和/或专用逻辑1008(例如,集成图形逻辑)的功率状态进行调节所需的逻辑和组件,或可包括这些逻辑和组件。显示单元电路用于驱动一个或多个外部连接的显示器。
121.核1002(a)-(n)在架构指令集方面可以是同构的或异构的;即,核1002(a)-(n)中的两个或更多个核可能能够执行相同的指令集,而其他核可能能够执行该指令集的仅仅子集或不同的指令集。示例性核架构有序和乱序核框图
122.图11(a)是图示根据本发明的实施例的示例性有序流水线以及示例性寄存器重命名的乱序发布/执行流水线两者的框图。图11(b)是图示根据本发明的实施例的要包括在处理器中的有序架构核的示例性实施例和示例性的寄存器重命名的乱序发布/执行架构核两者的框图。图11(a)-图11(b)中的实线框图示有序流水线和有序核,而任选增加的虚线框图示寄存器重命名的、乱序发布/执行流水线和核。考虑到有序方面是乱序方面的子集,将描
述乱序方面。
123.在图11(a)中,处理器流水线1100包括取出级1102、可选的长度解码级1104、解码级1106、可选的分配级1108、可选的重命名级1110、调度(也称为分派或发布)级1112、可选的寄存器读取/存储器读取级1114、执行级1116、写回/存储器写入级1118、可选的异常处置级1122、以及可选的提交级1124。一个或多个操作可以在这些处理器流水线级中的每一级中执行。例如,在取出级1102期间,从指令存储器取出一条或多条指令,在解码级1106期间,可以对所取出的一条或多条指令进行解码,可以生成使用所转发的寄存器端口的地址(例如,加载存储单元(lsu)地址),并且可以执行分支转发(例如,立即数偏移或链接寄存器(lr))。在一个实施例中,解码级1106和寄存器读取/存储器读取级1114可以组合成一个流水线级。在一个实施例中,在执行级1116期间,可以执行经解码的指令,可以执行lsu地址/数据流水线到高级微控制器总线(ahb)接口,可以执行乘法和加法操作,可以执行具有分支结果的算术操作,等等。
124.作为示例,示例性寄存器重命名的乱序发布/执行核架构可如下所述地实现流水线1100:1)指令取出1138执行取出级1102和长度解码级1104;2)解码单元电路1140执行解码级1106;3)重命名/分配器单元电路1152执行分配级1108和重命名级1110;4)(多个)调度器单元电路1156执行调度级1112;5)(多个)物理寄存器堆单元电路1158和存储器单元电路1170执行寄存器读取/存储器读取级1114;执行集群1160执行执行级1116;6)存储器单元电路1170和(多个)物理寄存器堆单元电路1158执行写回/存储器写入级1118;7)各单元(单元电路)可牵涉到异常处置级1122;以及8)引退单元电路1154和(多个)物理寄存器堆单元电路1158执行提交级1124。
125.图11(b)示出处理器核1190,处理器核1190包括耦合到执行引擎单元电路1150的前端单元电路1130,并且两者耦合到存储器单元电路1170。核1190可以是精简指令集计算(risc)核、复杂指令集计算(cisc)核、超长指令字(vliw)核、或混合或替代的核类型。作为又一选项,核1190可以是专用核,诸如例如,网络或通信核、压缩引擎、协处理器核、通用计算图形处理单元(gpgpu)核、图形核,等等。
126.前端单元电路1130可包括耦合至指令高速缓存单元电路1134的分支预测单元电路1132,该指令高速缓存单元电路1134耦合至指令转换后备缓冲器(tlb)1136,该指令转换后备缓冲器1136耦合至指令取出单元电路1138,该指令取出单元电路1138耦合至解码单元电路1140。在一个实施例中,指令高速缓存单元电路1134被包括在存储器单元电路1170中,而不是在前端单元电路1130中。解码单元电路1140(或解码器)可对指令解码,并且生成从原始指令解码出的、或以其他方式反映原始指令的、或从原始指令导出的一个或多个微操作、微代码进入点、微指令、其他指令、或其他控制信号作为输出。解码单元电路1140可进一步包括地址生成单元电路(agu,未示出)。在一个实施例中,agu使用所转发的寄存器端口生成lsu地址,并且可以进一步执行分支转发(例如,立即数偏移分支转发、lr寄存器分支转发等)。解码单元电路1140可使用各种不同的机制来实现。合适机制的示例包括但不限于,查找表、硬件实现、可编程逻辑阵列(pla)、微代码只读存储器(rom)等。在一个实施例中,核1190包括存储用于某些宏指令的微代码的微代码rom(未示出)或其他介质(例如,在解码单元电路1140中,或以其他方式在前端单元电路1130内)。在一个实施例中,解码单元电路1140包括微操作(micro-op)或操作高速缓存(未示出)以保持/高速缓存在处理器流水线
1100的解码级或其他级期间生成的经解码的操作、微标签或微操作。解码单元电路1140可耦合到执行引擎单元电路1150中的重命名/分配器单元电路1152。
127.执行引擎电路1150包括重命名/分配器单元电路1152,该重命名/分配器单元电路1152耦合到引退单元电路1154和一个或多个调度器电路的集合1156。(多个)调度器电路1156表示任意数量的不同调度器,包括预留站、中央指令窗口等。在一些实施例中,(多个)调度器电路1156可以包括算术逻辑单元(alu)调度器/调度电路、alu队列、算术生成单元(agu)调度器/调度电路、agu队列,等等。(多个)调度器电路1156耦合到(多个)物理寄存器堆电路1158。(多个)物理寄存器堆电路1158中的每个物理寄存器堆电路表示一个或多个物理寄存器堆,其中不同的物理寄存器堆存储一种或多种不同的数据类型,诸如,标量整数、标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点、状态(例如,作为要执行的下一条指令的地址的指令指针)等。在一个实施例中,(多个)物理寄存器堆单元电路1158包括向量寄存器单元电路、写掩码寄存器单元电路和标量寄存器单元电路。这些寄存器单元可以提供架构向量寄存器、向量掩码寄存器、通用寄存器等。(多个)物理寄存器堆单元电路1158由引退单元电路1154(也称为引退队列)重叠,以图示可实现寄存器重命名和乱序执行的各种方式(例如,使用(多个)重排序缓冲器(rob)和(多个)引退寄存器堆;使用(多个)未来文件、(多个)历史缓冲器和(多个)引退寄存器堆;使用寄存器映射和寄存器池,等等)。引退单元电路1154和(多个)物理寄存器堆电路1158耦合到(多个)执行集群1160。(多个)执行集群1160包括一个或多个执行单元电路的集合1162以及一个或多个存储器访问电路的集合1164。执行单元电路1162可执行各种算术、逻辑、浮点或其他类型的操作(例如,移位、加法、减法、乘法)并可对各种数据类型(例如,标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点)执行。尽管一些实施例可以包括专用于特定功能或功能集合的多个执行单元或执行单元电路,但是其他实施例可包括仅一个执行单元电路或全都执行所有功能的多个执行单元/执行单元电路。(多个)调度器电路1156、(多个)物理寄存器堆单元电路1158和(多个)执行集群1160示出为可能有多个,因为某些实施例为某些类型的数据/操作创建分开的流水线(例如,标量整数流水线、标量浮点/紧缩整数/紧缩浮点/向量整数/向量浮点流水线,和/或各自具有其自身的调度器电路、(多个)物理寄存器堆单元电路和/或执行集群的存储器访问流水线——并且在分开的存储器访问流水线的情况下,实现其中仅该流水线的执行集群具有(多个)存储器访问单元电路1164的某些实施例)。还应当理解,在使用分开的流水线的情况下,这些流水线中的一个或多个可以是乱序发布/执行,并且其余流水线可以是有序的。
128.在一些实施例中,执行引擎单元电路1150可以执行加载存储单元(lsu)地址/数据流水线到高级微控制器总线(ahb)接口(未示出)、以及地址分阶段和写回、数据分阶段加载、存储和分支。
129.存储器访问电路的集合1164耦合到存储器单元电路1170,该存储器单元电路1170包括数据tlb单元电路1172,该数据tlb单元电路1172耦合到数据高速缓存电路1174,该数据高速缓存电路1174耦合到第二级(l2)高速缓存电路1176。在一个示例性实施例中,存储器访问单元电路1164可包括加载单元电路、存储地址单元电路和存储数据单元电路,其中的每一个均耦合至存储器单元电路1170中的数据tlb电路1172。指令高速缓存电路1134还耦合到存储器单元电路1170中的第二级(l2)高速缓存单元电路1176。在一个实施例中,指令高速缓存1134和数据高速缓存1174被组合为l2高速缓存单元电路1176、第三级(l3)高速
缓存单元电路(未示出)和/或主存储器中的单个指令和数据高速缓存(未示出)。l2高速缓存单元电路1176耦合到一个或多个其他级别的高速缓存,并最终耦合到主存储器。
130.核1190可支持一个或多个指令集(例如,x86指令集(具有已与较新版本一起添加的一些扩展);mips指令集;arm指令集(具有诸如neon的任选的附加扩展)),其中包括本文中描述的(多条)指令。在一个实施例中,核1190包括用于支持紧缩数据指令集扩展(例如,avx1、avx2)的逻辑,由此允许使用紧缩数据来执行由许多多媒体应用使用的操作。示例性(多个)执行单元电路
131.图12图示(多个)执行单元电路的实施例,诸如图11(b)的(多个)执行单元电路1162。如图所示,(多个)执行单元电路1162可以包括一个或多个alu电路1201、向量/simd单元电路1203、加载/存储单元电路1205、和/或分支/跳转单元电路1207。alu电路1201执行整数算术和/或布尔运算。向量/simd单元电路1203对紧缩数据(诸如simd/向量寄存器)执行向量/simd操作。加载/存储单元电路1205执行加载和存储指令,以将数据从存储器加载到寄存器中或将数据从寄存器存储到存储器。加载/存储单元电路1205也可以生成地址。分支/跳转单元电路1207取决于指令而引起到存储器地址的分支或跳转。浮点单元(fpu)电路1209执行浮点算术。(多个)执行单元电路1162的宽度取决于实施例而变化,并且范围可以从16位到1024位。在一些实施例中,两个或更多个较小的执行单元在逻辑上被组合以形成较大的执行单元(例如,两个128位执行单元在逻辑上被组合以形成256位执行单元)。示例性寄存器架构
132.图13是根据一些实施例的寄存器架构1300的框图。如图所示,存在向量/simd寄存器1310,其宽度从128位到1024位变化。在一些实施例中,向量/simd寄存器1310在物理上是512位的,并且取决于映射,只有较低位中的一些位被使用。例如,在一些实施例中,向量/simd寄存器1310是512位的zmm寄存器:较低的256位用于ymm寄存器,并且较低的128位用于xmm寄存器。由此,存在寄存器的叠加。在一些实施例中,向量长度字段在最大长度与一个或多个其他较短长度之间进行选择,其中每个此类较短长度是前一长度的一半长度。标量操作是对zmm/ymm/xmm寄存器中的最低阶数据元素位置执行的操作;取决于实施例,较高阶数据元素位置保持与在指令之前相同或者被归零。
133.在一些实施例中,寄存器架构1300包括写掩码/断言寄存器1315。例如,在一些实施例中,存在8个写掩码/断言寄存器(有时称为k0到k7),它们的尺寸各自为16位、32位、64位或128位。写掩码/断言寄存器1315可以允许合并(例如,允许目的地中的任何元素集合在任何操作的执行期间免于更新)和/或归零(例如,归零向量掩码允许目的地中的任何元素集合在任何操作的执行期间被归零)。在一些实施例中,给定的写掩码/断言寄存器1315中的每个数据元素位置对应于目的地的数据元素位置。在其他实施例中,写掩码/断言寄存器1315是可缩放的,并由给定向量元素的设定数量个启用位组成(例如,每个64位向量元素有8个启用位)。
134.寄存器架构1300包括多个通用寄存器1325。这些寄存器可以是16位、32位、64位等,并且可用于标量操作。在一些实施例中,这些寄存器通过名称rax、rbx、rcx、rdx、rbp、rsi、rdi、rsp以及r8到r15来引用。
135.在一些实施例中,寄存器架构1300包括标量浮点寄存器1345,标量浮点寄存器1345用于使用x87指令集扩展的对32/64/80位浮点数据的标量浮点操作,或者作为mmx寄存
器对64位紧缩整数数据执行操作,以及用于为在mmx和xmm寄存器之间执行的一些操作保存操作数。
136.一个或多个标志寄存器1340(例如,eflags,rflags等)存储用于算术、比较和系统操作的状态和控制信息。例如,一个或多个标志寄存器1340可以存储条件代码信息,诸如进位、奇偶性、辅助进位、零、符号和溢出。在一些实施例中,一个或多个标志寄存器1340被称为程序状态和控制寄存器。
137.段寄存器1320包含用于访问存储器的段点。在一些实施例中,这些寄存器通过名称cs、ds、ss、es、fs和gs来引用。
138.机器专用寄存器(msr)1335控制和报告处理器性能。大多数msr 1335处置与系统有关的功能,并且不可由应用程序访问。机器校验寄存器1360由控制、状态和错误报告msr组成,这些msr用于检测和报告硬件错误。
139.一个或多个指令指针寄存器1330存储指令指针值。(多个)控制寄存器1355(例如,cr0-cr4)确定处理器(例如,处理器970、980、938、915和/或1000)的操作模式和当前执行的任务的特性。调试寄存器1350控制并允许监控处理器或核的调试操作。
140.存储器管理寄存器1365指定用于受保护模式存储器管理的数据结构的位置。这些寄存器可以包括gdtr、idrt、任务寄存器和ldtr寄存器。
141.本发明的替代实施例可以使用更宽的或更窄的寄存器。另外,本发明的替代实施例可以使用更多、更少或不同的寄存器堆和寄存器。指令集
142.指令集架构(isa)可包括一种或多种指令格式。给定的指令格式可定义各种字段(例如,位的数量、位的位置)以指定要执行的操作(例如,操作码)以及将对其执行该操作的(多个)操作数和/或(多个)其他数据字段(例如,掩码),等等。通过指令模板(或子格式)的定义来进一步分解一些指令格式。例如,可将给定指令格式的指令模板定义为具有该指令格式的字段(所包括的字段通常按照相同顺序,但是至少一些字段因为较少的字段被包括而具有不同的位的位置)的不同子集,和/或定义为具有以不同方式进行解释的给定字段。由此,isa的每一条指令使用给定的指令格式(并且如果被定义,则按照该指令格式的指令模板中的给定的一个指令模板)来表达,并包括用于指定操作和操作数的字段。例如,示例性add(加法)指令具有特定的操作码和指令格式,该特定的指令格式包括用于指定该操作码的操作码字段和用于选择操作数(源1/目的地以及源2)的操作数字段;并且该add指令在指令流中出现将使得在操作数字段中具有选择特定操作数的特定的内容。示例性指令格式
143.本文中所描述的(多条)指令的实施例能以不同格式来具体化。此外,在下文中详述示例性系统、架构和流水线。(多条)指令的实施例可在此类系统、架构和流水线上执行,但是不限于详述的那些系统、架构和流水线。
144.图14图示指令格式的实施例。如图所示,指令可以包括多个组分,包括但不限于用于以下各项的一个或多个字段:一个或多个前缀1401,操作码1403,寻址信息1405(例如,寄存器标识符、存储器寻址信息等),位移值1407,和/或立即数1409。注意,一些指令利用格式中的一些或全部字段,而其他指令可能仅使用用于操作码1403的字段。在一些实施例中,图示的顺序是这些字段要被编码的顺序,然而,应当理解,在其他实施例中,这些字段可以以
不同的顺序被编码、组合等。
145.(多个)前缀字段1401在使用时对指令进行修改。在一些实施例中,一个或多个前缀用于重复串指令(例如,0xf0、0xf2、0xf3等),提供分段超控(例如,0x2e、0x36、0x3e、0x26、0x64、0x65、0x2e、0x3e等),执行总线锁定操作,和/或改变操作数(例如,0x66)和地址尺寸(例如,0x67)。某些指令需要强制性前缀(例如,0x66、0xf2、0xf3等)。这些前缀中的某些前缀可能被认为是“传统”前缀。在本文中详述其一个或多个示例的其他前缀指示和/或提供进一步的能力,诸如指定特定寄存器等。其他前缀通常在“传统”前缀之后。
146.操作码字段1403用于至少部分地定义在对指令的解码时要执行的操作。在一些实施例中,在操作码字段1403中编码的主操作码的长度为1、2或3字节。在其他实施例中,主操作码可以是不同的长度。附加的3位操作码字段有时被编码在另一个字段中。
147.寻址字段1405用于寻址指令的一个或多个操作数,诸如存储器或一个或多个寄存器中的位置。图15图示寻址字段1405的实施例。在该图示中,示出可选的mod r/m字节1502和可选的比例、索引、基址(sib)字节1504。mod r/m字节1502和sib字节1504用于编码指令的多达两个操作数,其中每一个是直接的寄存器或有效的存储器地址。注意,这些字段中的每一个都是可选的,因为并非所有的指令都包括这些字段中的一个或多个。mod r/m字节1502包括mod字段1542、寄存器字段1544、和r/m字段1546。
148.mod字段1542的内容将存储器访问模式和非存储器访问模式区分开。在一些实施例中,当mod字段1542的值为b11时,利用寄存器直接寻址模式,否则使用寄存器间接寻址。
149.寄存器字段1544可以编码目的地寄存器操作数或源寄存器操作数,或者可以编码操作码扩展而不用于编码任何指令操作数。寄存器索引字段1544的内容直接地或通过地址生成来指定源或目的地操作数的位置(在寄存器中或在存储器中)。在一些实施例中,寄存器字段1544利用来自前缀(例如,前缀1401)的附加位来补充以允许更大的寻址。
150.r/m字段1546可用于编码引用存储器地址的指令操作数,或者可用于编码目的地寄存器操作数或源寄存器操作数。注意,在一些实施例中,r/m字段1546可与mod字段1542组合以指示寻址模式。
151.sib字节1504包括比例字段1552、索引字段1554和基址字段1556以用于地址的生成。比例字段1552指示比例因数。索引字段1554指定要使用的索引寄存器。在一些实施例中,索引字段1554利用来自前缀(例如,前缀1401)的附加位来补充以允许更大的寻址。基址字段1556指定要使用的基址寄存器。在一些实施例中,基址字段1556利用来自前缀(例如,前缀1401)的附加位来补充以允许更大的寻址。在实践中,比例字段1552的内容允许对索引字段1554的内容进行缩放以用于存储器地址生成(例如,用于使用2
比例
*索引+基址的地址生成)。
152.一些寻址形式利用位移值来生成存储器地址。例如,可以根据2
比例
*索引+基址+位移、索引*比例+位移、r/m+位移、指令指针(rip/eip)+位移、寄存器+位移等生成存储器地址。位移可以是1字节、2字节、4字节等的值。在一些实施例中,位移字段1407提供该值。此外,在一些实施例中,在寻址字段1405的mod字段中编码位移因数使用,其指示压缩的位移方案,对于该方案,通过将disp8与基于向量长度、b的值和指令的输入元素尺寸确定的比例因数n相乘来计算位移值。位移值被存储在位移字段1407中。
153.在一些实施例中,立即数字段1409指定指令的立即数。立即数可以被编码为1字节
的值、2字节的值、4字节的值,等等。
154.图16图示第一前缀1401(a)的实施例。在一些实施例中,第一前缀1401(a)是rex前缀的实施例。使用该前缀的指令可以指定通用寄存器、64位紧缩数据寄存器(例如,单指令多数据(simd)寄存器或向量寄存器)、和/或控制寄存器和调试寄存器(例如,cr8-cr15和dr8-dr15)。
155.取决于格式,使用第一前缀1401(a)的指令可以使用3位字段指定多达三个寄存器:1)使用mod r/m字节1502的reg字段1544和r/m字段1546;2)使用mod r/m字节1502与sib字节1504,包括使用reg字段1544和基址字段1556和索引字段1554;或者3)使用操作码的寄存器字段。
156.在第一前缀1401(a)中,位位置7:4被设置为0100。位位置3(w)可用于确定操作数尺寸,但可能不能单独确定操作数宽度。由此,当w=0时,操作数尺寸由代码段描述符(cs.d)确定,并且当w=1时,操作数尺寸为64位。
157.请注意,添加另一个位允许寻址16(24)个寄存器,而单独的mod r/m reg字段1544和mod r/m r/m字段1546各自只能寻址8个寄存器。
158.在第一前缀1401(a)中,位位置2(r)可以是mod r/m reg字段1544的扩展,并且当该字段编码通用寄存器、64位紧缩数据寄存器(例如,sse寄存器)、或控制或调试寄存器时,可用于修改modr/m reg字段1544。当mod r/m字节1502指定其他寄存器或定义扩展操作码时,r被忽略。
159.位位置1(x)x位可以修改sib字节索引字段1554。
160.位位置b(b)b可以修改mod r/m r/m字段1546或sib字节基址字段1556中的基址;或者其可以修改用于访问通用寄存器(例如,通用寄存器1325)的操作码寄存器字段。
161.图17(a)-图17(d)图示如何使用第一前缀1401(a)的r、x和b字段的实施例。图17(a)图示当sib字节1504不用于存储器寻址时,来自第一前缀1401(a)的r和b用于扩展mod r/m字节1502的reg字段1544和r/m字段1546。图17(b)图示当sib字节1504未被使用时(寄存器-寄存器寻址),来自第一前缀1401(a)的r和b用于扩展mod r/m字节1502的reg字段1544和r/m字段1546。图17(c)图示当sib字节1504用于存储器寻址时,来自第一前缀1401(a)的r、x和b用于扩展mod r/m字节1502的reg字段1544以及索引字段1554和基址字段1556。图17(d)图示当寄存器被编码在操作码1403中时,来自第一前缀1401(a)的b用于扩展mod r/m字节1502的reg字段1544。
162.图18(a)-图18(b)图示第二前缀1401(b)的实施例。在一些实施例中,第二前缀1401(b)是vex前缀的实施例。第二前缀1401(b)编码允许指令具有多于两个操作数,并允许simd向量寄存器(例如,向量/simd寄存器1310)长于64位(例如,128位和256位)。第二前缀1401(b)的使用提供了三操作数(或更多操作数)的语法。例如,先前的两操作数指令执行诸如a=a+b之类的操作,其覆写源操作数。第二前缀1401(b)的使用使操作数能执行非破坏性操作,诸如a=b+c。
163.在一些实施例中,第二前缀1401(b)有两种形式——两字节形式和三字节形式。两字节的第二前缀1401(b)主要用于128位、标量和一些256位指令;而三字节的第二前缀1401(b)提供了对第一前缀1401(a)和3字节操作码指令的紧凑替换。
164.图18(a)图示两字节形式的第二前缀1401(b)的实施例。在一个示例中,格式字段
1801(字节0 1803)包含值c5h。在一个示例中,字节1 1805包括位[7]中的“r”值。该值是第一前缀1401(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。
[0165]
使用该前缀的指令可以使用mod r/m r/m字段1546来编码引用存储器地址的指令操作数,或者编码目的地寄存器操作数或源寄存器操作数。
[0166]
使用该前缀的指令可以使用mod r/m reg字段1544来编码目的地寄存器操作数或源寄存器操作数,被视为操作码扩展并且不用于编码任何指令操作数。
[0167]
对于支持四个操作数的指令语法,vvvv、mod r/m r/m字段1546和mod r/m reg字段1544编码四个操作数中的三个操作数。然后,立即数1409的位[7:4]用于编码第三源寄存器操作数。
[0168]
图18(b)图示三字节形式的第二前缀1401(b)的实施例。在一个示例中,格式字段1811(字节0 1813)包含值c4h。字节1 1815包括位[7:5]中的“r”、“x”和“b”,它们是第一前缀1401(a)的相同值的补码。字节1 1815的位[4:0](示出为mmmmm)包括用于根据需要编码一个或多个隐含前导操作码字节的内容。例如,00001暗示0fh前导操作码,00010暗示0f38h前导操作码,00011暗示0f3ah前导操作码,等等。
[0169]
字节2 1817的位[7]与第一前缀1401(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。
[0170]
使用该前缀的指令可以使用mod r/m r/m字段1546来编码引用存储器地址的指令操作数,或者编码目的地寄存器操作数或源寄存器操作数。
[0171]
使用该前缀的指令可以使用mod r/m reg字段1544来编码目的地寄存器操作数或源寄存器操作数,被视为操作码扩展并且不用于编码任何指令操作数。
[0172]
对于支持四个操作数的指令语法,vvvv、mod r/m r/m字段1546和mod r/m reg字段1544编码四个操作数中的三个操作数。然后,立即数1409的位[7:4]用于编码第三源寄存器操作数。
[0173]
图19图示第三前缀1401(c)的实施例。在一些实施例中,第一前缀1401(a)是evex前缀的实施例。第三前缀1401(c)是四字节前缀。
[0174]
第三前缀1401(c)可以以64位模式编码32个向量寄存器(例如,128位、256位和512位寄存器)。在一些实施例中,利用写掩码/操作掩码(参见前面的图中对寄存器的讨论,诸如图13)或断言的指令利用该前缀。操作掩码寄存器允许条件处理或选择控制。使用第二前缀1401(b)来编码操作掩码指令,其源/目的地操作数是操作掩码寄存器,并将操作掩码寄
存器的内容视为单个值。
[0175]
第三前缀1401(c)可以编码专用于指令类的功能(例如,具有“加载+操作”语义的紧缩指令可以支持嵌入式广播功能,具有舍入语义的浮点指令可以支持静态舍入功能,具有非舍入算术语义的浮点指令可以支持“抑制所有异常”功能,等等)。
[0176]
第三前缀1401(c)的第一字节是格式字段1911,在一个示例中,格式字段1911的值为62h。后续的字节被称为有效载荷字节1915-1919,并且共同形成24位值p[23:0],从而以一个或多个字段的形式提供特定能力(本文中详述)。
[0177]
在一些实施例中,有效载荷字节1919的p[1:0]与低两个mmmmm位相同。在一些实施例中,p[3:2]被保留。位p[4](r’)在与p[7]和modr/m reg字段1544组合时允许对高16个向量寄存器集合的访问。当不需要sib类型寻址时,p[6]也可以提供对高16个向量寄存器的访问。p[7:5]由r、x和b组成,它们是用于向量寄存器、通用寄存器、存储器寻址的操作数指定符修饰符位,并且当与mod r/m寄存器字段1544和mod r/m r/m字段1546组合时,允许对低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。
[0178]
p[15]类似于第一前缀1401(a)和第二前缀1411(b)的w,并且可以用作操作码扩展位或操作数尺寸提升。
[0179]
p[18:16]指定操作掩码(写掩码)寄存器(例如,写掩码/断言寄存器1315)中的寄存器的索引。在本发明的一个实施例中,特定值aaa=000具有暗示没有操作掩码用于特定指令的特殊行为(这能以各种方式实现,包括使用硬连线为全部为一的操作掩码或者绕过掩码硬件的硬件来实现)。当合并时,向量掩码允许在执行(由基础操作和扩充操作指定的)任何操作期间保护目的地中的任何元素集免于更新;在另一实施例中,保持其中对应掩码位具有0的目的地的每一元素的旧值。相反,当归零时,向量掩码允许在执行(由基础操作和扩充操作指定的)任何操作期间使目的地中的任何元素集归零;在一个实施例中,目的地的元素在对应掩码位具有0值时被设置为0。该功能的子集是控制正在被执行的操作的向量长度的能力(即,从第一个到最后一个正在被修改的元素的跨度);然而,被修改的元素不一定要是连续的。由此,操作掩码字段允许部分向量操作,包括加载、存储、算术、逻辑等。尽管描述了其中操作掩码字段的内容选择多个操作掩码寄存器中的包含要使用的操作掩码的一个操作掩码寄存器(并且由此操作掩码字段的内容间接地标识要执行的掩码)的本发明的实施例,但是替代实施例相反或另外允许掩码写字段的内容直接地指定要执行的掩码。
[0180]
p[19]可以与p[14:11]组合,以非破坏性源语法编码第二源向量寄存器,其可以使用p[19]访问高16个向量寄存器。p[20]编码多种功能,其在不同类别的指令之间有所不同,并且可以影响向量长度/舍入控制指定符字段(p[22:21])的含义。p[23]指示对合并-写掩码的支持(例如,当设置为0时)或对归零和合并-写掩码的支持(例如,当设置为1时)。
[0181]
使用第三前缀1401(c)的指令中的对寄存器的编码的示例性实施例在下面的表中详述。
表1:64位模式下的32寄存器支持表2:32位模式下的编码寄存器指定符表3:操作掩码寄存器指定符编码
[0182]
可将程序代码应用于输入指令以执行本文描述的功能并生成输出信息。可以按已
知方式将输出信息应用于一个或多个输出设备。为了本技术的目的,处理系统包括具有处理器的任何系统,该处理器诸如例如,数字信号处理器(dsp)、微控制器、专用集成电路(asic)或微处理器。
[0183]
程序代码可以用高级的面向过程的编程语言或面向对象的编程语言来实现,以便与处理系统通信。如果需要,也可用汇编语言或机器语言来实现程序代码。事实上,本文中描述的机制不限于任何特定的编程语言的范围。在任何情况下,该语言可以是编译语言或解释语言。
[0184]
本文公开的机制的各实施例可以被实现在硬件、软件、固件或此类实现方式的组合中。本发明的实施例可实现为在可编程系统上执行的计算机程序或程序代码,该可编程系统包括至少一个处理器、存储系统(包括易失性和非易失性存储器和/或存储元件)、至少一个输入设备以及至少一个输出设备。
[0185]
至少一个实施例的一个或多个方面可以由存储在机器可读介质上的表示性指令来实现,该指令表示处理器中的各种逻辑,该指令在被机器读取时使得该机器制造用于执行本文中所述的技术的逻辑。被称为“ip核”的此类表示可以被存储在有形的机器可读介质上,并可被供应给各个客户或生产设施以加载到实际制造该逻辑或处理器的制造机器中。
[0186]
此类机器可读存储介质可以包括但不限于通过机器或设备制造或形成的制品的非暂态、有形布置,其包括存储介质,诸如硬盘;任何其他类型的盘,包括软盘、光盘、紧致盘只读存储器(cd-rom)、可重写紧致盘(cd-rw)以及磁光盘;半导体器件,诸如,只读存储器(rom)、诸如动态随机存取存储器(dram)和静态随机存取存储器(sram)的随机存取存储器(ram)、可擦除可编程只读存储器(eprom)、闪存、电可擦除可编程只读存储器(eeprom);相变存储器(pcm);磁卡或光卡;或适于存储电子指令的任何其他类型的介质。
[0187]
因此,本发明的实施例还包括非暂态有形机器可读介质,该介质包含指令或包含设计数据,诸如硬件描述语言(hdl),它定义本文中描述的结构、电路、装置、处理器和/或系统特征。这些实施例也可被称为程序产品。仿真(包括二进制变换、代码变形等)
[0188]
在一些情况下,指令转换器可用于将指令从源指令集转换至目标指令集。例如,指令转换器可以将指令变换(例如,使用静态二进制变换、包括动态编译的动态二进制变换)、变形、仿真或以其他方式转换成要由核处理的一条或多条其他指令。指令转换器可以用软件、硬件、固件、或其组合来实现。指令转换器可以在处理器上、在处理器外、或者部分在处理器上且部分在处理器外。
[0189]
图20图示根据本发明的实施例的对照使用软件指令转换器将源指令集中的二进制指令转换成目标指令集中的二进制指令的框图。在所图示的实施例中,指令转换器是软件指令转换器,但替代地,该指令转换器可以用软件、固件、硬件或其各种组合来实现。图20示出可使用第一isa编译器2004来编译高级语言2002形式的程序,以生成可由具有至少一个第一指令集核的处理器2016原生执行的第一isa二进制代码2006。具有至少一个第一isa指令集核的处理器2016表示任何处理器,这些处理器能通过兼容地执行或以其它方式处理以下内容来执行与具有至少一个第一isa指令集核的处理器基本相同的功能:1)第一isa指令集核的指令集的实质部分,或2)目标为在具有至少一个第一isa指令集核的英特尔处理器上运行的应用或其他软件的目标代码版本,以便取得与具有至少一个第一isa
指令集核的处理器基本相同的结果。第一isa编译器2004表示可用于生成第一isa二进制代码2006(例如,目标代码)的编译器,该第一isa二进制代码2006能够通过附加的链接处理或无需附加的链接处理而在具有至少一个第一isa指令集核的处理器2016上被执行。类似地,图20示出可使用替代的指令集编译器2008来编译高级语言2002形式的程序,以生成可由不具有第一isa指令集核的处理器2014原生执行的替代的指令集二进制代码2010。指令转换器2012用于将第一isa二进制代码2006转换成可以由不具有第一isa指令集核的处理器2014原生执行的代码。该转换后的代码不大可能与替代的指令集二进制代码2010相同,因为能够这样做的指令转换器难以制造;然而,转换后的代码将完成一般操作,并且由来自替代指令集的指令构成。因此,指令转换器2012通过仿真、模拟或任何其他过程来表示允许不具有第一isa指令集处理器或核的处理器或其他电子设备执行第一isa二进制代码2006的软件、固件、硬件或其组合。
[0190]
示例性实施例包括但不限于:1.一种装置,包括:远存储器,用于被用作易失性存储器;远存储器控制器,用于接收来自处理器的近存储器的请求,所述远存储器控制器用于:确定所接收的请求的请求类型;以及对于读取请求,至少确定快速归零存储器指示是否被设置;以及当指示被设置时,用于将来自远存储器的所读取的数据与消息认证码(mac)一起发送至目的地;以及当指示未被设置时,用于对所述所读取的数据进行加密,生成mac,并且将所述所读取的数据和所生成的mac发送至目的地。2.如示例1所述的装置,其中,所述远存储器控制器包括密钥数据结构,所述密钥数据结构用于存储用于对所述所读取的数据进行加密的加密密钥。3.如示例1所述的装置,进一步包括:快速归零存储器逻辑,用于使所述远存储器中的数据归零。4.如示例1所述的装置,其中,所述远存储器是充当易失性存储器的非易失性存储器。5.如示例1所述的装置,其中,所述远存储器控制器用于生成用于在对所述所读取的数据的加密中使用的微调。6.如示例5所述的装置,其中,所述微调基于所述请求的密钥标识符而被生成。7.如示例6所述的装置,其中,所述请求的所述密钥标识符用于被缓冲在所述远存储器控制器中。8.如示例1所述的装置,其中,所述远存储器控制器用于:对于写入请求,将所述写入请求的数据发送至远存储器而不执行加密或mac生成。9.如示例1所述的装置,进一步包括:处理器;以及近存储器,所述近存储器接近所述处理器并且在所述处理器与所述远存储器之间。10.如示例9所述的装置,其中,所述处理器和所述近存储器是芯片上系统的一部
分。11.如示例9所述的装置,其中,所述近存储器是随机存取存储器。12.如示例1所述的装置,其中,所述远存储器是3d交叉点存储器。13.一种装置,包括:处理器核;远存储器,用于被用作所述处理器核的易失性存储器;远存储器控制器,用于接收来自所述处理器核的近存储器的请求,所述远存储器控制器用于:确定所接收的请求的请求类型;以及对于读取请求,至少确定快速归零存储器指示是否被设置;以及当指示被设置时,用于将来自远存储器的所读取的数据与消息认证码(mac)一起发送至目的地;以及当指示未被设置时,用于对所述所读取的数据进行加密,生成mac,并且将经加密的所读取的数据和所生成的mac发送至目的地。14.如示例13所述的装置,其中,所述远存储器控制器包括密钥数据结构,所述密钥数据结构用于存储用于对所述所读取的数据进行加密的加密密钥。15.如示例13所述的装置,进一步包括:快速归零存储器逻辑,用于使所述远存储器中的数据归零。16.如示例13所述的装置,其中,所述远存储器是充当易失性存储器的非易失性存储器。17.如示例13所述的装置,其中,所述远存储器控制器用于生成用于在对所述所读取的数据的加密中使用的微调。18.如示例17所述的装置,其中,所述微调基于所述请求的密钥标识符而被生成。19.如示例18所述的装置,其中,所述请求的所述密钥标识符用于被缓冲在所述远存储器控制器中。20.如示例13所述的装置,其中,所述远存储器控制器用于:对于写入请求,将所述写入请求的数据发送至远存储器而不执行加密或mac生成。
[0191]
对“一个实施例”、“实施例”、“示例实施例”等的引用指示所描述的实施例可包括特定的特征、结构或特性,但是每个实施例可以不一定包括该特定的特征、结构或特性。而且,此类短语不一定是指同一实施例。此外,当结合实施例描述特定的特征、结构或特性时,认为结合无论是否被明确描述的其他实施例而影响此类特征、结构或特性是在本领域技术人员的知识范围之内的。
[0192]
此外,在上文描述的各实施例中,除非另外专门指出,否则,诸如短语“a、b或c中的至少一个”之类的分隔语言旨在被理解为意味着a、b、或c、或其任何组合(例如,a、b、和/或c)。由此,分隔语言不旨在也不应当被理解为暗示给定的实施例要求a中的至少一个、b中的至少一个或c中的至少一个各自都存在。
[0193]
因此,说明书和附图应被认为是说明性而非限制性意义的。然而,将显而易见的是,可对这些实现方式作出各种修改和改变,而不背离如权利要求中所述的本公开的更宽泛的精神和范围。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1