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

加固寄存器防范推测漏洞的制作方法

2022-07-02 08:09:57 来源:中国专利 TAG:


1.本发明领域概括而言涉及计算机,更具体而言,涉及计算机系统安全性。


背景技术:

2.计算机系统可能容易受到对手获得机密、私密或秘密信息的尝试的影响。例如,诸如mds(microarchitectural data sampling,微架构数据采样)、spectre和meltdown之类的攻击,利用处理器的推测性和无序执行能力,以通过边通道分析来非法读取数据。


技术实现要素:

3.根据本技术的一方面,提供了一种用于动态地缓解推测漏洞的装置,包括:解码电路,用于对寄存器加固指令进行解码,该寄存器加固指令用于缓解对于推测性执行攻击的漏洞;以及与所述解码电路相耦合的执行电路,该执行电路将响应于所述寄存器加固指令而被加固。
4.根据本技术的另一方面,提供了一种用于动态地缓解推测漏洞的方法,包括:由处理器对寄存器加固指令进行解码,所述寄存器加固指令用于缓解对于推测性执行攻击的漏洞;并且响应于所述寄存器加固指令而对所述处理器中的执行电路进行加固。
5.根据本技术的又一方面,提供了一种非暂态机器可读介质,存储多个指令,包括第一指令和第二指令,其中机器对所述多个指令的执行使得所述机器执行一种用于动态地缓解推测漏洞的方法,该方法包括:响应于所述第一指令对所述机器中的执行电路进行加固,以缓解对于推测性执行攻击的漏洞;阻止响应于所述第二指令要执行的推测性操作使用寄存器的内容。
附图说明
6.在附图中以示例而非限制方式图示了本发明,附图中相似的标记指示类似的要素,并且其中:
7.图1a图示了根据实施例的用于缓解推测漏洞(speculation vulnerabilities)的系统;
8.图1b图示了根据实施例的用于缓解推测漏洞的方法;
9.图1c图示了根据实施例的用于缓解推测漏洞的方法;
10.图1d图示了根据实施例的用于缓解推测漏洞的方法;
11.图2a图示了根据实施例创建的存储器访问拓扑图;
12.图2b图示了根据实施例的用于访问间离(distancing)的硬件;
13.图2c图示了根据实施例的访问间离的方法;
14.图3a图示了根据实施例的用于基于混合密钥的web浏览的系统;
15.图3b图示了根据实施例的用于基于混合密钥的web浏览的方法;
16.图4a是图示出根据实施例的通用向量友好指令格式及其a类指令模板的框图;
17.图4b是图示出根据实施例的通用向量友好指令格式及其b类指令模板的框图;
18.图5a是图示出根据实施例的示例性特定向量友好指令格式的框图;
19.图5b是图示出根据实施例的构成完整操作码字段的特定向量友好指令格式的字段的框图;
20.图5c是图示出根据实施例的构成寄存器索引字段的特定向量友好指令格式的字段的框图;
21.图5d是图示出根据实施例的构成增强操作字段的特定向量友好指令格式的字段的框图;
22.图6是根据实施例的寄存器架构的框图;
23.图7a是图示出根据实施例的示例性有序流水线和示例性寄存器重命名、无序发布/执行流水线两者的框图;
24.图7b是图示出根据实施例的要被包括在处理器中的有序架构核和示例性寄存器重命名、无序发布/执行架构核两者的框图;
25.图8a是根据实施例的单个处理器核以及其与管芯上互连网络的连接及其二级(l2)缓存的本地子集的框图;
26.图8b是根据实施例的图8a中的处理器核的一部分的展开图;
27.图9是根据实施例的可具有多于一个核、可具有集成的存储器控制器并且可具有集成图形的处理器的框图;
28.图10示出了根据实施例的系统的框图;
29.图11是根据实施例的第一更具体的示例性系统的框图;
30.图12是根据实施例的第二更具体的示例性系统的框图;
31.图13是根据实施例的片上系统(soc)的框图;并且
32.图14是根据实施例的对照使用软件指令转换器将源指令集中的二进制指令转换为目标指令集中的二进制指令的框图。
具体实施方式
33.在接下来的描述中,阐述了许多具体细节。然而,要理解,没有这些具体细节也可实现实施例。在其他情况下,没有详细示出公知的电路、结构和技术,以免模糊对本说明书的理解。
34.说明书中提及“一个实施例”、“一实施例”、“一示例实施例”等等表明描述的实施例可包括特定的特征、结构或特性,但每个实施例可以不一定都包括该特定特征、结构或特性。另外,这种短语不一定指同一实施例。另外,当联系一实施例来描述特定的特征、结构或特性时,认为联系其他实施例(无论是否明确描述)来实现这种特征、结构或特性是在本领域技术人员的知识范围内的。
35.就本说明书和权利要求中使用的而言,除非另有指明,否则使用序数形容词“第一”、“第二”、“第三”等等来描述元素只是表明一元素的特定实例或者相似元素的不同实例被引用,而并不打算暗示这样描述的元素必须在时间上、空间上、排名上或者以任何其他方式处于特定的序列中。另外,当在对实施例的描述中使用时,术语之间的“/”字符可意味着所描述的内容可包括第一术语和/或第二术语(和/或任何其他额外术语),或者可以使用、
利用和/或根据第一术语和/或第二术语(和/或任何其他额外术语)来实现。
36.另外,术语“比特”、“标志”、“字段”、“条目”、“指示符”等等可用于描述寄存器、表格、数据库或者其他数据结构中的存储位置的任何类型或内容,无论是以硬件还是软件实现的,但并不意味着将实施例限制到任何特定类型的存储位置或者任何特定存储位置内的比特或其他元素的任何特定数目。例如,术语“比特”可用于指寄存器内的比特位置和/或被存储或将被存储在该比特位置中的数据。术语“清除”可用于表明在存储位置中存储或以其他方式使得在存储位置中存储逻辑值零,而术语“设置”可用于表明在存储位置中存储或以其他方式使得在存储位置中存储逻辑值一、全一或者某个其他指定的值;然而,这些术语并不意味着将实施例限制到任何特定的逻辑惯例,因为在实施例内可使用任何逻辑惯例。
37.术语“核心”可以指任何处理器或执行核心,如本说明书及其附图中所描述和/或图示的和/或本领域中已知的,并且术语“处理器核心”、“执行核心”和“核心”是同义的。术语“非核心”可以指在处理器或片上系统(system-on-chip,soc)中/上、但不在核心内的任何电路、逻辑、子系统等等(例如,集成存储器控制器(integrated memory controller,imc)、功率管理单元、性能监视单元、系统和/或i/o控制器,等等),如本说明书及其附图中所描述和/或图示的和/或如本领域已知的(例如,被称为非核心、系统代理,等等)。然而,在描述和图中使用术语核心和非核心并不限制任何电路、硬件、结构等等的位置,因为电路、硬件、结构等等的位置在各种实施例中可能会有所不同。
38.例如,术语“msr”可被用作模型或机器特定寄存器的首字母缩写,但可更广泛地用于指代和/或表示一个或多个寄存器或存储位置,其中一个或多个可在核心中,一个或多个可在非核心中,等等。如下文所述,实施例中包括的msr可对应于任何一个或多个模型特定寄存器、机器特定寄存器,等等,以控制和报告处理器性能,处理系统相关的功能,等等。因此,对包括msr的实施例的描述可不限于所描述的msr的使用;实施例可以额外地或替代地使用任何其他存储来用于控制、配置、状态等等信息。在各种实施例中,msr(或msr的任何集合或子集)可能是或者不是应用和/或用户级软件可访问的。在各种实施例中,msr(或msr的任何集合或子集)可在一核心内和/或是一核心可访问的(核心范围的)或者可在非核心内和/或是多于一个核心可访问的(封装范围的)。
39.许多处理器和处理器核心都支持提高性能的能力,例如缓存、多线程、无序执行、分支预测、以及推测性执行。对手已经找到了利用这些处理器的能力来非法读取数据的方式。例如,当在执行代码中的推测点处采取不同的执行路径时,就可出现推测漏洞(speculation vulnerability,sv)。具体地,推测漏洞可能因为例如如下原因而发生:在进程流中的推测点之后,可能采取两个不同的执行路径。第一路径可能最终被确定为正确的路径,因此这个路径上的指令可能被引退并且被允许修改处理器的体系结构状态。第二路径可能最终被确定为不正确的路径,因此这个路径上的指令会被压制。然而,对微架构状态的一些改变,例如对缓存的改变,可能会持续存在和/或可观察到。
40.例如,对手可能故意尝试从其不应当可读取(即,越界)的存储器位置读取数据(例如,秘密数据)。该读取可能被允许以推测方式进行,直到确定该访问是否越界为止。可通过在作出该确定之前不提交任何结果来确保系统的体系结构正确性。在这种情况下,推测性执行可能会导致处理器的微架构状态在作出该确定之前发生变化,而对手可能能够执行边通道分析,以从处理器的微架构状态的差异中推断出秘密数据的值。这种类型的推测性攻
击的许多变体都是可能的。在一种场景中,对手可能会推测性地使用秘密数据作为存储器地址的一部分,并且利用定时分析来确定什么存储器位置正在被加载到缓存中,从而推断出该值。
41.作为更具体的示例,在缓存线大小为64字节的情况下,对存储器地址的六个最低有效比特中的任何一个的改变都不会导致该地址指向不同的缓存线,但对第七最低有效比特的改变会导致该地址指向不同的缓存线。因此,对手可能会反复地(例如,为了消除噪声和/或实现统计上显著的结果)将缓存冲刷和/或填充到已知或可预测的状态,使用推测流来使得处理器推测性地访问秘密数据,推测性地将秘密数据的比特应用于存储在寄存器中的已知存储器地址的第七最低有效比特(例如,使用移位和/或其他比特操纵指令),用被操纵的存储器地址来推测性地访问其自己的存储器空间,使用定时边通道分析来确定是否加载了新的缓存线,并且推断秘密比特的值与已知存储器地址的第七最低有效比特的值相同还是不同。
42.实施例包括提供可能因各种原因而希望在各种计算机系统中使用的特征或特性的系统、方法和装置,这些原因包括为了减少对基于推测或边通道分析的攻击的漏洞;减少对这种分析的漏洞,并且性能或其他方面的成本低于替代方法;和/或改善一般的安全性。实施例可以提供动态的全栈安全性,以增强安全、高效的推测。例如,一种全面的硬件和软件共同设计可包括硬件缓解机制和检测能力,以帮助决定如何缓解,并且软件可确定何时应用缓解。也就是说,当软件和/或硬件确定推测可能不安全时,软件可拒绝应用硬件缓解机制。实施例还可包括软件可见的指令,以允许软件触发硬件缓解机制的应用(一种、全部或者按任何组合,这可由(一个或多个)指令来指定和/或由软件/固件/硬件在每个机制、每个漏洞/攻击类型基础上和/或组合/群组基础上的编程/配置来指定,这可在下文进一步描述)。这样的指令集体系结构设计可将新的软件安全推测模型投射到微体系结构上。
43.实施例的使用可能是所期望的,因为它们可提供动态的sv缓解能力,该能力可有效地平衡安全性和性能之间的权衡,特别是当推测性执行的可观察的副作用是瞬时的时。实施例可提供不同的和/或定制的缓解水平,以便在存在和/或可能存在推测漏洞时提高安全性,并且在不存在和/或不太可能存在推测漏洞时提高性能。
44.一些实施例的方面在图1a中图示,该图示出了系统100包括硬件(hw)110和软件(sw)120。在实施例中,hw 110和sw 120可一起工作,以支持系统100上的应用和/或系统100的用户创建他们自己的sv缓解体验。
45.硬件110包括sv缓解hw 130,它表示任何一个或多个硬件机制或开关,以缓解sv,包括已知的硬件机制和/或本说明书中描述的新颖硬件机制。这种硬件机制可包括任何一个或多个执行模式,这些模式可被称为受限推测性执行(restricted speculative execution,rse),可由软件选择进入或退出,并且可提供针对推测性执行期间或之后留下的持续副作用的保护和/或对这种副作用的缓解。
46.hw 110还包括sv检测hw 150,它表示任何一个或多个已知或新颖的硬件机制,以动态地检测sv和/或它们可能发生的条件。sv检测hw 150可以检测可用于以各种置信水平预测推测漏洞的条件或异常。在实施例中,sv检测hw 150可以使用在硬件152中实现的机器学习和/或数据分析技术,来用于sv检测、预测和/或预测置信水平确定。
47.sw 120包括系统sw 140,例如操作系统(os),它可使用来自sv检测hw 150的信息,
例如sv的预测和预测的相应置信水平,来动态地决定何时使用sv缓解hw 130以及使用其哪些能力。系统sw 140可经由寄存器,例如模型或机器特定寄存器(msr),来与sv检测hw 150相接口。系统sw 140也可额外或替代地利用指令集体系结构(isa)指令来调用硬件110的能力。下文将论述一些这种指令的示例性实施例。
48.在实施例中,一个或多个寄存器(例如,msr)154可用于存储由sv检测hw 150生成的关于攻击的类别和关联的预测置信的信息,系统sw 140可读取并使用该信息来平衡和尝试优化安全性和性能之间的权衡。例如,系统sw 140可基于对第一类别的攻击(例如,spectre)的低置信预测而开启无缓解,但基于对第二类别的攻击的高置信预测而开启rse(例如,使用如下所述的一个或多个新颖指令)。
49.sw 120还包括应用sw 160。应用sw 160和/或系统100可被保护以免受攻击(例如,通过注入、劫持等等利用应用sw 160的恶意代码)。
50.如图1a所示,hw 110还包括处理器核心112,包括指令解码器114、执行电路116、以及存储器控制器118。执行电路116可包括加载电路132、存储电路134、以及分支电路136。执行电路116、加载电路132、存储电路134和/或分支电路136(和/或其结构、其内的微体系结构,等等)可被预配置、配置和/或重配置为根据实施例来实现sv缓解,例如如上文和下文所述。
51.指令解码器114可被实现在解码电路中,并且可接收、解码、转化、转换和/或以其他方式处理指令,例如,来自系统软件140和应用软件160的指令。存储器控制器118可将处理器核心112耦合到存储器,例如系统存储器,以存储来自系统软件140和应用软件160的指令。
52.在各种实施例中,图1a所示的硬件在一个或多个衬底、小芯片、多芯片模块、封装等等之中/之上的各种布置和/或集成,都是可能的。例如,所示出的所有硬件可被制造在同一衬底(例如,半导体芯片或管芯、soc,等等)上,连同未示出的额外硬件(例如,额外的处理器核心,其可以是核心112的额外实例或者任何其他核心的实例)。系统存储器可以在一个或多个单独的衬底上和/或在与包含hw 110的封装分开的一个或多个封装中。
53.各种实施例可包括在图1a中图示的任何或所有方面,有些还带有额外的方面。例如,核心112的方面可在如图7b所示的实施例中的核心1490中实现,在如图8a/8b所示的实施例中的核心中实现,在如图9所示的实施例中的核心1602a/1602n中实现,在如图10所示的实施例中的处理器1710/1715中实现,在如图11和图12所示的实施例中的处理器1870/1880中实现,和/或在如图13所示的实施例中的应用处理器2010中实现。
54.图1b图示了根据实施例的方法170。在172中,设置sv缓解hw 130中的一个或多个默认缓解开关(例如,基于由设计、基本输入输出系统(basic input-output system,bios)等等在sv检测hw 150中配置的默认值)。在174中,检测到对推测性执行攻击的漏洞(例如,由sv检测hw 150检测到)。在176中,由sv检测hw 150向系统sw 140提供对推测性执行攻击漏洞的指示,该指示可包括sv检测信息,例如攻击的预测、攻击的类别、和/或攻击的置信水平。在178中,由系统sw 140基于来自sv检测hw 150的sv检测指示/信息,确定要应用到sv缓解hw 130的缓解开关策略和/或设置。
55.在180中,硬件110接收由系统sw 140确定的配置信息,该配置信息可以是、可以包括、和或可以基于由系统sw 140在178中确定的策略和/或设置。在182中,可以通过直接使
用配置信息来重新配置sv缓解hw 130和/或间接地通过诸如权重向量156之类的接口(例如,在sv检测hw 150中实现),来实现sv缓解,其中该接口可表示与任何一个或多个sv缓解机制或开关相对应的任何一个或多个向量或其他数据类型,其中每个sv缓解机制或开关都具有任何数目的设置来提供某个范围的缓解水平。
56.在实施例中,配置信息可包括由软件提供的一个或多个权重向量156(例如,通过对sv缓解权重寄存器进行编程)。在184中,可基于权重向量156来动态地重新配置sv缓解hw 130(例如,通过翻转一个或多个sv缓解开关)以提供动态变化的sv缓解水平(例如,响应于来自sv检测hw 150的信号)。
57.在实施例中,直接或间接地配置和/或设置sv缓解hw 130中的开关可由系统sw 140使用新颖的指令来执行,如下文进一步描述的。
58.从而,可基于攻击的类别、攻击的预测概率、应用sw 160和/或其用户需要/期望的安全性水平、应用sw 160和/或其用户需要/期望的性能水平等等,来动态地检测和缓解潜在攻击。
59.在实施例中,添加到isa或者对isa的扩展中的一个或多个指令可支持软件(例如,sw 120)向硬件(例如,hw 110)指示哪些微架构结构要针对sv进行加固以及在什么条件下进行加固。在实施例中,这种指令可指示在推测性执行期间允许或不允许进行任何一个或多个微架构改变,包括但不限于:对数据缓存层次体系的更新,从数据缓存层次体系的读取(包括对元数据和/或替换状态的更新),对指令缓存和预取缓冲器的更新,对指令缓存和预取缓冲器的元数据和/或替换状态的改变,对存储器排序结构(加载缓冲器、存储地址缓冲器、存储数据缓冲器,等等)的改变,对分支预测器状态的改变,对寄存器状态(物理寄存器文件、寄存器别名表,等等)的改变,对所有前端结构的改变,对所有后端结构的改变,对所有执行资源的改变。在实施例中,每个这样的指示可用于指示出硬件应当实施加固(例如,提示)或者硬件必须实施加固(例如,要求)。
60.在实施例中,不同的指令、指令内或与指令相关联的模式比特的不同编码、与指令相关联的不同片段选择器、与指令相关联的寄存器中的不同值、与指令相关联的不同前缀或后缀,等等,可用于区分对于推测性执行的各种实例,要加固(或放松/松弛加固)哪些微架构结构和/或要阻止(或允许)哪些微架构改变。根据实施例以这种方式使用的指令可被称为sv加固、sv强化或者sv缓解指令。
61.在各种实施例中,sv加固/缓解指令可具有各种格式;被包括在与各种寄存器体系结构相对应的指令集体系结构中;和/或根据各种方法被解码、转化、转换,等等。例如,图4a、图4b、图5a、图5b、图5c和图5d图示了可用于sv加固/缓解指令的格式的实施例;图6图示了与包括一个或多个sv加固/缓解指令的指令集体系结构相对应的寄存器体系结构的实施例;并且图14图示了用于加固/缓解指令的转换/转化的实施例。
62.在实施例中,sv加固指令之后的指令可联系如sv加固指令所指定那样配置的微体系结构来执行,直到例如接收、解码和/或执行后续的sv加固指令为止,或者直到例如达到推测前沿为止(其中推测前沿可被定义为正在推测性地执行的指令(例如,可能在错误路径上)和正在非推测性地执行的指令(例如,已知在正确路径上)之间的动态边界)。
63.在实施例中,软件可对sv缓解进行微调,以便以更低的性能成本实现sv缓解。在实施例中,程序分析、编译器技术等等可用于确定或建议在哪些条件下应当或者需要加固哪
些硬件结构。
64.在实施例中,模式比特字段可被包括在sv加固指令的格式中,或者以其他方式与sv加固指令相关联,以指示对于推测性执行的各种实例要加固(或者移除/放松加固)哪些微架构结构和/或要阻止(或允许)哪些微架构改变。
65.在实施例中,模式比特字段中的模式比特可指定多个微架构结构(粗粒度的模式比特)。例如,在模式比特字段中,第一比特位置可对应于所有前端结构(或者所有前端结构的指定子集),第二比特位置可对应于所有后端结构(或者所有后端结构的指定子集),第三比特位置可对应于所有存储器结构(或者所有存储器结构的指定子集),第四比特位置可对应于所有分支预测相关结构(或者所有分支预测相关结构的指定子集),第五比特位置可对应于所有执行结构(或者所有执行结构的指定子集),等等。
66.在实施例中,模式比特字段中的模式比特可指定对微架构结构的特定改变(细粒度的模式比特)。例如,不同的比特位置可对应于数据缓存更新、数据缓存元数据/替换更新、数据缓存读取、指令缓存更新、预取缓冲器更新、指令缓存元数据/替换更新、经解码指令缓冲器更新、预取器更新(可以是每个预取器的单独比特)、分支历史更新、分支目标缓冲器更新、加载缓冲器更新、存储地址缓冲器更新、存储数据缓冲器更新、物理寄存器文件更新、寄存器别名表更新、指令转化后备缓冲器(instruction translation lookaside buffer,tlb)更新、指令tlb元数据/替换更新、数据tlb更新、数据tlb元数据/替换更新、次级tlb更新、次级tlb元数据/替换更新,等等。
67.实施例可包括与任何一个或多个sv加固指令相关联的粗粒度和/或细粒度模式比特的任何组合。实施例可包括具有任何数目的比特位置的加固模式寄存器,以存储来自sv加固指令的模式比特字段的信息,例如,模式比特字段的每个比特有一个加固模式寄存器比特。模式比特字段和/或加固模式寄存器还可包括任何数目的比特,以表示任何其他比特的群组,例如,单个全局比特,其可用于启用或禁用所有加固机制或者为其设置(或清除)了个体加固比特的所有加固机制。
68.在实施例中,设置保护可包括基于一个或多个sv加固指令和/或一个或多个加固模式寄存器的模式比特字段中的值,加固(或者去除/放松加固)任何一个或多个微架构结构和/或阻止(或允许)对微架构状态的任何数目的改变,这些的示例将在下文描述。无论是通过硬件和/或还是通过软件(例如,使用sv加固指令),去除和/或放松加固机制的应用和/或允许之前被阻止/防止的改变(例如,特定的改变、改变类型,等等),也可称为解除限制。
69.在实施例中,sv加固指令可以是前缀指令(例如,新的指令或者现有指令的前缀),用于设置(或放松)对后续指令和/或被添加前缀的(一个或多个)指令的保护。例如:
70.harden_prefix《mode_bits》
71.在实施例中,sv加固指令可被用作一对指令之一,来设置和重置对于这对指令之间的指令的保护。例如:
72.harden_set《mode_bits》//设置特定加固比特,使用
73.//与模式比特寄存器的逻辑或
74.…
被加固的代码
75.harden_reset《mode_bits》//重置特定加固比特,使用
76.//与模式比特寄存器的逻辑与
77.在实施例中,一对指令可具有相反的语法来设置保护,然后将保护重置到在这对指令中最近的相应指令之前就位的值,从而提供嵌套的加固水平。例如:
78.harden_push《mode_bits》
79.…
被加固的代码
80.harden_pop《mode_bits》//将加固比特恢复到其在最新
81.//的harden_push之前的值
82.在实施例中,一对指令可在代码区域的开头处设置一些保护,然后在代码区域的末尾处重置所有保护。例如:
83.harden_region_start《mode_bits》
84.…
被加固的代码
85.harden_region_end//重置所有加固比特
86.图1c图示了根据实施例的使用一个或多个指令(例如,由系统sw140调用和/或由指令解码器114接收/解码)来配置sv缓解机制(例如,执行电路116)的方法180。在181中,对单个指令的第一调用进行解码,所述单个指令的第一调用用于缓解对推测性执行攻击的漏洞。在182中,响应于单个指令的第一调用,处理器中的一个或多个微架构结构被加固。
87.在183中,另一指令(例如,加载指令、存储指令、分支指令、使用寄存器的内容(例如,数据、标志,等等)的指令,等等)可被解码。处理器可被设计为通过执行一个或多个操作来执行已解码的指令,这些操作可包括不留下边通道的第一操作(例如,在推测窗口关闭之后仍然存在并且可被软件观察到的微体系结构的状态的改变(例如,可经由软件方法测量的效果)或者其他持续的可观察到的副作用),和/或第二操作,该第二操作如果被执行(例如,推测性地执行)则会留下边通道。第二操作可被包括在指令的执行中以提高性能,在一些情况下只是为了提高性能。
88.在184中,响应于该另一指令,第一操作被执行和/或第二操作(由于在182中应用的加固)被阻止。在一些实施例中,第二操作可被延迟,直到它不再会留下边通道为止。
89.在185中,可对单个指令的第二调用进行解码。在186中,响应于单个指令的第二调用,一个或多个微架构结构的加固可被放松。
90.单个指令可指示一个或多个条件,在这些条件下,微架构结构中的一个或多个将被加固,可指示一个或多个微架构,和/或可指示包括多个字段的加固模式向量,每个字段对应于多个加固机制中的一个。加固可包括阻止对缓存、缓冲器或寄存器的改变。
91.在各种实施例中,单个指令和/或单个指令的调用(例如,可由单个指令的叶子、操作数、参数等等指示)可以是或者可对应于加载加固指令、存储加固指令、分支加固指令、或者寄存器加固指令,每个指令如下所述。
92.在实施例中,针对sv加固微体系结构的机制可包括任何已知和/或新颖(其示例可在下文描述)加固机制中的任何一个或多个或任何组合,包括但不限于加载加固、存储加固、分支加固、以及寄存器加固。术语“加固”和“强化”可用于指以某种方式改变微架构结构,例如改变它以阻止其执行或者允许特定操作,其中一些操作可能与指令相关联。因此,为了方便,术语“加固”和“强化”也可用于指操作和指令,以表示这些操作和指令受到微架构结构的加固的影响。
93.在实施例中,加载加固可包括确定、预测、指定、指示等等哪些加载要加固,在什么
条件下加载要被加固(和/或加固要被去除/放松),要执行什么类型/技术的加载加固,等等。例如,可通过不允许推测性加载指令执行和/或不允许推测性加载操作进行、允许推测性加载指令执行和/或允许推测性加载操作进行但不允许加载的数据被转发、允许推测性加载指令执行和/或推测性加载操作进行但不允许加载的数据被转发给依赖指令(dependent instruction)/操作等等,直到已知或者假定加载是安全的为止(例如,已知在正确的、不再是推测性的执行路径上),从而来加固加载。
94.在实施例中,硬件(例如,如上所述的sv检测hw 150)可以确定或预测攻击的类型或类别,并且软件(例如,如上所述的系统sw 140,使用如上所述的sv加固指令)可基于来自硬件的信息来选择加载加固的类型或类别。
95.例如,硬件可预测spectre v1攻击,并且作为响应,软件可选择以下加载加固机制之一:不允许加载执行/进行,允许加载执行/进行但不允许它们基于返回的数据而留下边通道,不允许依赖于加载的数据的指令留下边通道(例如,通过不分配缓存线或者不执行),等等。由硬件和/或如软件所指定那样去除/放松加载加固的条件可包括以下所列项中的任何一者或者其组合:当加载由于较旧的分支(条件的、间接的、隐含的,等等)而不再是推测性的时,在加载指令引退时,当特定的较旧指令/操作已完成了执行或被引退时(例如,只有列入阻止列表/非安全列表的分支或者列入阻止列表/非安全列表的条件分支),等等。
96.作为另一示例,响应于硬件预测spectre v2攻击,去除/放松加载加固的条件可包括当间接分支完成了执行或被引退时。
97.作为另一示例,响应于硬件预测spectre v4攻击,软件可选择一种加载加固机制,在该机制中,加载被阻止绕过较旧的未知的、不完整的或未引退的存储。
98.作为另一示例,用于瞬时加载值加固的机制可包括防止加载由于推测性存储绕过、存储器重命名和/或其他值推测方案而返回推测性数据。
99.作为另一示例,用于数据遗忘加载加固的机制可包括防止加载的时延取决于被返回的值。
100.在实施例中,存储加固可包括确定、预测、指定、指示等等哪些存储要加固,在什么条件下存储要被加固(和/或加固要被去除/放松),要执行什么类型/技术的存储加固,等等。例如,可通过不允许推测性存储指令执行和/或不允许推测性存储操作进行,直到已知或假定存储是安全的为止(例如,已知在正确的、不再是推测性的执行路径上),从而来加固存储。
101.在实施例中,硬件(例如,如上所述的sv检测hw 150)可以确定或预测攻击的类型或类别,并且软件(例如,如上所述的系统sw 140,使用如上所述的sv加固指令)可基于来自硬件的信息来选择存储加固的类型或类别。
102.例如,硬件可预测spectre v1攻击,并且作为响应,软件可选择以下存储加固机制之一:不允许存储执行,允许存储执行但不允许其基于存储的数据而留下边通道,不允许依赖于来自存储到加载转发的数据的指令留下边通道(例如,通过不分配缓存线或者不执行),等等。由硬件和/或如软件所指定那样去除/放松存储加固的条件可包括以下所列项中的任何一者或者其组合:当存储由于较旧的分支(条件的、间接的、隐含的,等等)而不再是推测性的时,在存储指令引退时,当特定的较旧操作已完成了执行时(例如,只有列入阻止列表/非安全列表的分支或者列入阻止列表/非安全列表的条件分支),等等。
103.作为另一示例,响应于硬件预测spectre v4攻击,软件可选择一种存储加固机制,在该机制中,较新的加载被阻止绕过存储。
104.作为另一示例,用于数据遗忘存储加固的机制可包括防止存储的时延取决于被存储的值。
105.在实施例中,分支加固可包括确定、预测、指定、指示等等哪些分支要加固,在什么条件下分支要被加固(和/或加固要被去除/放松),要执行什么类型/技术的分支加固,等等。例如,可通过不允许推测性分支指令执行和/或不允许推测性分支操作进行,不允许分支预测(例如,相反,暂缓、误预测到已知安全位置,等等),加固分支的阴影中的加载(例如,如上所述),延迟分支预测直到引退为止,检查分支终止指令(例如,endbranch),等等,直到已知或假定分支是安全的为止(例如,已知在正确的、不再是推测性的执行路径上),从而来加固分支。
106.在实施例中,硬件(例如,如上所述的sv检测hw 150)可以确定或预测攻击的类型或类别,并且软件(例如,如上所述的系统sw 140,使用如上所述的sv加固指令)可基于来自硬件的信息来选择分支和/或加载加固的类型或类别。
107.例如,硬件可预测spectre v1或v2攻击,并且作为响应,软件可为分支的阴影中的所有加载选择加载加固机制(例如,如上所述)和/或不解除由比分支或分支条件更新的加固操作所设置的限制,直到分支被确定为安全/正确为止。
108.在实施例中,寄存器加固可包括确定、预测、指定、指示等等哪些寄存器要加固,在什么条件下寄存器要被加固(和/或加固要被去除/放松),要执行什么类型/技术的寄存器加固,等等。在实施例中,加固可被应用到输出寄存器和/或指令的标志。
109.例如,可通过以下方式对寄存器进行加固:为寄存器设置围栏,不允许加载寄存器的推测性指令执行和/或不允许加载寄存器的推测性操作进行,不允许使用寄存器的内容的推测性指令执行和/或不允许使用寄存器的内容的推测性操作进行,不执行或允许从寄存器到数据依赖操作的数据转发,不允许依赖于寄存器或标志的指令留下边通道(例如,通过不分配缓存线或者不执行等等,直到知道或假定寄存器的内容是安全的为止(例如,知道是基于正确的、不再是推测性的执行路径))。由硬件和/或如软件所指定那样去除/放松寄存器加固的条件可包括以下所列项中的任何一者或者其组合:当相应的寄存器指令由于较旧的分支(条件的、间接的、隐含的,等等)或一些其他硬件预测器而不再是推测性的时,在相应的寄存器指令引退时,当特定的较旧指令/操作已完成了执行时(例如,只有列入阻止列表/非安全列表的分支或者列入阻止列表/非安全列表的条件分支),由相应的寄存器指令指定的标志或条件评估为真(如果标志和条件被指定并且评估为假,则围栏操作可修改寄存器的内容),等等。
110.在实施例中,硬件(例如,如上所述的sv检测hw 150)可以确定或预测攻击的类型或类别,并且软件(例如,如上所述的系统sw 140,使用如上所述的sv加固指令)可基于来自硬件的信息来选择寄存器加固的类型或类别。
111.作为示例,用于数据遗忘寄存器加固的机制可包括防止操作的时延取决于寄存器中的值。
112.各种实施例可包括用于sv缓解的其他方法和/或技术,包括但不限于以下的(每一者可在下文中定义/描述):数据加污和跟踪、基于分段的保护、访问间离、以及基于混合密
钥的web浏览。
113.在实施例中,数据加污和跟踪可包括软件(例如,系统sw 140)的以下能力:使用一个或多个指令、一个或多个指令内的或与之相关联的模式比特、与一个或多个指令相关联的片段选择器、与一个或多个指令相关联的寄存器中的值、与一个或多个指令相关联的前缀或后缀等等来标记可能(例如,基于来自sv检测hw 150的信息)被对手控制的数据。这种标记可被称为加污和/或这种数据可被称为被加污(而未被如此标记的数据可被称为未被加污)。
114.在实施例中,被加污的数据可被硬件追踪。例如,数据本身可通过在其中包括一个或多个额外比特以将其标记为被加污来对其进行标记。作为另一示例,可保持或维护一记录或列表,以指示出被加污的数据已被加载或存储到其中的寄存器、存储器位置或者其他存储位置(例如,通过地址或其他方式)。
115.在实施例中,可防止使用被加污数据的操作被推测性地执行,可允许使用被加污数据的操作被非推测性地执行,和/或可允许使用未被加污数据的操作被推测性地和非推测性地执行。例如,如果存储器地址是未被加污地址(即,被标记为未被加污的数据),则可允许从该地址进行推测性加载,但如果该地址是被加污地址(即,被标记为被加污的数据),则阻止从该地址的推测性加载进行。
116.图1d图示了根据实施例的用于sv缓解的数据加污的方法190。在191中,检测到对推测性执行攻击的漏洞(例如,由sv检测hw 150检测到)。在192中,联系对推测性执行攻击的漏洞的检测,提供对于来自第一操作的数据被加污的指示(例如,由sv检测hw 150提供给系统sw 140)。在193中,数据被标记为要被跟踪(例如,由sv检测hw 150标记以便由hw 110跟踪)和/或被加污(例如,响应于对来自系统sw 140的指令的解码)。在194中,如果使用该数据的第二操作要被推测性地执行并且该数据被加污,则该第二操作的执行被阻止(例如,由sv缓解hw 130)。在195中,如果执行是非推测性的或变成非推测性的或者数据是未被加污的或变成未被加污的,或者在这样的情况发生时,则执行第二操作。
117.在实施例中,基于分段的保护可包括一种新颖的编程语言构造,该构造支持代码的特定区域访问存储器的特定片段(或者范围、区域,等等),并且有来自sv的保护。在实施例中,受保护的片段可用于为特定程序存储数据结构、其字段、程序变量,等等。在实施例中,编程语言构造也可允许指定访问权限。
118.在实施例中,编程语言构造可被编译为使用指令来访问有保护检查就位的片段中的存储器。这些指令可以是新颖指令和/或具有模式比特、片段选择器、寄存器中的值、前缀或后缀等等或者与之相关联的指令(例如,读取、写入或修改存储器片段的指令),以指定保护和/或访问权限。在实施例中,这些指令可以是在自动执行指定的访问检查的情况下被执行的指令。
119.在实施例中,编程语言构造和新颖指令可被硬件支持,该硬件在执行代码的同时保护片段免受入侵,包括推测性边通道攻击(例如,使用任何已知或新颖(可在本说明书中描述)的sv缓解技术)。在实施例中,硬件的实现可支持在没有显式加载和对片段边界的检查的情况下执行指令。
120.例如,编程语言构造可以是这样的形式(其中“giveaccess”表示指令/构造的名称/标签/记号,“base=codebegin”指示/指定代码的开始,“codelen”指示/指定代码的长
度/范围,“membegin”指示/指定相应存储器片段的开始(例如,地址),“memlen”指示/指定相应存储器片段的长度,并且“accesstype”指示/指定权限):
121.giveaccess base=codebegin,codelen,membegin,memlen,accesstype
122.在实施例中,指定的代码区域可包括具有其可访问的若干个不同缓冲器的表格。例如,缓冲器可被嵌入到表格中(其中“num of buffs”对应于缓冲器的数目,包括从“start_1”开始并具有由“len_1”指示/指定的长度/范围和由“accesstype1”指示/指定的权限的第一缓冲器,等等依此类推)。
123.num of buffs
124.start_1,len_1,accesstype_1
125.start_2,len_2,accesstype_2
126.…
127.start_n,len_n,accesstype_n
128.在实施例中,指定区域内的代码可利用对表格的索引和相应缓冲器内的索引来访问存储器缓冲器。
129.在实施例中,及时(just-in-time,jit)编译器可动态地检查构造的可用性并且相应地生成代码,而静态编译器可生成使用该构造的代码版本和不使用该构造的另一版本。
130.在实施例中,访问间离可包括重构软件程序、应用、库、模块、组件、功能、过程、块和/或其他形式的软件和/或程序代码,等等(其中术语“代码”可用于指任何这种形式的软件),以通过减小攻击面来限制入侵的影响。实施例可支持通过减少和/或重定向由组件(其中术语“组件”可用于指代码或者代码的任何部分或子集)进行的和/或组件之间的一个或多个交互和通信来提高代码的安全性,以便更少的组件被暴露于易受影响或有故障的组件。实施例可包括自动创建代码的访问图,并且自动重构为更严格的访问拓扑。实施例可使用基于硬件或软件的遥测来指导重构。
131.在实施例中,当代码被执行时,可以收集遥测数据,以提供代码的存储器访问拓扑图,揭示不同模块之间的交互和通信,以及不同执行路径所接触的数据是什么。在实施例中,也可额外地或者替代地通过在编译代码时对代码进行剖析来收集这种信息和/或相关信息。
132.在实施例中,软件开发顾问工具可使用存储器访问拓扑图来通过重构代码减小攻击面。图2a图示了简单的示例。
133.在图2a中,根据一实施例创建的存储器访问拓扑图200可揭示出模块p(210)被三个函数使用:f(222),g(224),以及h(226)。模块p具有三个数据结构:s1(232)、s2(234)、以及sn(236),它们被其代码所访问。为了给来自f、g和h的调用提供服务,相应地执行函数f1(242)、f2(244)和fn(246)。按照原样,所有提及的数据结构可被函数f1、f2、fn中的每一者访问并修改。然而,在现实中,对于f1可能只需要s1,对于f2可能只需要s2,并且对于fn可能只需要sn。如果f2的代码能够被攻击,同样,这可能会影响s1、s2和sn。然而,根据一实施例的软件开发顾问工具可分析访问模式,意识到这一事实,并且将左侧的代码变换为右侧的代码。从而,在这个示例中,一实施例将代码的攻击面从3*(s1 s2 sn)的大小减小到s1 s2 sn的大小,这是原始代码的三分之一。
134.在图2a的示例中,通过对于其三个不同的调用者(f、g、h)关闭和专门化
(specialize)模块p来实现函数的完全隔离,这对其他代码而言可能并不总是可能实现的。然而,在实施例中,类似的变换可对代码的不同部分(包括模块和函数)进行分组以减小攻击面。
135.根据实施例,如图2b所示,用于访问间离的硬件250可包括一个或多个处理器核心252来执行代码,以及存储器访问电路254来结合代码的执行而访问存储器。一个或多个处理器核心252中的一个或多个还生成代码的存储器访问拓扑图,以确定代码的第一可攻击面(例如,如上所述);并且基于存储器访问拓扑图来重构代码以生成经重构的代码,该经重构的代码具有小于第一可攻击面的第二可攻击面(例如,如上所述)。
136.图2c中示出了根据实施例的访问间离的方法260。在262中,执行代码。
137.在264中,收集代码的数据访问配置文件(例如,如上所述)。通过在其使用场景中执行代码(例如,使用遥测硬件),可以静态或动态地执行收集数据访问配置文件。在各种实施例中,收集数据访问配置文件可由硬件、固件、软件和/或硬件、固件和软件的任何组合来执行/被植入在硬件、固件、软件和/或硬件、固件和软件的任何组合中。
138.在266中,基于数据访问配置文件生成存储器访问拓扑图(例如,如上所述)。在各种实施例中,生成存储器访问拓扑图可由硬件、固件、软件和/或硬件、固件和软件的任何组合来执行/被植入在硬件、固件、软件和/或硬件、固件和软件的任何组合中。
139.在268中,代码被重构(例如,如上所述)。重构代码可由软件开发顾问工具执行,该工具使用配置文件信息和代码来创建用于计算攻击面的模型,然后变换代码以基于该模型减小攻击面。在实施例中,变换可包括过程的克隆和/或专门化,以支持减少交互和通信。在实施例中,该方法可以是迭代的,并且顾问工具可从来自变换后代码的新遥测数据中学习。在各种实施例中,重构(包括顾问工具)可由硬件、固件、软件和/或硬件、固件和软件的任何组合来执行/被植入在硬件、固件、软件和/或硬件、固件和软件的任何组合中。
140.在实施例中,可以静态或动态地执行重构。例如,jit或受管理运行时系统(runtime)可动态地对代码进行剖析,然后实时地对其进行专门化,以执行细粒度的分割。一种优化jit可具有一系列的“齿轮(gear)”,其中,这些齿轮响应于学习到一函数具有较高(例如,达到或超过固定或可变阈值)的使用频率和/或许多(例如,达到或超过固定或可变阈值)的交互/通信,而转向对该函数进行更高的、更激进优化的专门化。在收集和/或分析了关于函数的使用、边界、交互、通信等等的充分(例如,达到或超过固定或可变阈值)的知识之后,可锁定该函数的权限(例如,通过或基于来自剖析器(profiler)的信息)。
141.在实施例中,通过用基于公钥和进程标识符(id)的混合密钥保护存储器,可以提高web浏览、网站使用、web应用使用等等的安全性和/或提高对其进行保护的效率,并且可以缓解sv。例如,实施例可用于保护数据、可执行内容和代码生成,例如jit代码/字节码及其生成、编译/预生成的代码/字节码及其生成、web应用(例如,渐进式web应用或pwa)内容,等等。
142.实施例的使用可能是所希望的,因为它们可以与现有的web安全性方法(例如,公钥私钥加密)更兼容,并且比现有的web安全性方法(例如,进程隔离)更高效。例如,实施例可支持基于公钥的web应用使用组合存储器安全性策略,该策略允许进程分组(例如,基于网页组)以使用共享的存储器,而不是将所有进程(例如,每个个体网页)彼此隔离。
143.在图3a中图示了一些实施例的方面。图3a示出了系统300包括和/或能够接收若干
个公钥312和若干个进程id 314。可以例如从相应的网站和/或网站证书获得每个公钥312,和/或将每个公钥312用于站点隔离和安全互联网通信。每个进程id 314可对应于(例如,被生成以标识)一进程,例如网站或浏览器进程,其中“进程”可包括进程、任务、软件线程、应用、虚拟机、容器,等等。
144.一个或多个公钥312和一个或多个进程id 314的任何组合可被混合密钥生成器310用于生成一个或多个混合密钥316。例如,来自第一网站的第一公钥以及第一和第二进程id可用于生成第一混合密钥,来自第二网站的第二公钥以及第三和第四进程id可用于生成第二混合密钥,等等以此类推。
145.在实施例中,混合密钥生成器310可包括硬件,例如生成和/或组合加密密钥的电路,例如但不限于一个或多个移位寄存器(例如,线性反馈移位寄存器)、模块化指数运算电路、椭圆曲线加密电路、算术运算电路、逻辑运算电路,等等。在实施例中,混合密钥生成器310可使用除了公钥和进程id以外的输入来生成密钥。这些输入可包括随机数、伪随机数、和/或系统300和/或系统300中的处理器/核心的私钥(例如,由随机数生成器生成,由物理不可克隆函数生成,被存储在熔丝中(stored in fuses),等等)。
146.每个这样的混合密钥316可被基于混合密钥的存储器保护硬件320用来保护存储器330。例如,存储器保护硬件320可使用单个混合密钥316来保护一个或多个存储器空间。每个存储器空间可包括和/或对应于存储器330的一个或多个存储器范围、区域或者部分(例如,由地址范围定义,其中地址可以是物理地址、虚拟地址、主机地址、访客地址,等等)。存储器保护硬件320可根据任何存储器保护技术使用单个混合密钥316来保护存储器空间,例如使用单个混合密钥316来在数据被存储在存储器330中和被从存储器330中加载时对其进行加密和解密,使用单个混合密钥316来控制基于范围寄存器对存储器330的访问,等等。此外,基于混合密钥的存储器保护硬件320可使用多个混合密钥316,每个用于保护存储器330的一个或多个相应的空间、范围或区域。
147.在实施例中,存储器330可表示系统存储器(例如,动态随机访问存储器),本地存储器(例如,静态随机访问存储器,该存储器与使用该存储器执行进程的处理器或处理器核心在同一衬底、芯片或管芯上,或者与使用该存储器执行进程的处理器或处理器核心在相同的封装内),或者系统和本地存储器的组合。存储器330可从/为任何数目的进程(例如,网站进程、浏览器进程,等等)存储/缓存内容、数据、代码,等等。在实施例中,可通过存储器访问结构332来提供和/或控制对存储器330中的空间的访问,该存储器访问结构332可包括硬件、电路和/或存储装置,以生成、存储和/或引用一个或多个存储器指针、存储器地址、存储器地址范围、存储器地址转化/页/分页表或结构,这样可基于相应的混合密钥316(例如,访问可要求相应的混合密钥316)来阻止、限制、限定和/或以其他方式控制访问。例如,通过堆存储器指针结构访问存储器330中的每个web/浏览器进程的内容、数据、代码等等可能要求相应的混合密钥316。
148.在实施例中,存储器访问结构332可表示控制对单个存储器空间的访问的单个结构,控制对多个空间的访问的单个结构,其中每个结构用于控制对多个空间中的相应一个的访问的多个结构,包括多个单一结构的分布式结构(例如,每个存储器空间有一个结构,以提供/执行与特定混合密钥316相关联的每个存储器空间所特有的生成、存储、引用,等等)和共享结构(例如,用于提供/执行与特定混合密钥316相关联的所有存储器空间所共有
的生成、存储、引用,等等),等等。
149.在实施例中,任何数目的进程可共享混合密钥(例如,基于单个公钥和任何数目的进程id而生成),并且因此共享存储器330中的(一个或多个)存储器空间。此外,根据任何已知的方法,存储器330也可用于为个体进程(包括基于网站/浏览的那些和不基于网站/浏览的那些)存储用进程id保护的存储器空间。
150.在实施例中,在jit代码中使用的预编译的二进制文件可与混合密钥相关联,所述二进制文件例如内置程序以及由虚拟机(virtual machine,vm)在运行时编译的jit代码(其被转换为字节码(例如,抽象语法树(abstract syntax tree,ast)字节码和web应用中使用的内容(例如,javascript文本代码、webassembly字节码、层叠样式表(cascade style sheet,css))和二进制图像(例如,可执行文件))。实施例可支持应用、功能进程和内容提供者的分组权利,并且允许分组的进程共享存储器。
151.图3b图示了根据实施例的使用混合密钥来保护存储器的方法350。在352中,可从网站接收公钥。在354中,基于第一公钥和一个或多个进程标识符的混合密钥被生成(例如,由混合密钥生成器310生成)。每个进程标识符可对应于存储器中的一个或多个存储器空间。
152.在356中,混合密钥与多个存储器访问结构中的每一个相关联(例如,由存储器保护硬件320来关联)。每个存储器访问结构控制对存储器空间中的相应一个的访问。
153.在358中,混合密钥被用于(例如,被存储器保护硬件320和/或(一个或多个)存储器访问结构332用于)控制对一个或多个存储器空间的访问。例如,混合密钥可用于允许访问第一组web浏览器进程来访问第一组存储器空间,并且阻止不在该组中的进程的访问。
154.附加描述
155.下面描述的是根据实施例的机制,包括指令集,以支持系统、处理器、仿真,等等。例如,下面描述的是指令格式和指令执行的细节方面,包括在根据实施例的核心中可以使用的诸如取得、解码、调度、执行、引退等等的各种流水线阶段。
156.不同的图可示出实施例的相应方面。例如,图1a中的任何和/或所有的块可对应于其他图中的块。此外,图1a中表示硬件的块可对应于任何其他图中表示硬件的块,例如在根据实施例的系统的框图中表示硬件的块。因此,由该系统级框图所表示的实施例可包括在其他图中示出的任何块,以及那些其他图的描述中的任何细节。对于描绘核心、多核处理器、片上系统(soc)等等的图,也是如此。
157.指令集
158.指令集可以包括一个或多个指令格式。给定指令格式可以定义各种字段(例如,位数、位的位置)以指定要执行的操作(例如,操作码)和将在其上执行该操作的操作数和/或其他数据字段(例如,掩码)等。一些指令格式通过指令模板(或子格式)的定义被进一步细分。例如,给定指令格式的指令模板可以被定义为具有指令格式的字段的不同子集(所包括的字段通常具有相同的顺序,但是至少一些具有不同的位位置,因为包括较少的字段)和/或被定义为具有不同解释的给定字段。因此,isa的每个指令使用给定的指令格式表示(并且,如果定义,则在该指令格式的给定的一个指令模板中)并且包括用于指定操作和操作数的字段。例如,示例性add指令具有特定操作码和指令格式,该指令格式包括指定该操作码的操作码字段和选择操作数的操作数字段(源1/目的地和源2);并且在指令流中出现该add
指令可以在操作数字段中具有选择特定操作数的特定内容。已发布和/或公布了被称为高级向量扩展(avx)(avx1和avx2)并使用向量扩展(vex)编码方案的一组单指令多数据(simd)扩展(例如,参见64和ia-32架构软件开发人员手册,2014年9月;参见高级向量扩展编程参考,2014年10月)。
159.示例性指令格式
160.本文描述的指令的实施例可以以不同的格式实现。另外,以下详细描述示例性系统、架构和流水线。指令的实施例可以在这样的系统、架构和流水线上执行,但不限于详细说明的那些。
161.通用向量友好指令格式
162.向量友好指令格式是适合于向量指令的指令格式(例如,存在特定于向量操作的某些字段)。虽然描述了通过向量友好指令格式支持向量和标量操作的实施例,但替代实施例仅使用具有向量友好指令格式的向量操作。
163.图4a-4b是示出根据实施例的通用向量友好指令格式及其指令模板的框图。图4a是示出根据实施例的通用向量友好指令格式及其a类指令模板的框图;图4b是示出根据实施例的通用向量友好指令格式及其b类指令模板的框图。具体地,通用向量友好指令格式1100被示出,为通用向量友好指令格式1100定义a类和b类指令模板,两者都包括无存储器访问1105指令模板和存储器访问1120指令模板。在向量友好指令格式的上下文中,术语“通用”是指不与任何特定指令集相捆绑的指令格式。
164.虽然将描述实施例,其中向量友好指令格式支持以下内容:具有32位(4字节)或64位(8字节)数据元素宽度(或大小)的64字节向量操作数长度(或者大小)(因此,64字节向量由16个双字大小的元素组成,或者可替换地由8个四字大小的元素组成);具有16位(2字节)或8位(1字节)数据元素宽度(或大小)的64字节向量操作数长度(或大小);具有32位(4字节)、64位(8字节)、16位(2字节)或8位(1字节)数据元素宽度(或大小)的32字节向量操作数长度(或大小);以及具有32位(4字节)、64位(8字节)、16位(2字节)或8位(1字节)数据元素宽度(或大小)的16字节向量操作数长度(或大小);替换实施例可以支持具有更多、更少或不同数据元素宽度(例如,128位(16字节)数据元素宽度)的更多、更少和/或不同的向量操作数大小(例如,256字节向量操作数)。
165.图4a中的a类指令模板包括:1)在无存储器访问1105指令模板内,示出了无存储器访问、全舍入控制类型操作1110指令模板和无存储器访问、数据变换类型操作1115指令模板;2)在存储器访问1120指令模板内,示出了存储器访问、时态(temporal)1125指令模板和存储器访问、非时态1130指令模板。图4b中的b类指令模板包括:1)在无存储器访问1105指令模板内,示出了无存储器访问、写掩码控制、部分舍入控制类型操作1112指令模板和无存储器访问、写掩码控制、vsize类型操作1117指令模板;2)在存储器访问1120指令模板内,示出了存储器访问、写掩码控制1127指令模板。
166.通用向量友好指令格式1100包括以下以图4a-4b所示的顺序列出的以下字段。
167.格式字段1140-该字段中的特定值(指令格式标识符值)唯一地标识向量友好指令格式,因此标识指令在指令流中以向量友好指令格式出现。因此,该字段是可选的,仅具有通用向量友好指令格式的指令集是不需要该字段的。
168.基本操作字段1142-其内容区分不同的基本操作。
169.寄存器索引字段1144-其内容直接或通过地址生成来指定源和目标操作数的位置,无论它们在寄存器中还是在存储器中。这些包括足够数量的位以从pxq(例如32x512、16x128、32x1024、64x1024)寄存器文件中选择n个寄存器。虽然在一个实施例中,n可以是多达三个源和一个目的地寄存器,但是替代实施例可以支持更多或更少的源和目的地寄存器(例如,可以支持多达两个源,其中这些源中的一个也充当目的地,可以支持多达三个源,其中这些源中的一个也充当目的地,可能支持多达两个源和一个目的地)。
170.修正符字段1146-其内容区分通用向量指令格式中指定存储器访问的指令的出现与不指定存储器访问的指令的出现;即,区分无存储器访问1105指令模板和存储器访问1120指令模板。存储器访问操作读取和/或写入存储器层级结构(在一些情况下使用寄存器中的值指定源和/或目的地地址),而非存储器访问操作不这样做(例如,源和目的地是寄存器)。虽然在一个实施例中,该字段还在三种不同方式之间进行选择以执行存储器地址计算,但替代实施例可以支持更多、更少或不同的方式来执行存储器地址计算。
171.增强操作字段1150-其内容区分除基本操作之外还要执行各种不同操作中的哪一个。该字段是上下文特定的。在一个实施例中,该字段被分成类字段1168,α字段1152和β字段1154。增强操作字段1150允许在单个指令中而不是2、3或4个指令中执行公共操作组。
172.缩放字段1160-其内容允许缩放索引字段的内容以用于存储器地址生成(例如,用于使用2
scale
*index base的地址生成)。
173.位移字段1162a-其内容用作存储器地址生成的一部分(例如,用于使用2
scale
*index base displacement的地址生成)。
174.位移因子字段1162b(注意,直接在位移因子字段1162b上的位移字段1162a的并置指示使用一个或另一个)-其内容用作地址生成的一部分;它指定位移因子,该位移因子将通过存储器访问的大小(n)来缩放-其中n是存储器访问中的字节数(例如,对于使用2
scale
*index base scaled displacement的地址生成)。忽略冗余低阶位,因此,位移因子字段的内容乘以存储器操作数总大小(n),以便生成用于计算有效地址的最终位移。n的值由处理器硬件在运行时基于完整操作码字段1174(稍后描述)和数据操纵字段1154c来确定。位移字段1162a和位移因子字段1162b从以下意义上来说是可选的,例如它们不用于无存储器访问1105指令模板和/或不同实施例可以仅实现这两者中的一个或不实现这两者。
175.数据元素宽度字段1164-其内容区分要使用多个数据元素宽度中的哪一个(在一些实施例中针对所有指令;在其他实施例中仅针对一些指令)。该字段从以下意义上来说是可选的,例如如果仅支持一个数据元素宽度和/或使用操作码的某些方面支持数据元素宽度则不需要该字段。
176.写掩码字段1170-其内容基于每个数据元素位置控制目的地向量操作数中的数据元素位置是否反映了基本操作和增强操作的结果。a类指令模板支持合并写掩码,而b类指令模板支持合并和归零写掩码。合并时,向量掩码允许在执行任何操作(由基本操作和增强操作指定)期间保护目的地中的任何元素集免于更新;在一个实施例中,保留相应掩码位具有0值的目的地的每个元素的旧值。相反,当归零向量掩码允许在执行任何操作(由基本操作和增强操作指定)期间将目的地中的任何元素集归零;在一个实施例中,当相应的掩码位具有0值时,目的地的元素被设置为0。该功能的一个子集是能够控制正在执行的操作的向量长度(即,从第一个到最后一个被修改的元素的跨度);但是,修改的元素不必是连续的。
因此,写掩码字段1170允许部分向量操作,包括加载、存储、算术、逻辑等。虽然描述了实施例,其中写掩码字段1170的内容选择多个写掩码寄存器中包含要使用的写掩码的一个写掩码寄存器(并且因此写掩码字段1170的内容间接地标识要执行的掩码),但替代实施例或者附加实施例允许写掩码字段1170的内容直接指定要执行的掩码。
177.立即数(immediate)字段1172-其内容允许指定立即数。该字段从以下意义上来说是可选的,例如它不存在于不支持立即数的通用向量友好格式的实现中并且它不存在于不使用立即数的指令中。
178.类字段1168-其内容区分不同类的指令。参考图4a-b,该字段的内容在a类和b类指令之间进行选择。在图4a-b中,圆角方块用于表示在字段中存在特定值(例如,分别在图4a-b中的类字段1168的a类1168a和b类1168b)。
179.a类指令模板
180.在a类的非存储器访问1105指令模板的情况下,α字段1152被解析为rs字段1152a,其内容区分要执行不同的增强操作类型中的哪个(例如,舍入1152a.1和数据变换1152a.2分别被指定用于无存储器访问、舍入型操作1110和无存储器访问、数据变换类型操作1115指令模板),而β字段1154区分要执行哪个指定类型的操作。在无存储器访问1105指令模板中,不存在缩放字段1160,位移字段1162a和位移因子字段1162b。
181.无存储器访问指令模板-全舍入控制类型操作
182.在无存储器访问全舍入控制类型操作1110指令模板中,β字段1154被解析为舍入控制字段1154a,其内容提供静态舍入。虽然在所述实施例中,舍入控制字段1154a包括抑制所有浮点异常(sae)字段1156和舍入操作控制字段1158,但是替代实施例可以支持(例如可以编码)这些概念到同一字段中或仅具有这些概念/字段中的一个或者另一个(例如,可以仅具有舍入操作控制字段1158)。
183.sae字段1156-其内容区分是否禁用异常事件报告;当sae字段的1156内容表明启用抑制时,给定的指令不会报告任何类型的浮点异常标志,也不会引发任何浮点异常处理程序。
184.舍入操作控制字段1158-其内容区分要执行一组舍入操作中的哪一个(例如,向上舍入,向下舍入,向零舍入和向最近舍入)。因此,舍入操作控制字段1158允许基于每个指令改变舍入模式。在处理器包括用于指定舍入模式的控制寄存器的一个实施例中,舍入操作控制字段1150的内容覆盖该寄存器值。
185.无存储器访问指令模板-数据变换类型操作
186.在无存储器访问数据变换类型操作1115指令模板中,β字段1154被解析为数据变换字段1154b,其内容区分要执行多个数据变换中的哪一个(例如,无数据变换、调配(swizzle)、广播)。
187.在类a的存储器访问1120指令模板的情况下,α字段1152被解析为逐出提示字段1152b,其内容区分将使用哪一个驱逐提示(在图4a中,时态1152b.1和非时态1152b.2分别被指定用于存储器访问、时态1125指令模板和存储器访问、非时态1130指令模板),而β字段1154被解析为数据操纵字段1154c,其内容区分要执行多个数据操纵操作(也称为基元)中的哪一个(例如,无操纵;广播;源的上转换;以及目的地的下转换)。存储器访问1120指令模板包括缩放字段1160,并且可选地包括位移字段1162a或位移因子字段1162b。
188.向量存储器指令利用转换支持执行从存储器的向量加载和到存储器的向量存储。与常规向量指令一样,向量存储器指令以逐个数据元素的方式从/向存储器传输数据,实际传输的元素由被选择作为写掩码的向量掩码的内容决定。
189.存储器访问指令模板-时态
190.时态数据是可能足够快地被重用以从缓存受益的数据。然而,这是一个提示,不同的处理器可以以不同的方式实现它,包括完全忽略提示。
191.存储器访问指令模板-非时态
192.非时态数据是不太可能足够快地被重用以从缓存在第一级缓存中受益的数据,并且应该优先驱逐。然而,这是一个提示,不同的处理器可以以不同的方式实现它,包括完全忽略提示。
193.b类指令模板
194.在b类的指令模板的情况下,α字段1152被解析为写掩码控制(z)字段1152c,其内容区分由写掩码字段1170控制的写掩码应该是合并还是归零。
195.在b类的非存储器访问1105指令模板的情况下,β字段1154的一部分被解析为rl字段1157a,其内容区分要执行不同增强操作类型中的哪一个(例如,舍入1157a.1和向量长度(vsize)1157a.2分别被指定用于无存储器访问、写掩码控制、部分舍入控制类型操作1112指令模板和无存储器访问、写掩码控制、vsize类型操作1117指令模板),而β字段1154的其余部分区分要执行哪个指定类型的操作。在无存储器访问1105指令模板中,不存在缩放字段1160,位移字段1162a和位移因子字段1162b。
196.在无存储器访问、写掩码控制、部分舍入控制类型操作1110指令模板中,β字段1154的其余部分被解析为舍入操作字段1159a并且禁用异常事件报告(给定指令不报告任何类型的浮点异常标志,不会引发任何浮点异常处理程序)。
197.舍入操作控制字段1159a-正如舍入操作控制字段1158一样,其内容区分要执行的一组舍入操作中的哪一个(例如,向上舍入、向下舍入、向零舍入和向最近舍入)。因此,舍入操作控制字段1159a允许基于每个指令改变舍入模式。在处理器包括用于指定舍入模式的控制寄存器的一个实施例中,舍入操作控制字段1150的内容覆盖该寄存器值。
198.在无存储器访问、写掩码控制、vsize类型操作1117指令模板中,β字段1154的其余部分被解析为向量长度字段1159b,其内容区分要在多个数据向量长度中的哪一个(例如,128、256或512字节)上执行。
199.在b类的存储器访问1120指令模板的情况下,β字段1154的一部分被解析为广播字段1157b,其内容区分是否要执行广播类型数据操纵操作,而β字段1154的其余部分被解析为向量长度字段1159b。存储器访问1120指令模板包括缩放字段1160,并且可选地包括位移字段1162a或位移因子字段1162b。
200.关于通用向量友好指令格式1100,示出了完整操作码字段1174,其包括格式字段1140,基本操作字段1142和数据元素宽度字段1164。尽管示出了完整操作码字段1174包括所有这些字段的一个实施例,但在不支持所有这些字段的实施例中,完整操作码字段1174包括少于所有这些字段。完整操作码字段1174提供操作代码(操作码)。
201.增强操作字段1150、数据元素宽度字段1164和写掩码字段1170允许在通用向量友好指令格式中基于每个指令指定这些特征。
202.写掩码字段和数据元素宽度字段的组合创建分类型的指令,因为它们允许基于不同的数据元素宽度来应用掩码。
203.在a类和b类中找到的各种指令模板在不同情况下是有益的。在一些实施例中,处理器内的不同处理器或不同核可以仅支持a类,仅支持b类或支持这两类。例如,旨在用于通用计算的高性能通用无序核可以仅支持b类,旨在主要用于图形和/或科学(吞吐量)计算的核可以仅支持a类,而旨在用于两者的核可以支持两者(当然,具有来自两类的模板和指令但不是来自两类的所有模板和指令的某种混合的核也在本发明的范围内)。此外,单个处理器可以包括多个核,所有核都支持相同的类或不同的核支持不同的类。例如,在具有单独图形和通用核的处理器中,旨在主要用于图形和/或科学计算的图形核之一可以仅支持a类,而一个或多个通用核可以是具有无序执行和寄存器重命名的高性能通用核,旨在用于仅支持b类的通用计算。另一个不具有单独图形核的处理器可以包括支持a类和b类两者的一个或多个通用有序或无序核。当然,在不同实施例中,来自一类的特征也可以在另一类中实现。用高级语言编写的程序将被放置(例如,及时jit编译或静态编译)成各种不同的可执行形式,包括:1)仅具有用于执行的目标处理器所支持的类的指令的形式;或2)具有使用所有类的指令的不同组合编写的备选例程并具有控制流程代码的形式,该控制流程代码基于当前正在执行代码的处理器所支持的指令来选择要执行的例程。
204.示例性特定向量友好指令格式
205.图5a是示出根据实施例的示例性特定向量友好指令格式的框图。图5a示出了特定向量友好指令格式1200,该格式从以下意义上来说是特定的,例如该格式指定字段的位置、大小、解析和顺序、以及这些字段中的一些字段的值。特定向量友好指令格式1200可用于扩展x86指令集,因此一些字段与现有x86指令集及其扩展(例如avx)中使用的字段类似或相同。此格式与具有扩展的现有x86指令集的前缀编码字段、真实操作码字节字段、mod r/m字段、sib字段、位移字段以及立即数字段保持一致。示出了5a中的字段所映射的图8中的字段。
206.应当理解,尽管出于说明性目的,在通用向量友好指令格式1100的上下文中参考特定向量友好指令格式1200描述了实施例,但是本发明不限于特定向量友好指令格式1200,除非声明的情况下。例如,通用向量友好指令格式1100考虑了各种字段的各种可能大小,而特定向量友好指令格式1200被示为具有特定大小的字段。作为具体示例,虽然数据元素宽度字段1164被示为特定向量友好指令格式1200中的一位字段,但是本发明不限于此(即,通用向量友好指令格式1100考虑其他大小的数据元素宽度字段1164)。
207.特定向量友好指令格式1200包括以下按照图5a中所示的顺序列出的以下字段。
208.evex前缀(字节0-3)1202-以四字节形式编码。
209.格式字段1140(evex字节0,位[7:0])-第一字节(evex字节0)是格式字段1140并且在一个实施例中它包含0x62(用于区分向量友好指令格式的唯一值)。
[0210]
第二至第四字节(evex字节1-3)包括提供特定能力的多个位字段。
[0211]
rex字段1205(evex字节1,位[7-5])-由evex.r位字段(evex字节1,位[7]-r)、evex.x位字段(evex字节1,位[6]-x)和evex.b位字段(evex字节1,位[5]-b)组成。evex.r、evex.x和evex.b位字段提供与相应vex位字段相同的功能,并使用1的补码形式编码,即zmm0被编码为1111b,zmm15被编码为0000b。指令的其他字段对寄存器索引的低三位进行编
码,如本领域中已知的(rrr、xxx和bbb),因此可以通过添加evex.r、evex.x和evex.b来形成rrrr、xxxx和bbbb。
[0212]
rex'1210a-这是rex'字段1210的第一部分,并且是evex.r'位字段(evex字节1,位[4]-r'),其用于对扩展32寄存器组的高16或低16位进行编码。在一个实施例中,该位以及如下所示的其它位以位反转的格式来存储,以与bound指令进行区分(在众所周知的x86 32位模式中),其真实操作码字节为62,但是在mod r/m字段(下面描述)中不接受mod字段中的值11;替代实施例不以反转格式存储这个和下面的其他所指示的位。值1用于对低16位寄存器编码。即,r'rrrr是通过组合evex.r'、evex.r和来自其他字段的其他rrr形成的。
[0213]
操作码映射字段1215(evex字节1,位[3:0]-mmmm)-其内容对隐含的前导操作码字节(0f、0f 38或0f 3)进行编码。
[0214]
数据元素宽度字段1164(evex字节2,位[7]-w)-由符号evex.w表示。evex.w用于定义数据类型的粒度(大小)(32位数据元素或64位数据元素)。
[0215]
evex.vvvv 1220(evex字节2,位[6:3]-vvvv)-evex.vvvv的作用可以包括以下内容:1)evex.vvvv对第一个源寄存器操作数进行编码,以反转(1的补码)形式指定,并且对有2个或更多源操作数的指令有效;2)evex.vvvv对目标寄存器操作数进行编码,以1的补码形式指定用于某些向量移位;或者3)evex.vvvv不对任何操作数进行编码,该字段是保留的,并且应该包含1111b。因此,evex.vvvv字段1220对以反转(1的补码)形式存储的第一源寄存器指定符的4个低阶位进行编码。取决于指令,使用额外不同的evex位字段将指定符大小扩展为32个寄存器。
[0216]
evex.u 1168类字段(evex字节2,位[2]-u)-如果evex.u=0,则表示a类或evex.u0;如果evex.u=1,则表示b类或evex.u1。
[0217]
前缀编码字段1225(evex字节2,位[1:0]-pp)-为基本操作字段提供附加位。除了以evex前缀格式提供对传统sse指令的支持之外,这还具有压缩simd前缀的益处(不是要求字节表示simd前缀,evex前缀仅需要2位)。在一个实施例中,为了支持在传统格式和evex前缀格式中使用simd前缀(66h,f2h,f3h)的传统sse指令,将这些传统simd前缀编码到simd前缀编码字段中;并且在运行时在被提供给解码器的可编程逻辑阵列(pla)之前扩展为传统simd前缀,因此pla可以执行这些传统指令的传统和evex格式而无需修改。虽然较新的指令可以直接使用evex前缀编码字段的内容作为操作码扩展,但是某些实施例以类似的方式扩展以保持一致性,但允许这些传统simd前缀指定不同的含义。替代实施例可以重新设计pla以支持2位simd前缀编码,因此不需要扩展。
[0218]
α字段1152(evex字节3,位[7]-eh;也称为evex.eh、evex.rs、evex.rl、evex.写掩码控制、以及evex.n;也用α示出)-如前所述,该字段是特定于上下文的。
[0219]
β字段1154(evex字节3,位[6:4]-sss,也称为evex.s
2-0
、evex.r
2-0
、evex.rr1、evex.ll0、evex.llb;也用β示出)-如前所述,该字段是特定于上下文的。
[0220]
rex'字段1210-这是rex'字段的剩余部分,并且是evex.v'位字段(evex字节3,位[3]-v'),其可用于对扩展32寄存器组的高16或低16位编码。该位以位反转格式存储。值1用于对低16位寄存器编码。即,通过组合evex.v'、evex.vvvv来形成v'vvvv。
[0221]
写掩码字段1170(evex字节3,位[2:0]-kkk)-如前所述,其内容指定写掩码寄存器中的寄存器的索引。在一个实施例中,特定值evex.kkk=000具有特殊行为,暗示没有写掩
码用于特定指令(这可以以各种方式实现,包括使用硬连线到所有的写掩码或绕过掩蔽硬件的硬件)。
[0222]
真实操作码字段1230(字节4)也称为操作码字节。在该字段中指定部分操作码。
[0223]
mod r/m字段1240(字节5)包括mod字段1242、reg字段1244和r/m字段1246。如前所述,mod字段1242的内容区分存储器访问和非存储器访问操作。reg字段1244的作用可归纳为两种情况:对目的地寄存器操作数或源寄存器操作数编码,或被视为操作码扩展而不用于对任何指令操作数编码。r/m字段1246的作用可以包括以下内容:对引用存储器地址的指令操作数编码,或对目的地寄存器操作数或源寄存器操作数编码。
[0224]
缩放、索引、基准(sib)字节(字节6)-如前所述,sib 1250的内容用于存储器地址生成。sib.xxx 1254和sib.bbb 1256-这些字段的内容先前已经相关于寄存器索引xxxx和bbbb提及了。
[0225]
位移字段1162a(字节7-10)-当mod字段1242包含10时,字节7-10是位移字段1162a,并且其工作方式与传统的32位位移(disp32)相同并且以字节粒度工作。
[0226]
位移因子字段1162b(字节7)-当mod字段1242包含01时,字节7是位移因子字段1162b。该字段的位置与传统x86指令集8位位移(disp8)的位置相同,其以字节粒度工作。由于disp8是符号扩展的,它只能解决-128到127个字节之间的偏移量;就64字节缓存行而言,disp8使用8位,只能被设置为4个非常有用的值-128、-64、0和64;因为经常需要更大的范围,所以使用disp32;但是,disp32需要4个字节。与disp8和disp32相比,位移因子字段1162b是disp8的重新解析;当使用位移因子字段1162b时,实际位移由位移因子字段的内容乘以存储器操作数访问的大小(n)来确定。这种类型的位移称为disp8*n。这减少了平均指令长度(用于位移的单个字节,但具有更大的范围)。这种压缩位移基于有效位移是存储器访问的粒度的倍数的假设,因此,不需要对地址偏移的冗余低阶位进行编码。即,位移因子字段1162b代替传统x86指令集8位位移。因此,位移因子字段1162b以与x86指令集8位位移相同的方式被编码(因此modrm/sib编码规则没有变化),唯一的例外是disp8被过加载到disp8*n。即,编码规则或编码长度没有变化,而只是硬件对位移值的解析变化(需要用存储器操作数的大小来缩放位移以获得逐字节地址偏移)。立即数字段1172如前所述操作。
[0227]
完整操作码字段
[0228]
图5b是示出根据本发明一个实施例的构成完整操作码字段1174的特定向量友好指令格式1200的字段的框图。具体地,完整操作码字段1174包括格式字段1140、基本操作字段1142和数据元素宽度(w)字段1164。基本操作字段1142包括前缀编码字段1225、操作码映射字段1215和真实操作码字段1230。
[0229]
寄存器索引字段
[0230]
图5c是示出根据一个实施例的构成寄存器索引字段1144的特定向量友好指令格式1200的字段的框图。具体地,寄存器索引字段1144包括rex字段1205、rex'字段1210、modr/m.reg字段1244、modr/m.r/m字段1246、vvvv字段1220、xxx字段1254和bbb字段1256。
[0231]
增强操作字段
[0232]
图5d是示出根据一个实施例的构成增强操作字段1150的特定向量友好指令格式1200的字段的框图。当类(u)字段1168包含0时,它表示evex.u0(a类1168a);当类(u)字段1168包含1时,它表示evex.u1(b类1168b)。当u=0并且mod字段1242包含11(表示无存储器
访问操作)时,α字段1152(evex字节3,位[7]-eh)被解析为rs字段1152a。当rs字段1152a包含1(舍入1152a.1)时,β字段1154(evex字节3,位[6:4]-sss)被解析为舍入控制字段1154a。舍入控制字段1154a包括一位sae字段1156和两位舍入操作字段1158。当rs字段1152a包含0(数据变换1152a.2)时,β字段1154(evex字节3,位[6:4]-sss)被解析为三位数据变换字段1154b。当u=0并且mod字段1242包含00、01或10(表示存储器访问操作)时,α字段1152(evex字节3,位[7]-eh)被解析为逐出提示(eh)字段1152b,β字段1154(evex字节3,位[6:4]-sss)被解析为三位数据操纵字段1154c。
[0233]
当u=1时,α字段1152(evex字节3,位[7]-eh)被解析为写掩码控制(z)字段1152c。当u=1并且mod字段1242包含11(表示无存储器访问操作)时,β字段1154的一部分(evex字节3,位[4]-s0)被解析为rl字段1157a;当rl字段1157a包含1(舍入1157a.1)时,β字段1154的其余部分(evex字节3,位[6-5]-s
2-1
)被解析为舍入操作字段1159a,而当rl字段1157a包含0(vsize 1157.a2)时,β字段1154的其余部分(evex字节3,位[6-5]-s
2-1
)被解析为向量长度字段1159b(evex字节3,位[6-5]-l
1-0
)。当u=1并且mod字段1242包含00、01或10(表示存储器访问操作)时,β字段1154(evex字节3,位[6:4]-sss)被解析为向量长度字段1159b(evex字节3,位[6-5]-l
1-0
)和广播字段1157b(evex字节3,位[4]-b)。
[0234]
示例性寄存器架构
[0235]
图6是根据一个实施例的寄存器架构1300的框图。在所示的实施例中,存在512位宽的32个向量寄存器1310;这些寄存器引用为zmm0到zmm31。低16个zmm寄存器的低阶256位覆盖在寄存器ymm0-16上。低16个zmm寄存器的低阶128位(ymm寄存器的低阶128位)覆盖在寄存器xmm0-15上。特定向量友好指令格式1200对这些覆盖的寄存器文件进行操作,如下表所示。
[0236][0237][0238]
即,向量长度字段1159b在最大长度和一个或多个其他较短长度之间进行选择,其中每个这样的较短长度是前一长度的一半长度;没有向量长度字段1159b的指令模板对最大向量长度操作。此外,在一个实施例中,特定向量友好指令格式1200的b类指令模板对打包或标量单/双精度浮点数据和打包或标量整数数据进行操作。标量操作是对zmm/ymm/xmm寄存器中的最低阶数据元素位置执行的操作;根据实施例,高阶数据元素位置保持与指令
之前相同或归零。
[0239]
写掩码寄存器1315-在所示实施例中,存在8个写掩码寄存器(k0到k7),各自大小为64位。在替换实施例中,写掩码寄存器1315的大小为16位。如前所述,在一个实施例中,向量掩码寄存器k0不可以用作写掩码;当通常表示k0的编码用于写掩码时,它选择0xffff的硬连线写掩码,有效地禁用该指令的写掩码。
[0240]
通用寄存器1325-在所示实施例中,有16个64位通用寄存器,它们与现有的x86寻址模式一起用于寻址存储器操作数。这些寄存器由名称rax,rbx,rcx,rdx,rbp,rsi,rdi,rsp和r8至r15引用。
[0241]
标量浮点堆栈寄存器文件(x87堆栈)1345,其上混叠有mmx打包整数平坦寄存器文件1350-在所示实施例中,x87堆栈是用于使用x87指令集扩展对32/64/80位浮点数据执行标量浮点运算的八元素堆栈;而mmx寄存器用于对64位打包整数数据执行操作,以及保持用于mmx和xmm寄存器之间执行的某些操作的操作数。
[0242]
替代实施例可以使用更宽或更窄的寄存器。另外,替代实施例可以使用更多、更少或不同的寄存器文件和寄存器。
[0243]
示例性核架构、处理器和计算机架构
[0244]
处理器核可以以不同的方式实现,可以被实现用于不同的目的,并且可以在不同的处理器中实现。例如,这种核的实现方式可以包括:1)用于通用计算的通用有序核;2)用于通用计算的高性能通用无序核;3)主要用于图形和/或科学(吞吐量)计算的专用核。不同处理器的实现方式可以包括:1)cpu,其包括旨在用于通用计算的一个或多个通用有序核和/或用于通用计算的一个或多个通用无序核;2)协处理器,包括主要用于图形和/或科学(吞吐量)的一个或多个专用核。这种不同的处理器导致不同的计算机系统架构,其可以包括:1)在与cpu不同的芯片上的协处理器;2)在与cpu相同的封装中的单独管芯(die)上的协处理器;3)在与cpu相同的管芯上的协处理器(在这种情况下,这种协处理器有时被称为专用逻辑(例如,集成图形和/或科学(吞吐量)逻辑)或被称为专用核);4)片上系统,其可以在同一管芯上包括所描述的cpu(有时被称为(一个或多个)应用核或(一个或多个)应用处理器)、以上描述的协处理器、和附加功能。接下来描述示例性核架构,之后描述示例性处理器和计算机架构。
[0245]
示例性核架构
[0246]
有序和无序的核框图
[0247]
图7a是示出根据实施例的示例性有序流水线和示例性寄存器重命名、无序发布/执行流水线两者的框图。图7b是示出根据实施例的要被包括在处理器中的有序架构核和示例性寄存器重命名、无序发布/执行架构核两者的示例性实施例的框图。图7a-b中的实线框示出了有序流水线和有序核,而可选择添加的虚线框示出了寄存器重命名、无序发布/执行流水线和核。假定有序方面是无序方面的子集,将描述无序方面。
[0248]
在图7a中,处理器流水线1400包括提取(fetch)阶段1402、长度解码阶段1404、解码阶段1406、分配阶段1408、重命名阶段1410、调度(也被称为调派或发布)阶段1412、寄存器读取/存储器读取阶段1414、执行阶段1416、写回/存储器写入阶段1418、异常处理阶段1422、和提交阶段(commit stage)1424。
[0249]
图7b示出了处理器核1490,其包括耦合到执行引擎单元1450的前端单元1430,并
且执行引擎单元1450和前端单元1430两者都耦合到存储器单元1470。核1490可以是精简指令集计算(risc)核、复杂指令集计算(cisc)核、超长指令字(vliw)核、或混合或替代的核类型。作为另一种选择,核1490可以是专用核,例如,网络或通信核、压缩引擎、协处理器核、通用计算图形处理单元(gpgpu)核、图形核等。
[0250]
前端单元1430包括耦合到指令缓存单元1434的分支预测单元1432,指令缓存单元1434耦合到指令转换后备缓冲器(tlb)单元1436,指令转换后备缓冲器1436耦合到指令提取单元1438,指令提取器1438耦合到解码单元1440。解码单元1440(或解码器)可以解码指令,并且生成作为输出的一个或多个微操作、微代码入口点、微指令、其他指令、或其他控制信号,它们解码自原始指令或以其他方式反映原始指令或导出自原始指令。可以使用各种不同的机制来实现解码单元1440。合适机制的示例包括但不限于查找表、硬件实现方式、可编程逻辑阵列(pla)、微代码只读存储器(rom)等。在一个实施例中,核1490包括微代码rom或存储用于某些宏指令的微代码的其他介质(例如,在解码单元1440中或在前端单元1430内)。解码单元1440耦合到执行引擎单元1450中的重命名/分配器单元1452。
[0251]
执行引擎单元1450包括重命名/分配器单元1452,其耦合到引退(retirement)单元1454和一组一个或多个调度器单元1456。(一个或多个)调度器单元1456表示任意数目的不同调度器,包括,预留站(reservations station)、中央指令窗等。(一个或多个)调度器单元1456耦合到(一个或多个)物理寄存器文件单元1458。每个物理寄存器文件单元1458表示一个或多个物理寄存器文件,这些物理寄存器文件中的不同的物理寄存器文件存储一个或多个不同的数据类型,例如,标量整数、标量浮点、打包整数、打包浮点、向量整数、向量浮点、状态(例如,作为要执行的下一指令的地址的指令指针)等。在一个实施例中,物理寄存器文件单元1458包括向量寄存器单元、写入掩码寄存器单元、和标量寄存器单元。这些寄存器单元可以提供架构向量寄存器、向量掩码寄存器、和通用寄存器。(一个或多个)物理寄存器文件单元1458与引退单元1454重叠,以说明寄存器重命名和无序执行可以被实现的各种方式(例如,使用(一个或多个)重新排序缓冲器和(一个或多个)引退寄存器文件;使用(一个或多个)未来文件、(一个或多个)历史缓冲器、和(一个或多个)引退寄存器文件;使用寄存器图和寄存器池;等等)。引退单元1454和(一个或多个)物理寄存器文件单元1458耦合到(一个或多个)执行集群1460。(一个或多个)执行集群1460包括一组一个或多个执行单元1462和一组一个或多个存储器访问单元1464。执行单元1462可以对各种类型的数据(例如,标量浮点、打包整数、打包浮点、向量整数、向量浮点)执行各种操作(例如,移位、加法、减法、乘法)。虽然一些实施例可以包括专用于特定功能或功能集的多个执行单元,但是其他实施例可以仅包括一个执行单元或者全部执行所有功能的多个执行单元。(一个或多个)调度器单元1456、(一个或多个)物理寄存器文件单元1458、和(一个或多个)执行集群1460被示为可能是多个,因为某些实施例针对某些类型的数据/操作创建单独的流水线(例如,标量整数流水线、标量浮点/打包整数/打包浮点/向量整数/向量浮点流水线、和/或存储器访问流水线,其中每个流水线都有自己的调度器单元、物理寄存器文件单元、和/或执行集群-并且在单独的存储器访问流水线的情况下,其中仅该流水线的执行集群具有(一个或多个)存储器访问单元1464的某些实施例被实现)。还应理解,在使用单独的流水线的情况下,这些流水线中的一个或多个可以是无序发布/执行而其余的是有序发布/执行的。
[0252]
该组存储器访问单元1464耦合到存储器单元1470,存储器单元1470包括耦合到数
据缓存单元1474的数据tlb单元1472,其中数据缓存单元1474耦合到2级(l2)缓存单元1476。在一个示例性实施例中,存储器访问单元1464可以包括加载单元、存储地址单元、和存储数据单元,其中的每个单元耦合到存储器单元1470中的数据tlb单元1472。指令缓存单元1434还耦合到存储器单元1470中的2级(l2)缓存单元1476。l2缓存单元1476耦合到一个或多个其他级别的缓存并最终耦合到主存储器。
[0253]
作为示例,示例性寄存器重命名的无序发布/执行核架构可以按如下方式实现流水线1400:1)指令提取1438执行提取和长度解码阶段1402和1404;2)解码单元1440执行解码阶段1406;3)重命名/分配器单元1452执行分配阶段1408和重命名阶段1410;4)(一个或多个)调度器单元1456执行调度阶段1412;5)(一个或多个)物理寄存器文件单元1458和存储器单元1470执行寄存器读取/存储器读取阶段1414;执行集群1460执行执行阶段1416;6)存储器单元1470和(一个或多个)物理寄存器文件单元1458执行写回/存储器写入阶段1418;7)异常处理阶段1422中可能涉及各个单元;8)引退单元1454和(一个或多个)物理寄存器文件单元1458执行提交阶段1424。
[0254]
核1490可以支持一个或多个指令集(例如,x86指令集(具有已经添加有较新版本的一些扩展);美国加利福尼亚州桑尼维尔市的mip technologies的mips指令集;美国加利福尼亚州桑尼维尔市的arm holdings的arm指令集(具有可选的附加扩展,例如,neon)),包括本文所描述的(一个或多个)指令。在一个实施例中,核1490包括支持打包数据指令集扩展(例如,avx1、avx2)的逻辑,从而允许要使用打包数据来执行的许多多媒体应用所使用的操作。
[0255]
应理解,核可以支持多线程(执行两个或更多个并行的操作集或线程集),并且可以以各种方式这样做,这些方式包括时间分片多线程、同时多线程(其中,单个物理核为该物理核正在同时进行多线程的每个线程提供逻辑核)、或它们的组合(例如,时间分片的提取和解码以及此后同时的多线程,例如,在超线程技术中)。
[0256]
虽然在无序执行的上下文中描述了寄存器重命名,但应理解,寄存器重命名可以用在有序架构中。虽然所示处理器的实施例还包括单独的指令和数据缓存单元1434/1474以及共享的l2缓存单元1476,但替代实施例可以具有用于指令和数据两者的单个内部缓存,例如,1级(l1)内部缓存、或多级内部缓存。在一些实施例中,系统可以包括内部缓存和外部缓存的组合,其中外部缓存在核和/或处理器外部。替代地,全部缓存可以在核和/或处理器外部。
[0257]
具体示例性有序核架构
[0258]
图8a-b示出了更具体的示例性有序核架构的框图,其中核将是芯片中的若干逻辑块(可能包括相同类型和/或不同类型的其他核)中的一个逻辑块。逻辑块通过高带宽互连网络(例如,环形网络)与某固定功能逻辑、存储器i/o接口、和其他必要的i/o逻辑通信,这取决于应用。
[0259]
图8a是根据实施例的单个处理器核以及其与管芯上互连网络1502的连接以及其在2级(l2)缓存1504的本地子集的框图。在一个实施例中,指令解码器1500支持具有打包数据指令集扩展的x86指令集。l1缓存1506允许低等待时间的访问以将存储器缓存到标量和向量单元中。虽然在一个实施例中(为了简化设计),标量单元1508和向量单元1510使用单独的寄存器组(分别为标量寄存器1512和向量寄存器1514),并且它们之间传输的数据被写
入到存储器然后从1级(l1)缓存1506中读回,但是替代实施例可以使用不同的方法(例如,使用单个寄存器组或包括允许数据在两个寄存器文件(file)之间传输而不被写入和读回的通信路径)。
[0260]
l2缓存的本地子集1504是全局l2缓存的一部分,全局l2缓存被划分为分开的本地子集,每个处理器核一个本地子集。每个处理器核具有到其自己的l2缓存的本地子集1504的直接访问路径。由处理器核读取的数据被存储在其l2缓存子集1504中并且可以与访问它们自己的本地l2缓存子集的其他处理器核并行地被快速访问。由处理器核写入的数据被存储在其自己的l2缓存子集1504中,并且在需要的情况下被从其他子集冲刷(flushed)。环形网络确保共享数据的一致性。环形网络是双向的,以允许诸如处理器核、l2缓存、和其他逻辑块之类的代理在芯片内彼此通信。每个环形数据路径在每个方向上为1012位宽。
[0261]
图8b是根据实施例的图8a中的处理器核的一部分的展开图。图8b包括作为l1缓存1506的一部分的l1数据缓存1506a,以及关于向量单元1510和向量寄存器1514的更多细节。具体地,向量单元1510是16宽的向量处理单元(vpu)(参见16宽的alu 1528),它执行整数、单精度浮点、和双精度浮点指令中的一个或多个。vpu支持通过调配单元1520对寄存器输入进行调配,使用数字转换单元1522a-b进行数字转换,以及使用复制单元1524对存储器输入进行复制。写入掩码寄存器1526允许预测得到向量写入。
[0262]
图9是根据实施例的可具有不止一个核、可具有集成存储器控制器、且可具有集成图形的处理器1600的框图。图9中的实线框示出了具有单核1602a、系统代理单元1610、和一组一个或多个总线控制器单元1616的处理器1600;但虚线框的可选添加示出了具有以下各项的替代处理器1600:多个核1602a-n、系统代理单元1610中的一组一个或多个集成存储器控制器单元1614、以及专用逻辑1608。
[0263]
因此,处理器1600的不同实现方式可以包括:1)具有专用逻辑1608的cpu(其中专用逻辑是集成图形和/或科学(吞吐量)逻辑(其可以包括一个或多个核)),以及核1602a-n(其是一个或多个通用核(例如,通用有序核、通用无序核、或两者的组合);2)具有核1602a-n的协处理器(其中核1602a-n是主要用于图形和/或科学(吞吐量)的大量专用核);3)具有核1602a-n的协处理器(其中核1602a-n是大量通用有序核)。因此,处理器1600可以是通用处理器、协处理器、或专用处理器,例如,网络或通信处理器、压缩引擎、图形处理器、gpgpu(通用图形处理单元)、高吞吐量的许多集成核(mic)协处理器(包括30个或更多个核)、嵌入式处理器等等。处理器可以在一个或多个芯片上实现。处理器1600可以是一个或多个衬底的一部分和/或可以通过使用多种工艺技术(例如,bicmos、cmos或nmos)中的任何一种来在一个或多个衬底上实现。
[0264]
存储器层级包括核内的一个或多个级别的缓存、一组或一个或多个共享缓存单元1606、以及耦合到该组集成存储器控制器单元1614的外部存储器(未示出)。该组共享缓存单元1606可以包括一个或多个中级缓存(例如,2级(l2)、3级(l3)、4级(l4)),或其他级别的缓存、最后级别缓存(llc)、和/它们的组合。虽然在一个实施例中,基于环的互连单元1612对专用逻辑1608(集成图形逻辑1608是专用逻辑的示例并且在本文中也被称为专用逻辑)、该组共享缓存单元1606、以及系统代理单元1610/(一个或多个)集成存储器控制器单元1614进行互连,但替代实施例可以使用任何数目的众所周知的技术来互连这些单元。在一个实施例中,在一个或多个缓存单元1606和核1602a-n之间维持一致性。
[0265]
在一些实施例中,核1602a-n中的一个或多个核能够进行多线程。系统代理1610包括协调和操作核1602a-n的那些组件。系统代理单元1610可以包括例如电源控制单元(pcu)和显示单元。pcu可以是或可以包括调节核1602a-n和专用逻辑1608的功率状态所需的逻辑和组件。显示单元用于驱动一个或多个外部连接的显示器。
[0266]
核1602a-n在架构指令集方面可以是同构的或异构的;也就是说,核1602a-n中的两个或更多个核可能能够执行相同的指令集,而其他核可能能够执行仅该指令集的子集或不同的指令集。
[0267]
示例性计算机架构
[0268]
图10-13是示例性计算机架构的框图。用于膝上型计算机、台式计算机、手持式pc、个人数字助理、工程工作站、服务器、网络设备、网络集线器、交换机、嵌入式处理器、数字信号处理器(dsp)、图形设备、视频游戏设备、机顶盒、微控制器、蜂窝电话、便携式媒体播放器、手持设备、和各种其他电子设备的本领域已知的其他系统设计和配置也是适合的。通常,能够结合本文所公开的处理器和/或其他执行逻辑的各种各样的系统或电子设备通常是合适的。
[0269]
现在参考图10,示出了根据一个实施例的系统1700的框图。系统1700可以包括一个或多个处理器1710、1715,其耦合到控制器集线器1720。在一个实施例中,控制器集线器1720包括图形存储器控制器集线器(gmch)1790和输入/输出集线器(ioh)1750(可以在分开的芯片上);gmch 1790包括耦合到存储器1740和协处理器1745的存储器和图形控制器;ioh 1750将输入/输出(i/o)设备1760耦合到gmch 1790。替代地,存储器和图形控制器中的一个或两个被集成在处理器内(如本文所描述的),存储器1740和协处理器1745直接耦合到处理器1710,以及包括ioh 1750的单个芯片中的控制器集线器1720。
[0270]
图10中用虚线表示附加处理器1715的可选性质。每个处理器1710、1715可以包括本文所描述的处理核中的一个或多个,并且可以是处理器1600的某个版本。
[0271]
存储器1740可以是例如动态随机存取存储器(dram)、相变存储器(pcm)、或这两者的组合。对于至少一个实施例,控制器集线器1720经由多点总线(multi-drop bus)与(一个或多个)处理器1710、1715通信,该多点总线例如是前端总线(fsb)、诸如quickpath互连(qpi)之类的点对点接口、或类似的连接1795。
[0272]
在一个实施例中,协处理器1745是专用处理器,例如,高吞吐量mic处理器、网络或通信处理器、压缩引擎、图形处理器、gpgpu、嵌入式处理器等。在一个实施例中,控制器集线器1720可以包括集成图形加速器。
[0273]
在物理资源1710、1715之间在包括架构特性、微架构特性、热特性、功耗特性等的指标度量的范围方面可存在各种差异。
[0274]
在一个实施例中,处理器1710执行控制一般类型的数据处理操作的指令。嵌入在指令内的可以是协处理器指令。处理器1710将这些协处理器指令识别为应该由所附接的协处理器1745执行的类型。因此,处理器1710将这些协处理器指令(或表示协处理器指令的控制信号)发布到协处理器总线或其它互连上,以到协处理器1745。(一个或多个)协处理器1745接受并执行所接收的协处理器指令。
[0275]
现在参考图11,示出了根据实施例的第一更具体的示例性系统1800的框图。如图11所示,多处理器系统1800是点对点互连系统,并且包括经由点对点互连1850耦合的第一
处理器1870和第二处理器1880。处理器1870和1880中的每一个处理器可以是处理器1600的某个版本。在一个实施例中,处理器1870和1880分别是处理器1710和1715,而协处理器1838是协处理器1745。在另一个实施例中,处理器1870和1880分别是处理器1710和协处理器1745。
[0276]
处理器1870和1880被示出为分别包括集成存储器控制器(imc)单元1872和1882。处理器1870还包括作为其总线控制器单元的一部分的点对点(p-p)接口1876和1878;类似地,第二处理器1880包括p-p接口1886和1888。处理器1870、1880可以使用p-p接口电路1878、1888经由点对点(p-p)接口1850来交换信息。如图11所示,imc 1872和1882将处理器耦合到相应的存储器(即,存储器1832和存储器1834),这些存储器可以是本地附接到相应处理器的主存储器的一部分。
[0277]
处理器1870、1880可以各自使用点对点接口电路1876、1894、1886、1898经由各个p-p接口1852、1854来与芯片集1890交换信息。芯片集1890可以可选地经由高性能接口1892来与协处理器1838交换信息。在一个实施例中,协处理器1838是专用处理器,例如,高吞吐量mic处理器、网络或通信处理器、压缩和/或解压缩引擎、图形处理器、gpgpu、嵌入式处理器等。
[0278]
共享缓存(未示出)可以被包括在任一处理器中,或者在两个处理器外部但经由p-p互连与处理器连接,使得在处理器进入低功率模式的情况下,任一或两个处理器的本地缓存信息可以被存储在共享缓存中。
[0279]
芯片集1890可以经由接口1896耦合到第一总线1816。在一个实施例中,第一总线1816可以是外围组件互连(pci)总线,或诸如pci express总线或另一第三代i/o互连总线之类的总线,但本公开的范围不限于此。
[0280]
如图11所示,各种i/o设备1814可以耦合到第一总线1816,以及将第一总线1816耦合到第二总线1820的总线桥1818。在一个实施例中,一个或多个附加处理器1815(例如,协处理器、高吞吐量mic处理器、gpgpu、加速器(例如,图形加速器或数字信号处理(dsp)单元)、现场可编程门阵列、或任何其他处理器)耦合到第一总线1816。在一个实施例中,第二总线1820可以是低引脚数(lpc)总线。在一个实施例中,各种设备可以耦合到第二总线1820,包括,例如键盘和/或鼠标1822、通信设备1827、和诸如磁盘驱动器或其他大容量存储设备之类的储存装置1828(其可以包括指令/代码和数据1830)。此外,音频i/o 1824可以耦合到第二总线1820。注意,可能有其他架构。例如,代替图11的点对点架构,系统可以实现多点(multi-drop)总线或其他这样的架构。
[0281]
现在参考图12,示出了根据本发明的实施例的第二更具体的示例性系统1900的框图。图11和12中的相似的元件具有相似的附图标记,并且图11中的某些方面已从图12中省略,以避免模糊图12的其他方面。
[0282]
图12示出了处理器1870、1880可以分别包括集成存储器和i/o控制逻辑(“cl”)1872和1882。因此,cl 1872、1882包括集成存储器控制器单元并包括i/o控制逻辑。图12示出了不仅存储器1832、1834耦合到cl1872、1882,而且i/o设备1914也耦合到控制逻辑1872、1882。传统(legacy)i/o设备1915耦合到芯片集1890。
[0283]
现在参考图13,示出了根据实施例的soc 2000的框图。图13中的相似的元件具有相似的附图标记。此外,虚线框是更高级soc上的可选功能。在图13中,(一个或多个)互连单
元2002耦合到以下各项:应用处理器2010,其包括一组一个或多个核1602a-n(包括缓存单元1604a-n)和(一个或多个)共享缓存单元1606;系统代理单元1610;(一个或多个)总线控制器单元1616;(一个或多个)集成存储器控制器单元1614;一组或一个或多个协处理器2020,其可以包括集成图形逻辑、图像处理器、音频处理器和视频处理器;静态随机存取存储器(sram)单元2030;直接存储器存取(dma)单元2032;以及显示单元2040,用于耦合到一个或多个外部显示器。在一个实施例中,(一个或多个)协处理器2020包括专用处理器,例如,网络或通信处理器、压缩引擎、gpgpu、高吞吐量mic处理器、嵌入式处理器等。
[0284]
本文公开的机制的实施例可以以硬件、软件、固件或这些实现方法的组合来实现。实施例可以实现为在可编程系统上执行的计算机程序或程序代码,该可编程系统包括至少一个处理器,储存系统(包括易失性和非易失性存储器和/或储存元件),至少一个输入设备及至少一个输出设备。
[0285]
程序代码(例如图11中所示的代码1830)可以应用于输入指令以执行本文描述的功能并生成输出信息。输出信息可以以已知的方式应用于一个或多个输出设备。对于本技术,处理系统包括具有处理器的任何系统,例如,数字信号处理器(dsp)、微控制器、专用集成电路(asic)或微处理器。
[0286]
程序代码可以以高级过程或面向对象的编程语言实现,以与处理系统通信。如果需要,程序代码也可以用汇编语言或机器语言实现。实际上,本文描述的机制不限于任何特定编程语言的范围。在任何情况下,该语言可以是经编译或解析的语言。
[0287]
至少一个实施例的一个或多个方面可以通过存储在机器可读介质上的代表性指令来实现,该代表性指令表示处理器内的各种逻辑,当由机器读取时使得机器构造逻辑以执行本文所描述的技术。这种称为“ip核”的表示可以存储在有形机器可读介质上,并提供给各种客户或制造设施,以加载到实际制造逻辑或处理器的制造机器中。
[0288]
这样的机器可读储存介质可以包括但不限于由机器或设备制造或形成的物品的非暂时性有形布置,包括诸如硬盘之类的储存介质,任何其他类型的盘,包括软盘、光盘、光盘只读存储器(cd-rom)、光盘可擦写(cd-rw)和磁光盘、半导体设备(如只读存储器(rom))、随机存取存储器(ram)(如动态随机存取存储器(dram)、静态随机存取存储器(sram))、可擦除可编程只读存储器(eprom)、闪存、电可擦除可编程只读存储器(eeprom)、相变存储器(pcm)、磁卡或光学卡或适用于存储电子指令的任何其他类型的介质。
[0289]
因此,实施例还包括非暂时性实体机器可读介质,其包含指令或包含设计数据,例如硬件描述语言(hdl),其定义本文描述的结构、电路、装置、处理器和/或系统特征。这些实施例也可以被称为程序产品。
[0290]
仿真(包括二进制转换,代码变形等)
[0291]
在一些情况下,指令转换器可用于将指令从源指令集转换为目标指令集。例如,指令转换器可以转换(例如,使用静态二进制转换,包括动态编译的动态二进制转换)、变形、仿真或以其他方式将指令转换为要由核处理的一个或多个其他指令。指令转换器可以用软件、硬件、固件或其组合来实现。指令转换器可以在处理器上、处理器外或者部分在处理器上、部分在处理器外。
[0292]
图14是根据实施例的对照使用软件指令转换器将源指令集中的二进制指令转换为目标指令集中的二进制指令的框图。在所示实施例中,指令转换器是软件指令转换器,但
替代地,指令转换器可以用软件、固件、硬件、或其各种组合来实现。图14示出了采用高级语言2102的程序可以使用x86编译器2104来编译以生成x86二进制代码2106,其可以由具有至少一个x86指令集核的处理器2116本地执行。具有至少一个x86指令集核的处理器2116表示可以通过进行以下操作来执行与具有至少一个x86指令集核的intel处理器基本上相同的功能,从而实现与具有至少一个x86指令集核的intel处理器基本上相同的结果的任何处理器:兼容地执行或以其他方式处理(1)intel x86指令集核的指令集的大部分或者(2)目标为在具有至少一个x86指令集核的intel处理器上运行的应用或其他软件的目标代码版本。x86编译器2104表示可操作以生成x86二进制代码2106(例如,目标代码)的编译器,其中二进制代码可以在具有或不具有附加链接处理的情况下在具有至少一个x86指令集核的处理器2116上被执行。类似地,图14示出了采用高级语言2102的程序可以使用替代指令集编译器2108来编译以生成替代指令集二进制代码2110,该二进制代码可以由没有至少一个x86指令集核的处理器2114(例如,具有执行美国加利福尼亚州桑尼维尔市的mips technologies的mips指令集和/或执行美国加利福尼亚州桑尼维尔市的arm holdings的arm指令集的核的处理器)本地执行。指令转换器2112用于将x86二进制代码2106转换为可由不具有x86指令集核的处理器2114本地执行的代码。该转换后的代码不太可能与替代指令集二进制代码2110相同,因为很难制造出能够实现它的指令转换器;但是,转换后的代码将完成一般操作,并由来自替代指令集的指令组成。因此,指令转换器2112表示通过仿真、模拟、或任何其他过程来允许不具有x86指令集处理器或核的处理器或其他电子设备执行x86二进制代码2106的软件、固件、硬件、或其组合。
[0293]
示例
[0294]
在实施例中,一种装置包括:推测漏洞缓解硬件,来实现多个推测漏洞缓解机制中的一个或多个;以及推测漏洞检测硬件,来检测对于推测性执行攻击的漏洞并且向软件提供对于推测性执行攻击漏洞的指示。
[0295]
任何这样的实施例可包括以下方面中的任何一者。检测是基于指示出推测性执行攻击的条件的。所述指示包括预测。所述指示包括对于所述预测的置信水平。所述指示包括推测性执行攻击的类别。所述装置包括一个或多个寄存器来向软件提供所述指示。所述多个推测漏洞缓解机制中的一个或多个中的至少一个是所述软件可配置的。所述装置包括一个或多个寄存器来支持所述软件配置所述多个推测漏洞缓解机制中的一个或多个中的至少一个。所述一个或多个寄存器中的至少一个用于存储包括多个元素的权重向量,每个元素指示出多个权重之一来应用到所述多个推测漏洞缓解机制中的相应一个。所述装置包括指令解码器来对一个或多个指令解码以配置所述多个推测漏洞缓解机制中的一个或多个中的至少一个。所述多个推测漏洞缓解机制包括受限推测性执行模式。
[0296]
在实施例中,一种方法包括由处理器中的推测漏洞检测硬件检测所述处理器对于推测性执行攻击的漏洞;向软件提供对于推测性执行攻击漏洞的指示;并且由所述处理器中的推测漏洞缓解硬件实现多个推测漏洞缓解机制中的一个或多个。
[0297]
任何这样的实施例可包括以下方面中的任何一者。多个推测漏洞缓解机制中的一个或多个中的至少一个被默认地预配置。所述方法包括从所述软件接收配置信息来重配置所述多个推测漏洞机制中的一个或多个中的至少一个。接收所述配置信息包括执行一个或多个指令以重配置所述多个推测漏洞机制中的一个或多个中的至少一个。执行所述一个或
多个指令包括将所述配置信息加载到一个或多个寄存器中。所述一个或多个寄存器中的至少一个存储包括多个元素的权重向量,每个元素指示出多个权重之一来应用到所述多个推测漏洞机制中的相应一个。所述方法包括基于所述权重向量来动态地重配置所述多个推测漏洞机制中的相应一个。
[0298]
在实施例中,一种系统包括:存储器控制器,来将处理器核心耦合到存储器;以及所述处理器核心,来执行要由所述存储器控制器从所述存储器中的应用软件取得的指令,所述处理器核心包括:推测漏洞缓解硬件,来实现多个推测漏洞缓解机制中的一个或多个;以及推测漏洞检测硬件,来与所述指令的执行相联系地检测对于推测性执行攻击的漏洞,并且向系统软件提供对于推测性执行攻击漏洞的指示。
[0299]
任何这样的实施例可包括以下方面中的任何一者。所述系统软件响应于所述指示并且基于推测漏洞缓解策略而配置所述推测漏洞缓解硬件。
[0300]
在实施例中,一种装置包括:解码电路,用于对单个指令进行解码,所述单个指令用于缓解对于推测性执行攻击的漏洞;以及与所述解码电路相耦合的执行电路,该执行电路将响应于所述单个指令而被加固。
[0301]
任何这样的实施例可包括以下方面中的任何一者。所述单个指令指示出要被加固的所述执行电路的一个或多个微架构结构。所述单个指令指示出一个或多个条件,在所述条件下所述执行电路要被加固。所述单个指令指示出要被阻止的一个或多个微架构改变。所述单个指令指示出包括多个字段的加固模式向量,每个字段对应于多个加固机制之一。所述装置包括加固模式寄存器来存储包括多个字段的加固模式向量,每个字段对应于多个加固机制之一。所述单个指令指示出一个或多个前端结构要被加固。所述单个指令指示出所述执行电路的一个或多个后端结构要被加固。所述单个指令指示出所述执行电路的一个或多个存储器结构要被加固。所述单个指令指示出所述执行电路的一个或多个分支预测结构要被加固。所述单个指令指示出对缓存、缓冲器或者寄存器的改变要被阻止。所述单个指令指示出对分支预测状态的改变要被阻止。
[0302]
在实施例中,一种方法包括,由处理器对单个指令的第一调用进行解码,所述单个指令用于缓解对于推测性执行攻击的漏洞;并且响应于所述单个指令的第一调用,对所述处理器中的一个或多个微架构结构进行加固。
[0303]
任何这样的实施例可包括以下方面中的任何一者。所述单个指令指示出一个或多个条件,在所述条件下所述微架构结构中的一个或多个要被加固。所述单个指令指示出要被阻止的一个或多个微架构改变。所述单个指令指示出包括多个字段的加固模式向量,每个字段对应于多个加固机制之一。加固包括阻止对缓存、缓冲器或寄存器的改变。所述方法包括由所述处理器对所述单个指令的第二调用进行解码;并且响应于所述单个指令的第二调用,放松对所述一个或多个微架构结构的加固。
[0304]
在实施例中,一种非暂态机器可读介质,存储多个指令,包括单个指令,所述单个指令当被机器执行时,使得所述机器执行一种方法,该方法包括存储由所述单个指令指示的加固模式向量,所述加固模式向量包括多个字段,每个字段对应于多个加固机制之一;并且基于所述加固模式向量,对所述机器中的一个或多个微架构结构进行加固。
[0305]
任何这样的实施例可包括以下方面中的任何一者。所述方法包括阻止对缓存、缓冲器或寄存器的改变。
[0306]
在实施例中,一种装置包括:解码电路,用于对加载加固指令进行解码,所述加载加固指令用于缓解对于推测性执行攻击的漏洞;以及与所述解码电路相耦合的加载电路,其将响应于所述加载加固指令而被加固。
[0307]
任何这样的实施例可包括以下方面中的任何一者。所述加载电路将被加固以阻止加载操作被执行。所述加载电路将被加固以阻止加载操作基于要被所述加载操作加载的数据而留下边通道。所述加载电路将被加固以阻止依赖指令的执行,其中所述依赖指令依赖于要被加载操作加载的数据。所述加载电路将被加固以阻止依赖指令的执行留下边通道,其中所述依赖指令依赖于要被加载操作加载的数据。所述加载电路将被加固以阻止为要被加载操作加载的数据分配缓存线。所述加载电路的加固将响应于推测性加载指令的引退而被放松。所述加载电路的加固将响应于推测性加载操作变成非推测性的而被放松。所述加载电路的加固将响应于推测性加载操作基于分支条件的解决(resolution)而变成非推测性的而被放松。所述加载电路的加固将响应于推测性加载操作基于分支指令的引退而变成非推测性的而被放松。所述加载电路将被加固以阻止加载操作绕过存储操作。所述加载电路将被加固以阻止推测性数据被加载。所述加载电路将被加固以阻止推测性存储绕过。所述加载电路将被加固以防止加载时延取决于要加载的数据。
[0308]
在实施例中,一种方法包括:由处理器对加载加固指令进行解码,所述加载加固指令用于缓解对于推测性执行攻击的漏洞;并且响应于所述加载加固指令而对所述处理器中的加载电路进行加固。
[0309]
任何这样的实施例可包括以下方面中的任何一者。对所述加载电路进行加固包括阻止加载操作被执行。所述方法包括对加载指令进行解码;响应于所述加载指令而执行第一操作;响应于所述加载操作而阻止第二操作,其中阻止所述第二操作会阻止所述加载指令留下边通道。所述方法包括对加载指令进行解码;并且响应于所述加载指令的引退而放松对所述加载电路的加固。
[0310]
在实施例中,一种非暂态机器可读介质,存储多个指令,包括加载加固指令和加载指令,其中机器对所述多个指令的执行使得所述机器执行一种方法,该方法包括响应于所述加载加固指令而对所述机器中的加载电路进行加固;响应于所述加载指令而推测性地执行加固的加载操作;并且引退所述加载指令;并且响应于引退所述加载指令而放松对所述加载电路的加固。
[0311]
任何这样的实施例可包括以下方面中的任何一者。所述多个指令包括依赖指令,所述依赖指令依赖于要被所述加载指令加载的数据,并且对所述加载电路进行加固包括阻止所述依赖指令的执行。
[0312]
在实施例中,一种装置包括:解码电路,用于对存储加固指令进行解码,所述存储加固指令用于缓解对于推测性执行攻击的漏洞;以及与所述解码电路相耦合的存储电路,其将响应于所述存储加固指令而被加固。
[0313]
任何这样的实施例可包括以下方面中的任何一者。所述存储电路将被加固以阻止存储操作被执行。所述存储电路将被加固以阻止存储操作基于要被所述存储操作存储的数据而留下边通道。所述存储电路将被加固以阻止依赖指令的执行,其中所述依赖指令依赖于要被存储操作存储的数据。所述存储电路将被加固以阻止依赖指令的执行留下边通道,其中所述依赖指令依赖于来自存储操作的存储到加载转发的数据。所述存储电路将被加固
以阻止为要被存储操作存储的数据分配缓存线。所述存储电路的加固将响应于存储指令的引退而被放松。所述存储电路的加固将响应于存储操作变成非推测性的而被放松。所述存储电路的加固将响应于存储操作基于分支条件的解决而变成非推测性的而被放松。所述存储电路的加固将响应于存储操作基于分支指令的引退而变成非推测性的而被放松。所述存储电路将被加固以阻止加载操作绕过存储操作。所述存储电路将被加固以阻止推测性数据被存储。所述存储电路将被加固以阻止推测性存储绕过。所述存储电路将被加固以防止存储时延取决于要存储的数据。
[0314]
在实施例中,一种方法包括:由处理器对存储加固指令进行解码,所述存储加固指令用于缓解对于推测性执行攻击的漏洞;并且响应于所述存储加固指令而对所述处理器中的存储电路进行加固。
[0315]
任何这样的实施例可包括以下方面中的任何一者。对所述存储电路进行加固包括阻止存储操作被执行。所述方法包括对存储指令进行解码;响应于所述存储指令而执行第一操作;响应于所述存储操作而阻止第二操作,其中阻止所述第二操作会阻止所述存储指令留下边通道。所述方法包括对存储指令进行解码;并且响应于所述存储指令的引退而放松对所述存储电路的加固。
[0316]
在实施例中,一种非暂态机器可读介质,存储多个指令,包括存储加固指令和存储指令,其中机器对所述多个指令的执行使得所述机器执行一种方法,该方法包括响应于所述存储加固指令而对所述机器中的存储电路进行加固;响应于所述存储指令而推测性地执行加固的存储操作;引退所述存储指令;并且响应于引退所述存储指令而放松对所述存储电路的加固。
[0317]
任何这样的实施例可包括以下方面中的任何一者。所述多个指令包括依赖指令,所述依赖指令依赖于要被所述存储指令存储的数据,并且对所述存储电路进行加固包括阻止所述依赖指令的执行。
[0318]
在实施例中,一种装置包括:解码电路,用于对分支加固指令进行解码,所述分支加固指令用于缓解对于推测性执行攻击的漏洞;以及与所述解码电路相耦合的分支电路,其将响应于所述分支加固指令而被加固。
[0319]
任何这样的实施例可包括以下方面中的任何一者。所述分支电路将被加固以阻止推测性分支被采取。所述分支电路将被加固以阻止分支预测。所述分支电路将被加固以将分支误预测到安全位置。所述分支电路将被加固以对分支的阴影中的加载操作进行加固。所述分支电路将被加固以延迟分支。所述分支将被延迟,直到分支条件被解决为止。所述分支将被延迟,直到相应的分支指令被引退为止。所述分支将被延迟,直到分支终止指令被接收到为止。所述分支将被延迟,直到已知所述分支是安全的为止。
[0320]
在实施例中,一种方法包括:由处理器对分支加固指令进行解码,所述分支加固指令用于缓解对于推测性执行攻击的漏洞;并且响应于所述分支加固指令而对所述处理器中的分支电路进行加固。
[0321]
任何这样的实施例可包括以下方面中的任何一者。对所述分支电路进行加固包括阻止推测性分支被采取。对所述分支电路进行加固包括阻止分支预测。对所述分支电路进行加固包括将分支误预测到安全位置。对分支的阴影中的加载操作进行加固。对所述分支电路进行加固包括延迟分支。所述分支被延迟,直到分支条件被解决为止。所述分支被延
迟,直到相应的分支指令被引退为止。
[0322]
在实施例中,一种非暂态机器可读介质,存储多个指令,包括分支加固指令和分支指令,其中机器对所述多个指令的执行使得所述机器执行一种方法,该方法包括响应于所述分支加固指令而对所述机器中的分支电路进行加固;延迟响应于所述分支指令而要采取的分支;引退所述分支指令;并且响应于引退所述分支指令而放松对所述分支电路的加固。
[0323]
任何这样的实施例可包括以下方面中的任何一者。所述多个指令包括分支条件解决指令,所述分支条件解决指令将解决分支条件,并且延迟所述分支继续,直到所述分支条件被解决为止。
[0324]
在实施例中,一种装置包括:解码电路,用于对寄存器加固指令进行解码,所述寄存器加固指令用于缓解对于推测性执行攻击的漏洞;以及与所述解码电路相耦合的执行电路,其将响应于所述寄存器加固指令而被加固。
[0325]
任何这样的实施例可包括以下方面中的任何一者。所述执行电路将被加固以为寄存器设置围栏。所述执行电路将被加固以阻止指令的推测性执行加载寄存器。所述执行电路将被加固以阻止指令的推测性执行使用寄存器的内容。所述执行电路将被加固以阻止推测性操作使用寄存器的内容。
[0326]
所述执行电路将被加固以阻止从寄存器到依赖操作的数据转发。所述执行电路将被加固以阻止使用寄存器的内容的指令的执行留下边通道。所述执行电路将被加固以阻止基于使用寄存器的内容的指令的执行而分配缓存线。所述执行电路的加固将响应于加载寄存器的指令的引退而被放松。所述执行电路的加固将响应于使用寄存器的内容的指令的引退而被放松。所述执行电路的加固将响应于寄存器加载操作变成非推测性的而被放松。所述执行电路的加固将响应于使用寄存器的内容的操作变成非推测性的而被放松。所述执行电路的加固将响应于分支条件的解决而被放松。所述执行电路的加固将响应于围栏条件的解决而被放松。所述执行电路将被加固以防止操作的时延取决于寄存器中存储的数据。
[0327]
在实施例中,一种方法包括:由处理器对寄存器加固指令进行解码,所述寄存器加固指令用于缓解对于推测性执行攻击的漏洞;并且响应于所述寄存器加固指令而对所述处理器中的执行电路进行加固。
[0328]
任何这样的实施例可包括以下方面中的任何一者。对所述执行电路进行加固包括为寄存器设置围栏。对所述执行电路进行加固包括阻止推测性操作使用寄存器的内容。
[0329]
在实施例中,一种非暂态机器可读介质,存储多个指令,包括第一指令和第二指令,其中机器对所述多个指令的执行使得所述机器执行一种方法,该方法包括响应于所述第一指令而对所述机器中的执行电路进行加固以缓解对于推测性执行攻击的漏洞;阻止响应于所述第二指令要执行的推测性操作使用寄存器的内容。
[0330]
任何这样的实施例可包括以下方面中的任何一者。所述方法包括响应于所述推测性操作变成非推测性的而放松加固。
[0331]
在实施例中,一种装置包括:推测漏洞检测硬件,来检测对于推测性执行攻击的漏洞,并且联系对对于推测性执行攻击的漏洞的检测,提供指出来自第一操作的数据被加污的指示;执行硬件,如果使用所述数据的第二操作要被非推测性地执行则执行所述第二操作,而如果所述第二操作要被推测性地执行并且所述数据被加污,则阻止所述第二操作的执行。
[0332]
任何这样的实施例可包括以下方面中的任何一者。所述执行硬件还在所述数据未被加污的情况下执行所述第二操作。所述推测漏洞检测硬件将把所述数据标记为被加污的。所述推测漏洞检测硬件将把所述数据标记为要被跟踪的。所述指示将被提供给软件。所述装置将响应于来自所述软件的请求而把所述数据标记为被加污的。所述装置还包括指令解码器来对指令解码以将所述数据标记为被加污的。所述数据将通过向所述数据添加比特而被跟踪。所述装置包括跟踪硬件来维护被加污数据的存储位置的列表。所述第二操作是加载操作,并且所述数据将被用作所述加载操作的地址。
[0333]
在实施例中,一种方法包括:由推测漏洞检测硬件来检测对于推测性执行攻击的漏洞;联系对对于推测性执行攻击的漏洞的检测,提供指出来自第一操作的数据被加污的指示;并且如果使用所述数据的第二操作要被推测性地执行并且所述数据被加污,则阻止所述第二操作的执行。
[0334]
任何这样的实施例可包括以下方面中的任何一者。所述方法包括,如果所述第二操作要被非推测性地执行或者所述数据未被加污,则执行所述第二操作。所述方法包括将所述数据标记为被加污的。所述方法包括将所述数据标记为要被跟踪。所述指示被提供给软件。所述方法包括响应于来自所述软件的请求而把所述数据标记为被加污的。所述方法包括对指令解码以将所述数据标记为被加污的。所述第二操作是加载操作,并且所述数据将被用作所述加载操作的地址。
[0335]
在实施例中,一种系统包括:存储器控制器,来将处理器核心耦合到存储器;所述处理器核心,来执行要由所述存储器控制器从所述存储器中的应用软件取得的指令,所述处理器核心包括:推测漏洞检测硬件,来检测对于推测性执行攻击的漏洞,并且联系在所述指令的执行期间对对于推测性执行攻击的漏洞的检测,提供指出来自第一操作的数据被加污的指示;以及执行硬件,如果使用所述数据的第二操作要被非推测性地执行则执行所述第二操作,而如果所述第二操作要被推测性地执行并且所述数据被加污,则阻止所述第二操作的执行。
[0336]
任何这样的实施例可包括以下方面中的任何一者。所述指示将被提供给所述存储器中的系统软件,并且所述处理器核心将响应于来自所述系统软件的请求而把所述数据标记为被加污的。
[0337]
在实施例中,一种装置包括混合密钥生成器和存储器保护硬件。所述混合密钥生成器基于公钥和多个进程标识符来生成混合密钥。所述进程标识符中的每一个对应于存储器中的一个或多个存储器空间。所述存储器保护硬件使用第一混合密钥来保护所述存储器空间。
[0338]
任何这样的实施例可包括以下方面中的任何一者。所述第一公钥是从第一网站获得的。所述第一公钥是从所述第一网站的第一证书获得的。所述第一多个进程标识符中的至少一个将标识第一web浏览器进程,其中所述第一网站是通过所述第一web浏览器进程可访问的。所述第一多个进程标识符中的每一个将标识多个web浏览器进程中的一个,其中所述第一网站是通过所有所述多个web浏览器进程可访问的。所述第一多个存储器空间中的至少一个是通过第一存储器访问结构可访问的,所述第一存储器访问结构基于所述第一混合密钥来控制访问。所述存储器保护硬件对所述第一混合密钥的使用包括将所述第一混合密钥与第一多个存储器访问结构中的每一个关联起来。所述存储器保护硬件对所述第一混
合密钥的使用包括允许从包括所述第一web浏览器进程在内的第一多个进程对所述第一多个存储器空间的访问,并且阻止从第二进程对所述第一多个存储器空间的访问。所述第二进程是访问第二网站的第二web浏览器进程。所述存储器保护硬件还使用第二混合密钥来保护与所述第二web浏览器进程相对应的第二存储器空间。所述第二存储器空间是通过第二存储器访问结构可访问的,所述第二存储器访问结构基于所述第二混合密钥来控制访问。所述存储器保护硬件对所述第一多个存储器空间和所述第二存储器空间的保护包括将所述第二混合密钥与所述第二存储器访问结构关联起来。所述混合密钥生成器基于第二公钥和第二多个进程标识符来生成所述第二密钥,第二多个进程标识符中的每一个对应于包括所述第二存储器空间在内的第二多个存储器空间中的一个。所述第二公钥是从第二网站获得的。所述第一多个进程标识符中的第一个将标识在所述第一多个存储器空间中的相应一个中存储web内容的进程。所述web内容包括以下各项中的一个或多个:及时代码,编译的代码,以及web应用内容。
[0339]
在实施例中,一种方法包括基于第一公钥和第一多个进程标识符来生成第一混合密钥,第一多个进程标识符中的每一个对应于存储器中的第一多个存储器空间中的一个或多个;并且使用所述第一混合密钥来控制对所述第一多个存储器空间的访问。
[0340]
任何这样的实施例可包括以下方面中的任何一者。所述方法包括从第一网站接收所述第一公钥。所述方法包括将所述第一混合密钥与第一多个存储器访问结构中的每一个关联起来,所述第一多个存储器访问结构中的每一个控制对所述第一多个存储器空间中的相应一个的访问。使用所述第一混合密钥来控制对所述第一多个存储器空间的访问包括允许从第一多个web浏览器进程对所述第一多个存储器空间的访问,并且阻止从第二进程对所述第一多个存储器空间的访问。
[0341]
在实施例中,一种装置包括:一个或多个处理器核心,来执行代码;以及存储器访问电路,来联系所述代码的执行而访问存储器;其中所述一个或多个处理器核心中的一个或多个还生成所述代码的存储器访问拓扑图,以确定所述代码的第一可攻击面;并且基于所述存储器访问拓扑图来重构所述代码,以生成重构的代码,所述重构的代码具有小于所述第一可攻击面的第二可攻击面。
[0342]
任何这样的实施例可包括以下方面中的任何一者。所述存储器访问拓扑图揭示所述代码的组件之间的交互。所述代码的重构包括将第一组件变换成至少第二组件和第三组件。所述第一组件是第四组件和第五组件可访问的,所述第二组件是所述第四组件可访问的,并且是所述第五组件不可访问的,并且所述第三组件是所述第五组件可访问的,并且是所述第四组件不可访问的。所述第二组件是所述第一组件的专门化。所述第二组件是所述第一组件的克隆。对所述第一组件的访问包括对第一数据结构和第二数据结构的访问。所述第一组件包括第一函数和第二函数,其中,所述第一数据结构是通过所述第一函数和所述第二函数可访问的,并且所述第二数据结构是通过所述第一函数和所述第二函数可访问的。所述存储器访问拓扑图揭示出所述第四组件的执行访问所述第一数据结构,而不访问所述第二数据结构,并且所述第五组件的执行访问所述第二数据结构,而不访问所述第一数据结构。所述代码的重构将变换所述第一函数以提供对所述第一数据结构的访问,而不提供对所述第二数据结构的访问,并且变换所述第二函数,以提供对所述第二数据结构的访问,而不提供对所述第一数据结构的访问。对所述第二组件的访问包括对所述第一数据
结构的访问,而不包括对所述第二数据结构的访问;并且对所述第三组件的访问包括对所述第二数据结构的访问,而不包括对所述第一数据结构的访问。所述第二组件包括所述第一函数,而不包括所述第二函数,并且所述第三组件包括所述第二函数,而不包括所述第一函数。
[0343]
在实施例中,一种方法包括:由处理器执行代码;由所述处理器响应于所述代码的执行而生成所述代码的存储器访问拓扑图;并且由所述处理器基于所述存储器访问拓扑图而重构所述代码以减小所述代码的攻击面。
[0344]
任何这样的实施例可包括以下方面中的任何一者。所述存储器访问拓扑图揭示所述代码的组件之间的交互。所述重构包括通过将第一组件变换成至少第二组件和第三组件来减小所述攻击面。执行所述代码包括由第四组件和由第五组件访问所述第一组件,并且重构包括使得所述第二组件仅可由所述第四组件访问,并且使得所述第三组件仅可由所述第五组件访问。访问所述第一组件包括访问第一数据结构和第二数据结构。所述第一组件包括第一函数和第二函数,其中所述第一数据结构是通过所述第一函数和所述第二函数可访问的,并且所述第二数据结构是通过所述第一函数和所述第二函数可访问的。所述存储器访问拓扑图揭示出所述第四组件的执行访问所述第一数据结构,而不访问所述第二数据结构,并且所述第五组件的执行访问所述第二数据结构,而不访问所述第一数据结构。所述重构包括变换所述第一函数以提供对所述第一数据结构的访问而不提供对所述第二数据结构的访问,并且变换所述第二函数以提供对所述第二数据结构的访问而不提供对所述第一数据结构的访问。
[0345]
一种装置可包括用于执行本文公开的任何功能的部件。在实施例中,一种装置可包括存储代码的数据存储设备,所述代码当被硬件处理器执行时使得所述硬件处理器执行本文公开的任何方法。一种装置可如详细描述中所描述。一种方法可如详细描述中所描述。在实施例中,一种非暂态机器可读介质可存储代码,所述代码当被机器执行时使得所述机器执行一种方法,该方法包括本文公开的任何方法。
[0346]
方法实施例可包括本说明书中描述的任何细节、特征等等,或者细节、特征等等的组合。
[0347]
虽然已就若干个实施例描述了本发明,但本领域技术人员将会认识到,本发明不限于描述的实施例,而是可在带有所附权利要求的精神和范围内的修改和变更的情况下实现。从而说明书应当被认为是说明性的,而不是限制性的。
再多了解一些

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

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

相关文献