用于标签保护的存储器系统的随机标签设定指令
阅读说明:本技术 用于标签保护的存储器系统的随机标签设定指令 (Random tag set instructions for tag protected memory systems ) 是由 格雷姆·彼得·巴尔内斯 贾森·米洛夫·鲍里索夫 于 2019-02-12 设计创作,主要内容包括:一种装置具有:处理电路(4);存储器存取电路(15),该存储器存取电路针对具有相关联的地址标签的标签检查目标地址执行保护标签检查,保护标签检查包括将地址标签与存储在存储器系统中的保护标签进行比较,保护标签与具有一个或多个存储器位置的区块相关联,这一个或多个存储器位置包括由目标地址所标识的寻址位置;以及指令译码器(6),该指令译码器响应于指定标签设定目标地址的随机标签设定指令,控制处理电路(4)将与标签设定目标地址相关联的地址标签设定为从一组候选标签值中随机选择的随机标签值。(An apparatus has: a processing circuit (4); memory access circuitry (15) to perform a protection tag check for a tag check target address having an associated address tag, the protection tag check comprising comparing the address tag to a protection tag stored in the memory system, the protection tag being associated with a block having one or more memory locations, the one or more memory locations including an addressed location identified by the target address; and an instruction decoder (6) that controls the processing circuit (4) to set an address tag associated with the tag setting target address to a random tag value selected at random from a group of candidate tag values in response to a random tag setting instruction that specifies the tag setting target address.)
背景技术
要由数据处理装置执行的软件通常可以高级编程语言来编写,并且然后根据要执行该软件的装置所支持的指令集架构而被编译为代码。例如,软件可最初以较高级语言(诸如Java、C或C++)来编写,并且然后被编译为本地支持的指令集架构(诸如x86或)。
一些较高级编程语言(诸如Java)被认为是存储器安全语言,因为这些语言包括用于检查有关存储器存取的某些错误的运行时错误检测检查。相比之下,存储器不安全语言(诸如C及C++)不包括此种运行时错误检查。使用存储器不安全语言的持久盛行意味着在根据给定指令集架构的编译代码中,可能存在大量的有关存储器的错误,这些错误可能容易被攻击者或其他恶意方利用。这些错误可包括:
·界限违例,其中由代码所供应的数组索引在数组的合法界限之外;
·释放后使用错误,其中在存储器位置已被解除分配或释放之后对该存储器位置进行存取;
·返回后使用,其中对与函数内所使用的变量(诸如堆栈上的值)相关的地址的存储器存取在从函数返回之后进行;
·范围外使用错误,其中变量是在宣告它们的范围之外被存取的;以及
·初始化前使用错误,其中在变量被初始化之前对与变量相关联的存储器地址进行存取。
这些仅是有关存储器的错误的一些示例,其可能导致无法预测的行为和可能为攻击者提供利用的途径。因此可能期望的是,在由给定处理装置所支持的指令集架构内提供用于辅助某些类别的存储器错误的运行时检测的架构支持。
发明内容
至少一些示例提供了一种装置,包括:处理电路;存储器存取电路,该存储器存取电路针对具有相关联的地址标签的标签检查目标地址执行保护标签检查,保护标签检查包括将地址标签与存储在存储器系统中的保护标签进行比较,保护标签与具有一个或多个存储器位置的区块相关联,这一个或多个存储器位置包括由目标地址所标识的寻址位置;以及指令译码器,该指令译码器响应于指定标签设定目标地址的随机标签设定指令,控制处理电路以将与标签设定目标地址相关联的地址标签设定为从一组候选标签值中随机选择的随机标签值。
至少一些示例提供了一种方法,包括:针对具有相关联的地址标签的标签检查目标地址执行保护标签检查,保护标签检查包括将地址标签与存储在存储器系统中的保护标签进行比较,保护标签与具有一个或多个存储器位置的区块相关联,这一个或多个存储器位置包括由目标地址所标识的寻址位置;并且响应于对指定标签设定目标地址的随机标签设定指令的译码,将与标签设定目标地址相关联的地址标签设定为从一组候选标签值中随机选择的随机标签值。
至少一些示例提供了一种计算机程序,该计算机程序用于控制主机数据处理装置以提供用于执行目标程序代码的指令的指令执行环境,该计算机程序包括:存储器存取程序逻辑,该存储器存取程序逻辑针对具有相关联的地址标签的标签检查目标地址执行保护标签检查,保护标签检查包括将地址标签与存储在存储器系统中的保护标签进行比较,保护标签与具有一个或多个存储器位置的区块相关联,这一个或多个存储器位置包括由目标地址所标识的寻址位置;及标签设定程序逻辑,该标签设定程序逻辑响应于指定标签设定目标地址的随机标签设定指令,将与标签设定目标地址相关联的地址标签设定为从一组候选标签值中随机选择的随机标签值。
一种存储介质可存储上述计算机程序。该存储介质可以是非暂态存储介质。
附图说明
本公开技术的另外的方面、特征及优点将从结合附图阅读的示例的以下描述中显而易见,在附图中:
图1示意性示出了数据处理装置的示例;
图2示出了包括检查地址标签是否与保护标签匹配的标签保护的存储器存取操作的示例;
图3是示出执行标签保护的存储器存取操作的方法的流程图;
图4示出了随机标签设定指令的第一示例;
图5示出了随机标签设定指令的第二示例,其中防止一组候选标签值的至少一个排除值被选择作为要分配到给定地址的地址标签的随机标签值;
图6示出了用于指示至少一些排除值的随机选择状态信息的第一示例;
图7示出了标签值排除指令的示例,该标签值排除指令用于将在随机选择状态信息中的位字段的位更新为指示从输入地址的地址标签提取的标签值要从随后的随机标签值选择中排除;
图8至图10示出了用于从一组候选值选择随机标签值而同时排除至少一个排除值被选择的示例硬件实现方式;
图11示出了随机选择状态信息的第二示例,该随机选择状态信息指定了候选标签值子集的值和指示是否排除这些值中的每一者的对应位字段;
图12示出了用于用随机选择值填充候选标签值子集的随机标签选择指令的示例;
图13示出了标签值排除指令的第二示例,该标签值排除指令用于基于输入地址的地址标签来确定是否应排除由随机选择状态信息所指示的候选标签值子集中的任意候选标签值;
图14示出了随机标签设定指令的另一示例,该随机标签设定指令用于基于图11所示的随机选择状态信息将与给定地址相关联的标签值更新为随机选择值;
图15示出了处理随机标签设定指令的方法;以及
图16示出了支持随机标签设定指令的模拟器的示例。
具体实施方式
一种用于防止上文讨论的那些类型的某些存储器使用错误的方法可以是提供存储在存储器系统中的与一个或多个存储器位置的区块相关联的保护标签。当基于标识在存储器系统中的特定寻址位置的目标地址请求标签保护的存储器存取操作时,可执行保护标签检查。在保护标签检查中,存储器存取电路可将与目标地址相关的地址标签与存储在存储器系统中的与包括由目标地址所标识的寻址位置的一个或多个存储器位置的区块相关联的保护标签进行比较。在一些示例中,存储器存取电路可生成在保护标签与地址标签之间是否检测到匹配的指示。该指示可用于控制是否允许存储器存取成功,或随后的操作是否可以成功,或者只在允许存储器存取如常继续时报告。
这可在以下情况有用:例如,基于存储器不安全语言(诸如C或C++)编译代码的编译程序可在初始化存储器区域时,将存储器中期望存取代码的区块的保护标签设定为特定值,并且可将对应的地址标签值与指向这些区块的目标地址相关联。如若发生存储器使用错误,并且例如在已初始化的有效范围的范围之外或延伸出该范围的界限之外使用地址指针,则很可能的是与寻址位置相关联的保护标签可能不匹配与目标地址相关的地址标签,并且在此情况下,可触发错误处理响应或错误报告机制。所采取的特定响应可取决于正在执行的软件的特定需求或取决于架构的特定微架构实现方式。因此,即使高级语言不具有用于执行运行时错误检查以便防止存储器存取错误的手段,用于编译代码的指令集架构(ISA)仍可包括用于执行此种检查的架构特征。
在下文讨论的技术中,数据处理装置可具有指令译码器,该指令译码器支持指定标签设定目标地址的随机标签设定指令。响应于随机标签设定指令,指令译码器控制处理电路以将与标签设定目标地址相关的地址标签设定为从一组候选标签值中随机选出的随机标签值。
出于多种原因,此形式的指令可以是有用的。实践中,为了限制存储用于存储器位置的每个区块的保护标签的存储开销,每个保护标签中的位数可相对较少,例如在一些实现方式中为4位。标签位数越少,则错误存储器存取通过保护标签检查的机会就越大,只是因为它碰巧匹配具有相同保护标签值的存储器区块,即使它原本不打算对该存储器区块进行存取。例如,对于4位保护标签,存在1/16的机会意外地匹配存储器的一区域的保护标签,该区域实际上应被标记为对给定地址的错误存取。
通过提供用于将与给定目标地址相关联的地址标签设定为从一组候选标签值中随机选择的随机标签值的指令,这意味着如若一类设备各自执行相同的代码,则它们可对相同地址分配不同的随机标签值。首先,这可改进错误检测,因为即使该类中的一个设备碰巧选择了与存储器中被错误存取的区域匹配的标签值,该类中的其他设备将不同的值已选择作为随机标签值,因此可检测到保护标签不匹配且报告错误。因此,通过从一类设备众包错误报告,可能的是该类中的至少一些设备可因为用于程序代码的给定部分处的地址的随机选择值的扩散而检测到错误。因此,使用随机标签设定指令可改进设备群中检测到有关存储器的错误的可能性。
此外,通过随机选择要分配到地址标签的值,这使得攻击者成功发动可用于一大群设备的攻击更加困难。即使攻击者碰巧能够猜测到在一个设备上的正确标签值,仍因为其他设备在程序的相同点使用不同的随机选择的标签值进行存储器存取而攻击者的成功攻击可能在其他设备上行不通。这是特别有用的,因为实践中,为了发动有用的攻击,攻击者可能不仅需要能够猜测单个存储器存取的保护标签,而是可能需要连续串起许多成功的猜测,以便能够使程序执行一些不期望的操作或提供程序代码的作者不想要的效果。因此,如若一系列存储器分配中的每一者都将对应的地址标签设定为随机值,则对每个连续分配所分配的不同模式标签值的排列数目会增大,使得整体设备群分成许多更小的子群,每个子群针对给定的一组存储器分配具有不同随机标签值组合,使得攻击更加困难并且将任何成功攻击限制于设备群的较小子集。
将理解的是,随机标签设定指令不必是设定与给定目标地址相关联的地址标签的唯一方式。指令译码器还可支持标签设定指令,其允许将与目标地址相关联的地址标签设定为由软件本身所提供且是确定性(即,在执行相同程序的全部装置上都相同)的某软件定义值,而不是如针对随机标签设定指令那样由硬件以非确定性方式随机选择。这使软件开发者可选择是使用随机标签设定指令还是使用固定值标签设定指令作为优选。
在随机标签设定指令的一些示例中,可从整组候选标签值随机选择随机标签值。例如,N位标签值可具有2N个不同的值,因此可从这2N个值中的任一者随机选择随机标签值。
然而,响应于随机标签设定指令的一个变体,指令译码器可控制处理电路以防止一组候选标签值的至少一个排除值被选择作为随机标签值,并且从候选标签值的剩余子集随机选择随机标签值。出于多种原因,能够排除某些值被选择作为随机标签值但然后从剩余子集随机选择随机标签值的能力可以是有用的。首先,一些标签值可保留以用于特殊目的。例如,可将候选组的一个标签值保留为“全部匹配”值,该值被认为是与任何其他标签值匹配(例如,这对于有效禁用对具有低安全要求的某些存储器存取的地址进行保护标签检查是有用的)。当对于“全部匹配”行为会不适当的地址设定地址标签时,因此可能期望的是,从可被选择作为随机标签值的候选标签值子集排除“全部匹配”值。还可分配其他特殊标签值。因此,在一些情况下,至少一个排除标签值可包括由硬件所固定的一个或多个由硬件定义的排除标签值。在另一示例中,一组至少一个排除标签值可包括由存储在配置寄存器中的配置数据所标识的一个或多个排除标签值。例如,设备的一些功能可以是可选的,并且配置寄存器可指定是否启用这种功能。取决于启用的特征,然后可能需要排除某些标签值。例如,配置寄存器可定义是否启用或禁用上文讨论的“全部匹配”功能,以便选择是否将对应的全部匹配值从选择中排除。配置寄存器可以是未由随机标签设定指令本身所指定的寄存器,例如,由处理装置的架构所提供的状态寄存器或其他控制寄存器。
在其他示例中,可能期望的是,允许软件指定一组候选标签值中排除在被选择作为随机标签值之外的某些值。例如,至少一个排除标签值可包括由随机标签设定指令所指定的至少一个寄存器所标识的一个或多个排除标签值。此外,可以提供随机标签设定指令的变体,其将排除标签值指定为由随机标签设定指令的指令编码所直接指示的即时值。另一种方法可以是,随机标签设定指令指定包含具有对应的地址标签的地址的源寄存器或目的地寄存器(或两者),并且可将此地址的地址标签的标签值提取和确定为至少一个排除标签值中的一者。
无论使用哪种方法来允许软件指示应排除哪个值,排除某些软件定义的值被选择的能力可以是有用的,因为软件可能期望确保的是,存储器的区块的连续分配使用不同的标签值,使得如若实际应该瞄准存储器的一个区域的存储器存取溢出到与不同的标签分配相关联的紧接区域,则不同的保护标签将允许检测到边界违例。因此,如若在在两个现有分配之间分配存储器的区域的堆或其他数据结构上分配存储器,则软件可能希望确保的是,对新分配所设定的保护标签不同于与先前分配相关联的保护标签和与随后的分配相关联的保护标签两者。另一示例可以是,在堆栈数据结构上分配区域时,可能期望排除分配到先前进行堆栈分配的地址的标签的值。
一些示例可仅允许这些识别排除值的方式中的一种。其他可支持这些技术的组合,例如,指令可指定一些软件定义的排除标签值,但是还可永久排除一些硬件定义的值,或者可取决于由配置寄存器所指定的信息选择性排除这种硬件定义的标签值。
在至少一个排除标签值中的至少一些由随机标签设定指令的寄存器来标识的情况下,该信息可在该寄存器内以不同的方式来表示。一般而言,随机标签设定指令可指定存储随机选择状态信息的至少一个源寄存器。
在一个示例中,随机选择状态信息可包括位字段,位字段包括对应于一组候选标签值的至少一子集的多个位,其中位字段的每个位指示对应的候选标签值是否为一组至少一个排除标签值中的一者。位字段的位可由正在执行的软件的先前指令来设定。
尽管在一些情况下软件可取决于要排除哪些值来直接确定位字段的各个位的值,但是如若期望排除由先前分配的地址标签所使用的某些值(这些值本身可能已是通过随机选择而确定的,而不是由软件的确定性选择而确定的),则软件可能无法事先知道应该排除哪些值。因此,指令译码器还支持标签值排除指令可以是有用的,该标签值排除指令指定标签排除目标地址和用于存储随机选择状态信息的位字段的目的地寄存器。响应于标签值排除指令,指令译码器可控制处理电路以将位字段中对应于与标签排除目标地址相关联的地址标签的位更新为指示对应的标签值是一组至少一个排除标签值中的一者。这允许程序员/编译程序将标签值排除指令中指定应该在随后的随机选择中排除的标签值的任何地址的一个或多个实例包括作为标签排除目标地址。这使得位字段中对应于要排除的值的相应位被填充,并且然后随后的随机标签设定指令可使用此位字段来控制地址标签的随机选择,以针对被指定为标签设定地址的不同地址进行设定。
在一些示例中,随机选择状态信息的位字段可包括对应于整组标签值的位。
然而,在其他情况下,位字段可仅包括用于候选标签值适当子集的位。例如,如若某些候选标签值被硬件定义为永久排除,则可能不需要对那些候选标签值提供位。
位字段可不包括用于全部可能的候选标签值的位的另一原因可以是,从整个候选组中选择某一候选标签值适当子集可能已经由较早的指令进行,并且然后随机选择状态信息可包括被选择作为该候选标签值的适当子集的标签值。可将该候选标签值适当子集的标签值指定在与指示排除哪些值的位字段相同的寄存器中或在不同的寄存器中。然而,将标签值和位字段两者指定在相同的寄存器中可以是有用的,以便减少由随机标签设定指令所需的寄存器读取次数。利用该实现方式,指令译码器可支持随机标签选择指令,其指定用于存储随机选择状态信息的标签值的目的地寄存器。响应于随机标签选择指令,指令译码器可控制处理电路从一组候选标签值中随机选择候选标签值适当子集(例如,在不考虑是否排除任何值的情况下),并且将所选择的候选标签值适当子集的标签值写入存储随机选择状态信息的目的地寄存器。
利用这种方法,可将在排除某些排除值的同时选择随机标签值的整体操作分成多个分开的指令,其可简化硬件实现方式。例如,可使用随机标签选择指令的实例、然后使用上述的标签值排除指令的一个或多个实例(用于从对应的地址中提取标签值并更新随机选择状态的位字段以指示这些值被排除)、并且然后使用选择候选标签值适当子集中的未被排除的候选标签值的随机标签设定指令,来实现此操作。例如,如若随机选择状态信息将T个候选标签值指示为标签值适当子集,则该方法将允许排除最多T-1个候选值,使得总会留有候选标签值适当子集中的至少一者,其仍然可由随机标签设定指令选择作为随机标签值。该方法简化了硬件实现方式,使得满足时序要求更简单,因为随机标签选择指令可基于随机来源来选择T个值而无需考虑是否排除任何值,而同时随机标签设定指令和标签值排除指令可使用简单逻辑运算和/或多工器用于选择来实现,而无需要考虑随机数来源。此外,该方法可限制每个指令所需的源寄存器的数目,这可以是有用的,因为一般地寄存器读取端口的数目可能在通常的微处理器设计中受限。
然而,其他方法可提供硬件实现方式,其既支持基于随机数来源的选择又支持响应于相同指令而执行的一些值的排除。在此情况下,对于以硬件有效方式来实现指令而同时仍确保选择除了至少一个排除值之外的每个剩余候选值的均匀机率分布存在着挑战。
在用于支持排除最多N个排除标签值的硬件实现方式的一种方法中,指令译码器可控制处理电路以:
·随机选择一组候选标签值的至少N+1个标签值;
·将每个选择的标签值与每个排除标签值进行比较;以及
·将所选择的标签值中与全部至少一个排除标签值不匹配的的一者选择作为随机标签值,以设定给与标签设定目标地址相关联的地址标签。例如,可使用定义某一伪随机序列的值的查找表(LUT)和线性反馈移位寄存器(LFSR)或提供随机种子选择值的其他电路来实现N+1个随机值的选择,随机种子选择值可用于选择由LUT所提供的序列的哪个部分被提取并被用作N+1个标签值。可使用比较器、逻辑门、以及多工器来实现比较和选择步骤,以便选择N+1个标签值中未被排除的的一者。
在单一随机标签设定指令中执行整体选择/排除操作同时实现硬件的替代方法是,允许从随机选择中排除最多两个值:预定排除标签值(其可以是用硬件固定的或基于配置寄存器而可配置的,但是其可独立于随机标签设定指令的指令编码来选择)和由随机标签设定指令所指定的附加排除标签值。在此情况下,响应于随机标签设定指令,指令译码器可控制处理电路以:
·将一组候选标签值中的一者随机选择作为选择标签值;
·执行将附加排除标签值与中间值的比较,该中间值是以下项目中的一者:
ο当选择标签值与预定排除标签值和该组候选标签值的另一预定标签值都不匹配时,中间值是选择标签值;以及
ο当选择标签值与预定标签值和另一标签值中的一者匹配时,中间值是通过反转选择标签值的随机选择位而获得的值;
·当比较检测到在附加排除标签值与中间值之间的不匹配时,将中间值输出作为随机标签值以设定给与标签设定目标地址相关联的地址标签;以及
·当比较检测到在附加排除标签值与中间值之间的匹配时,将另一预定标签值输出作为随机标签值以设定给与标签设定目标地址相关联的地址标签。
类似于预定排除标签值,另一预定标签值可以是独立于随机标签设定指令编码用硬件硬连线的(固定的)或由控制寄存器指定为是可配置的。
因此,通过选择随机值和输出中间值,该中间值与选择值匹配或具有反转的随机选择位(如若选择值与预定排除标签值或另一预定标签值中的一者匹配),中间值永远不会匹配预定排除标签值或另一预定标签值,但是可采用任何其他值。然后,可将中间值与附加(软件指定的)排除标签值进行比较,并且如若在该比较中存在匹配,则另一预定标签值可替换中间值,以提供最终输出随机标签值,否则中间值本身可用作输出随机标签值。该方法可帮助限制硬件复杂性,因为只需要基于随机数来源来选择单一随机值并且与排除值进行比较,这限制了比较器的数目和选择(多工处理)电路的复杂性,而同时在非排除值之间进行选择时仍然实现了相对均匀机率分布。
尽管预定排除标签值和另一预定标签值可以是整组候选标签值中的任何两个成员,但是对于预定排除标签值和另一预定标签值中的一者是具有全部位等于0的值和另一者是具有全部位等于1的值(无论哪种方式)可以是特别有用的,因为这可以映射到未被选择作为随机标签值的“特殊”标签值(例如,“全部匹配”值)的可能使用。在一些实现方式中,定义为预定排除标签值和另一预定标签值的值可以是硬连线的(永久固定的),或者替代地,它们可由配置寄存器中的状态值来定义(例如,选择其中有“全部0”和“全部1”值的值是排除值)。
因此,从上文将理解的是,存在一系列不同的方式,其中处理电路的实际硬件可从一组候选值中实现随机选择,而同时从选择中排除至少一个排除值。这可响应于单一指令或响应于序列指令来完成。无论在微架构级别所选择的具体硬件实现方式如何,都可实现随机标签设定指令的架构优点(具有上文讨论的增加的错误检测机率和的鲁棒性)。
可基于真随机值或伪随机值来进行从一组候选标签值(或排除至少一个排除值的一组候选标签值)的随机选择。因此,将理解的是,提供真随机数生成器对于上文讨论的技术并非必要的。在一些情况下,随机选择可基于伪随机数生成器。例如,随机选择可基于从线性反馈移位寄存器提取的值。
实践中,已将给定的随机值分配给与给定的地址相关联的地址标签,常常还期望的是,将相同的随机标签值存储到包括由该地址所标识的寻址位置的存储器位置的区块的保护标签。在一些实现方式中,这可由来自随机标签设定指令的分开的指令来完成。例如,随后的保护标签设定指令可采用标签设定目标地址(随机标签设定指令先前已为该目标地址设定了地址标签),并且将该地址的随机标签值用作写入对应的存储器位置的区块的对应的保护标签的值。
然而,在其他实现方式中,可以提供组合的地址标签和保护标签设定指令,其既随机更新与标签设定目标地址相关联的地址标签,且还控制存储器存取电路以将存储在存储器系统中的与包括由标签设定目标地址所标识的寻址位置的存储器位置的区块相关联的保护标签更新到随机标签值。此可避免执行第二指令的需要,因此降低了代码密度。
在保护标签检查中,当针对给定存储器存取在地址标签与保护标签之间检测到不匹配时,可通过返回某种形式的故障状态指示来报告该不匹配。所产生的在保护标签与地址标签之间是否检测到匹配的指示的具体形式可根据实现方式而变化。在一些情况下,标签保护的存储器存取操作可包括控制是否允许对寻址位置进行存储器存取,这取决于在保护标签与地址标签之间是否检测到匹配。然而,在其他示例中,可进行触发保护标签检查的存储器存取,而无论在保护标签与地址标签之间是否检测到匹配。例如,与给定区块的存储器位置相关联的保护标签可存储在存储器系统内的不同区块的存储器位置中,且因此存取保护标签可能需要分开的读取操作。因此,如若延迟实际存储器存取直到已将保护标签和地址标签进行比较,则可能延迟对实际存储器存取的处理,因此可能期望的是,在保护标签可用之前执行对寻址位置的存储器存取,且无论在保护标签与地址标签之间是否检测到任何匹配,然后一旦已获得保护标签并将保护标签与地址标签进行比较,就产生是否检测到匹配的单独指示。
在一个示例中,是否检测到匹配的指示可以是表示故障状况的信号,其在保护标签与地址标签之间检测到不匹配时产生。例如,存储器存取电路可用信号通知类似存储器故障,该存储器故障类似于如若违反存取许可或如若存取未映射的地址而产生的故障,或者可指示不同类型的故障状况。故障信号可触发处理电路以执行用于响应检测到的故障的异常处理例程。
替代地,当针对给定存储器存取而保护标签与地址标签不匹配时,可将状态指示记录在装置的处理电路可存取的控制寄存器内,以指示在保护标签与地址标签的比较中是否检测到匹配或不匹配。然后,可由随后的指令读取状态信息,以检查存储器存取是否有效。
用于报告在保护标签检查中地址标签与保护标签是否匹配或不匹配的另一选项可以是将信息记录在与执行的代码段相关联的错误日志中,其追踪在整个代码段中检测到的任何保护标签错误。例如,可响应于不匹配的保护标签与地址标签,将触发不匹配的目标地址或触发不匹配的存储器存取的指令的指令地址记录在错误日志中。在此情况下,并不是执行阻止代码操作的任何特定动作,而是可将错误简单记录在错误日志中。然后,可将错误日志提供给代码的软件提供者,以协助提供者消除在随后的软件版本中的错误。
因此,将理解的是,存在一系列方式,其中当执行保护标签检查时,可由存储器存取电路生成保护标签匹配/不匹配指示。
在一些实施例中,具有对应的保护标签的区块的存储器位置可各自包括单一存储器位置。在此情况下,每个单独的存储器位置可具有不同的保护标签,其可提供设定保护标签的良好的精细度,使得可检测更大范围的存储器错误。
然而,实践中,对每个寻址位置设定单独的保护标签的开销可能太高,并且将每个保护标签与具有多个存储器位置的区块相关联可能更有效。在此情况下,许多相邻的存储器位置可共享相同的保护标签,这足以用于检测常见形式的与存储器有关的错误。
与存储器位置的给定区块相关联的保护标签可存储在存储器系统内的任何其他存储器位置。选择保护标签在存储器系统中的位置的特定方式可根据实现方式或在运行时显着变化。在一些示例中,存储保护标签的位置可以是由处理电路架构上可存取的,例如,保护标签存储器位置可以是映射到与寻址位置相同的地址空间的一部分的位置。在此情况下,在寻址位置本身与对应的标签存储器位置的地址之间的映射可以是固定的或硬连线的,或者可以是可变的,例如,在由存储器存取电路所维持的追踪表中或在转换后备缓冲器中来追踪。替代地,其他实现方式可将与给定寻址位置相关联的保护标签存储在另一存储器位置中,该另一存储器位置对处理电路是架构上不可存取的,例如,在微架构中所提供的附加存储器中,该附加存储没有映射到可由处理电路所执行的指令来寻址的地址空间。在此情况下,存储器存取电路可基于寻址位置的地址来确定用于指向对应的标签存储位置的特定内部地址,并且触发需要从标签存储位置读取标签数据的任何附加存储器存取。无论标签存储位置对处理电路是否架构上可存取的,标签值亦可缓存在高速缓存内(在用于数据值的相同高速缓存内或在专用的标签高速缓存内)用于更快存取。
在一些情况下,保护标签可相对较小,例如4位或8位,且因此每个与存储器位置的不同区块相关联的多个保护标签可适配在相同存储器位置内。
地址标签可以不同方式与目标地址相关联。在某些情况下,地址标签可与目标地址分开指定,例如,使用由存储器存取指令所指定的分开寄存器,其触发存储器存取操作和保护标签检查。然而,在其他示例中,可将地址标签确定为目标地址的一个或多个选择位的函数。也就是,地址标签可包括从目标地址本身的部分导出的信息。通常,虽然指令集架构可支持具有某一数目的位(例如,64位)的地址,但是给定硬件设备实践中可能不需要如此多的存储器容量以至于其将会使用可使用该数目的位所表示的全部可能地址。例如,根据设备使用中的当前趋势,还不需要提供264个单独的可寻址位置。因此,通常存储器地址的某些位可能未有效地使用,并且可能总是具有相同的值,或者被设定为最高有效“真实”地址位的符号扩展(使得未使用的部分被设定为全部0或全部1)。因此,可重用该未使用的部分来表示地址标签或用于导出地址标签的值,以避免需要对分开的寄存器进行存取来获得地址标签,并且还使得更容易追踪在地址与对应的地址标签之间的对应关系,因为根据定义,每当地址***纵或在寄存器之间移动时,地址标签就可与地址一起传输。
在使用目标地址的部分来确定地址标签的实施例中,注意到的是,该地址标签与目标地址的标签部分不同,该标签部分可由高速缓存使用来确定来自由目标地址所标识的寻址位置的信息是否存储在高速缓存内。许多缓存方案可以将缓存的数据段的地址的标签部分与数据一起存储在高速缓存内,使得在高速缓存中寻找给定地址时,可将部分地址与跟缓存的数据一起存储的标签进行比较,以便确定缓存的数据是否实际上对应于所需的地址。但是,在此情况下,地址的标签部分(其与高速缓存中的标签进行比较)将是该地址的实际上定义需要数据的特定寻址位置的部分的一部分,即,根据定义,改变地址的缓存标签部分将导致该地址指向在存储器系统内的不同寻址位置。相反地,利用用于标签保护的存储器操作的地址标签,存储器存取电路可独立于地址标签选择需要数据的寻址位置。也就是,即使地址标签具有不同值,由目标地址指向的寻址位置仍然可以是相同的,因为对寻址位置的选择可仅取决于目标地址的其他部分。这使编译程序能够将与特定地址相关联的地址标签自由设定为任何值(例如,上文讨论的随机选择值),以匹配已分配到存储器系统中的相关联数据块的对应的保护标签值。
在使用地址的位的子集来表示地址标签的情况下,在一些实现方式中,响应于随机标签设定指令选择的随机选择值(不包括任何排除值)可基于地址的至少另一个位来转换,以便确定要写入标签设定目标地址的位的子集的值。这对于与传统的地址空间分配的兼容性是有用的,要以特殊方式(例如,对于“全部匹配”行为)解释的标签值的“特殊值”对于地址空间的不同部分可能需要具有不同值。例如,因为地址可以是符号扩展的,可期望的是,如若实际用于选择寻址存储器位置的地址的顶部“真实”(有意义)位为1,则顶部未使用位可全部为1,而如若顶部“真实”位为0,则顶部未使用位被设定为0。为确保就此问题已分配这些未使用位(并且尚未编写来使用保护标签功能)的传统代码继续正常运作,“全部匹配”值对于顶部“真实”位为1的地址可以是“全部1”,并且对于顶部“真实”位为0的地址可以是“全部0”。这可通过以下方式实现:将“全部0”和“全部1”中的一者指定为排除值、从候选组的剩余值中进行随机选择(可能还排除其他排除值)、且然后基于地址的最高有效“真实”位来确定是否转换选择值(例如,通过反转全部位),以便确定要写入地址的标签部分的值,使得无论顶部“真实”位是1还是0,排除值将映射到正确的“全部匹配”值。将理解的是,还可应用基于地址的一个或多个位对随机选择值的其他转换,而不仅仅是反转位。
在一些实现方式中,指令译码器可响应于全部存储器存取指令来触发保护标签检查。替代地,指令译码器可支持存储器存取指令的分开的非标签保护的和标签保护的变体。在此情况下,可响应于存储器存取指令的标签保护的变体来触发保护标签检查。相反地,非标签保护的存储器存取指令可简单触发对由该指令所指定的目标地址所标识的寻址位置的存取,而不执行保护标签检查。因此,响应于全部存储器存取指令而执行保护标签检查不是必需的。在一些情况下,还可支持用于触发保护标签检查的指令(而不对由标签检查目标地址所标识的位置进行任何对应的存储器存取)。
然而,即使将全部存储器存取指令解释为标签保护的存储器存取指令,仍然可能还有其他方式,其中指令集架构可支持选择性禁用对于某些操作的保护标签检查。例如,在处理装置的控制寄存器内的控制参数可选择性禁用标签比较。如上文讨论,另一种选择是,以特殊方式解释地址标签的某一值,使得它们指示出地址标签应视为与保护标签的任何可能值匹配,再次这有效禁用了标签比较的效果,使得无论地址标签是否与保护标签匹配都不会报告错误。
图1示意性地示出了数据处理装置2的示例。将理解的是,这仅是装置的部件的子集的高级表示,并且该装置可包括未示出的许多其他部件。装置2包含处理电路4,用于响应于由指令译码器6所译码的指令来执行数据处理。指令译码器6译码从指令高速缓存8撷取的指令,以产生控制信号10,用于控制处理电路4以执行由指令所表示的对应的处理操作。处理电路4可包括一个或多个执行单元,用于对存储在寄存器14中的值执行操作以产生要写回寄存器的结果值。例如,执行单元可包括:算术/逻辑单元(ALU),用于执行算术运算或逻辑运算、浮点单元,用于使用浮点操作数来执行运算、和/或向量处理单元,用于对包括多个独立的数据元素的操作数执行向量运算。处理电路还包括存储器存取单元(或加载/存储单元)15,用于控制数据在寄存器14与存储器系统之间的传送。在该示例中,存储器系统包括在数据与指令之间所共享的指令高速缓存8、1级数据高速缓存16、2级高速缓存17,以及主存储器18。将理解的是,其他高速缓存架构也是可能的,这仅是一个示例。提供存储器管理单元(MMU)20,用于提供地址转换功能以支持由加载/存储单元15所触发的存储器存取。MMU具有转换旁视缓冲器(TLB)22,用于缓存来自存储在存储器系统16、17、18中的页表的条目的子集。每个页表条目可提供用于地址的对应页面的地址转换映射,并且亦可指定存取控制参数,诸如指定页面是只读区域或是可读且可写的存取权限、或指定哪些权限级别可存取该页面的存取权限。
图2示意性示出了标签保护的存储器存取的概念。用于代表在存储器系统内的存储器位置的物理地址空间可被逻辑上划分为多个区块30,每个区块包括一定数目的可寻址位置。出于简明性,在图2的示例中,每个区块30包括四个存储器位置,但也可使用其他区块大小。每个区块30与对应的保护标签32相关联。与一定数目的区块30相关联的保护标签可聚集在一起并且存储在物理地址空间内的不同架构上可存取的存储器位置34内,或存储在主存储器18中所提供的架构上不可存取(不映像到相同的实体地址空间)的附加存储位置内。在一些情况下可优选使用分开的非架构上可存取的存储来避免在数据高速缓存16、17中用光空间来缓存保护标签值,用光空间会影响到常规代码的执行并且可使得一致性管理更复杂。可将附加标签高速缓存19提供在微架构中,用于从非架构地可存取的存储缓存标签值,用于与标签必须从主存储器18存取的情况相比较快的存取。哪些标签存储位置34对应于每个区块30的特定映射可由加载/存储单元15控制并且可以是硬接线的或可以是可编程的。尽管在图2中,每个标签32与物理地址的区块相关联,也可能在虚拟存储器地址空间中提供与虚拟存储器位置相关联的保护标签32,但这可能需要对每个存储器存取进行一些附加地址转换。因此,通过使保护标签32与物理存储器位置相关联,这可改进效能。总体而言,针对特定微架构实现方式,这是保护标签32如何准确地与物理地址空间的对应的区块30相关联的选择。总体而言,所需要的只是可存取和比较与存储器的给定区块相关联的保护标签32。
因此,当需要标签保护的存储器存取时,将地址标签40(其与标识要存取的寻址位置44的目标地址42相关联)与保护标签32(其与包括寻址位置44的存储器位置30的区块相关联)进行比较。例如,在图2中,目标地址42指向存储器中的某一位置B1,在图2的地址空间中标记为44。因此,将跟包括位置B1的位置区块B相关联的保护标签B与跟目标地址42相关联的地址标签40进行比较。如图2的顶部所示,地址标签4可被确定为目标地址本身的所选位的函数。具体而言,地址标签可从目标地址的一部分内的位来确定,该目标地址的一部分未用于指示要选择作为寻址位置44的特定存储器位置。例如,在一些架构中,目标地址的位的顶部分可总是具有某一固定值,诸如符号扩展(全部0或全部1),并且因此通过用任意标签值覆写这些未使用的位,可用地址标签40来对地址打标签。例如,特定地址标签值可由程序员或编译程序来选择,或可如下讨论来随机选择。地址标签和保护标签32可为相对小的数目的位(例如,4位),并且因此不需要在存储器内和在目标地址内占用太多空间。提供4位的标签空间(即,标签的16个可能值)可通常足够检测众多常见类型的存储器存取错误。
因此,当执行标签保护的存储器存取时,加载/存储单元15将地址标签40与跟包括寻址位置44的区块30相关联的保护标签32进行比较,并且确定它们是否匹配。加载/存储单元15生成指示地址标签40与保护标签32是否匹配的匹配指示。例如,该匹配指示可以是如若在地址标签40与保护标签32之间存在不匹配而产生的故障信号60、或置于状态寄存器中指示是否存在匹配的指示、或添加到错误报告以指示检测到了错误的地址及/或触发错误的指令的指令地址的条目。
图3示出了用于处理标签保护的存储器存取的流程图。触发存储器存取的指令可指定地址标签和目标地址。如图2所示,在一些情况下,地址标签可实际上从目标地址本身的位的子集导出,尽管在其他示例中,其可在单独的寄存器中来指定。在步骤50,遇到触发标签保护的存储器存取的指令。作为响应,在步骤52,存储器存取电路15触发对由目标地址所标识的寻址位置44的存储器存取。此外,在步骤54,存储器存取电路15获得存储在存储器系统中的保护标签32,该保护标签32与包括由目标地址所标识的寻址位置44的存储器位置的区块30相关联。在步骤56,存储器存取电路15将地址标签40与在步骤54所获得的保护标签32进行比较。在步骤58,由存储器存取电路15产生在保护标签与地址标签之间是否检测到匹配的指示(例如,上文所述的任何类型的匹配/不匹配报告指示)。用于报告任何不匹配的精确指示可根据实现方式变化。
图4示出了随机标签设定指令的第一示例(InsertRandomTag,***随机标签),其指定单一源寄存器Xn和目的地寄存器Xd。源寄存器Xn指定标签设定目标地址42,其可已经与某一地址标签值40相关联(或可使标签位默认设定为地址42的符号扩展)。指令译码器6通过以下方式来响应该指令:控制处理电路4将标签设定目标地址42写入目的地寄存器Xd的对应部分,并且将目的地寄存器中的地址标签40设定为基于随机数生成器或伪随机数生成器((P)RNG)60而选择的随机标签值。可使用任何已知的随机或伪随机数生成器的设计。用此方法,不会将任何值排除在选作随机标签值之外。将给定地址的地址标签设定为随机选择值对于增加由执行相同程序的多个不同设备所使用的标签值的变化是有用的,以增加由至少一些设备将会报告与存储器有关的错误的机会,并且减少易受攻击的弱点,因为攻击者更难以发起可能影响一群设备的大部分的成功攻击。在一些情况下,除了在目的地寄存器中设定地址标签值40之外,指令的变体还可触发对存储器的存储器存取,以将与由标签设定地址42所标识的存储器位置的区块30相关联的保护标签32设定为选择作为地址标签的相同随机标签值。
图5示出了随机标签设定指令的第二示例(InsertRandomTag,***随机标签),其允许从选择中消除某些排除值作为随机标签值。再次,随机标签设定指令指定与图4中相同的源寄存器Xn和目的地寄存器Xd。可选地,随机标签设定指令还可指定第二源寄存器Xm,其可定义可指示一组排除值中的一者或多者的状态信息。排除值还可以独立于Xm的其他方式来识别。例如,如若目的地寄存器Xd在执行指令之前已包括地址,则可提取与该地址相关联的先前标签且将其用作排除值中的一者。类似地,还可排除在源寄存器Xn中的地址标签值40。另一选择可以是,处理设备2的寄存器14可包括配置寄存器,其可定义指示是否排除某些值的配置状态。此外,某些值可以是由硬件永久排除,例如硬接线地被排除。例如,如若为特殊目的永久分配某些值(例如,匹配全部)以使得不允许它们由随机选择指令来选择作为标签值,则此可以是有用的。可使用这些技术的任何组合来定义一组排除值。
因此,利用图5的示例,响应于随机标签设定指令,指令译码器6再次控制处理电路4来随机选择要写入目的地寄存器Xd的标签部分的随机标签值,然而,在此情况下,可提供一些附加电路62,以消除一组排除值(其可包括零个、一个或多个排除值)被选择作为随机标签值。下文讨论实现消除排除值的多个示例。
图6示出了其中将定义指示排除值的随机选择状态的寄存器Xm实现为排除掩码的第一示例,该排除掩码包括包含多个位64的位字段,每个位对应于可供(伪)随机数生成器60选择的一组值的可能候选值之一者。例如,在图6中,与标签值2、3及11相关联的位被设定为指示出这些值不能由随机标签设定指令来选择作为随机标签值。
如图7所示,指令译码器6可支持AddExclusion(添加排除,即标签值排除)指令,其指定两个源寄存器Xn、Xm和目的地寄存器Xd。源寄存器中的一者Xm指定在图6中所示的排除掩码的输入值,其可已经将一些位设定为1以指示出已经排除一些值,或者如若尚未排除任何值,则可以是全部0。第二源寄存器Xn指定具有与其相关联的给定地址标签40的地址。响应于该指令,指令译码器6控制处理电路4来从地址寄存器Xn提取地址标签40的值,并且设定排除掩码中对应于该提取地址值的位64,使得将基于Xm中的随机选择状态信息,从随后对随机标签值的随机选择中排除该提取地址值。例如,响应于添加排除指令而执行的操作可通过将包括最低有效位为1和全部其他位等于0的值左移位由提取地址标签40所指示的多个位位置来实现。然后,可将移位值与寄存器Xn中的输入掩码进行或(OR)运算。将理解的是,图7中所示的移位和OR函数仅是硬件可如何实现操作的一个示例,并且一般而言可使用导致对应于源寄存器Xn中设定的地址标签40的值的位64的任何操作。
基于图6中所示的随机选择状态信息的形式,图5的随机标签设定指令因此可选择随机标签值,该随机标签值不是寄存器Xn中位字段的位64设定为1的排除值中的一者。
使用这种位字段的替代方案可以是转而提供源寄存器Xm,其提供明确定义要从选择中排除的二进制值的一系列字段。例如,如若可排除最多N个值并且每个标签值具有某一数目的位(例如,4),则寄存器的4N个位可指定要排除的值。
无论确切是如何指定要排除的值,硬件然后可取出排除值并且将它们与由随机数生成器或伪随机数生成器60所输出的值进行比较,以便确保选择值不是排除值中的一者。然而,出于效能原因,可能期望提供一种技术,该技术可从未排除的一组值选择随机标签值,而无需按顺序重复产生不同的随机数和重复测试排除值直到找到非排除的值。还可能期望的是,从非排除集合进行的随机选择在非排除值中具有均匀分布的机率分布,使得对于一个非排除值或另一非排除值没有显着偏差。
图8至10示出了用于实现此目的的多种方法。目的是提供一种硬件有效的方法,来生成4位的伪随机值,其不应等于特定输入值。具体而言,这包括如何从非区分的随机来源(其允许全部可能的输出)导出这种输出。这可以是简单的LFSR种子寄存器或更复杂的伪随机数生成器((P)RNG)。为简单起见,将随机来源称为“LFSR”,但还可使用其他随机来源代替LFSR。描述了两种可能的实现方法。所描述的第一种方法除了使用LFSR72之外还使用预定义伪随机序列(查找表或LUT 70),其可以是硬接线的,并且能够排除任意数目的输入值(而硬件复杂性取决于最大输入数目而加大)。还描述了第二种方法,其限于仅排除1个输入值和“1111”和“0000”中的任一者。该方法仅从LFSR导出其输出。
第一种方法在图8和图9中示出。该设计思想可被构建来排除任何数目的输入模式(“N”)。首先,假设存在查找表(LUT)寄存器70,其包含每个可能的输出值,这些输出值只输出一次,并是以伪随机顺序混乱的。对于4位输出(16种组合),该LUT 70将会是64位值。该设计包括3个阶段80、82、84。第一阶段是随机器80,其基于LFSR 72的位来伪随机地从LUT 70中选择“N+1”个非重迭值。第二阶段是比较器82。它比较来自随机器80的“N+1”个输出的“N”个输出中的每一者与定义排除值的“N”个输入86中的每一者的位相等性,以产生掩码。注意,输入86可从配置寄存器中的随机选择状态信息和/或配置数据和/或如上文讨论的硬件固定值导出。最后阶段是选择器84,其包括多工器(MUX)90,多工器90使用由比较器82所产生的掩码88来选择来自随机器80的“N+1”个输出中的不等于任何输入的一者(如掩码88中的位所指示)作为最终的最后输出92。最后输出92用作随机标签值以设定给标签设定目标地址的地址标签。
下文描述如何实现每个阶段的细节。此为示例实现方式。替代实现方式是可能的。
随机器80(阶段1)
让“pos”为从LFSR 72提取的4位。将LUT寄存器70旋转“pos*4”位。接下来是“N+1”个多工器(mux)74,每个多工器根据需要基于来自LFSR的附加位从LUT选择多个独立值中的一者。理想地,全部这些多工器74应该具有相同数目的输入,尽管这不是必需的(如图9所示)。因为位旋转在硬件中被实现为多工器,所以这两个步骤都可收缩和简化。
比较器82(阶段2)
将来自随机器80的“N”个输入中的每一者与“N”个禁止值中的每一者进行相等性比较。将每个随机器输出的结果一起或非(NOR)运算以产生输出掩码88。
选择器84(阶段3)
选择器90可简单选择由掩码88所允许的第一随机器输出。
实现方式的属性
该实现方式对全部输出提供了统一的机率分布,包括如若一些输入是相同的。这意味着通过简单地多次提供一些输入,可重用被构建来排除N个值的单一硬件电路用于排除更少的值,而不影响机率分布。
图8示出了3个排除(N=3)的特定示例配置。该实现方式对全部输出提供了统一的机率分布,包括如若一些输入是相同的。这意味着通过简单地多次提供相同输入,可使用被构建来排除3个值的单一硬件电路用于排除1或2个值,而不影响机率分布。如若要排除的值是“1111”,则机率分布如何受到影响如下:
值
0000
0001
0010
0011
0100
0101
0110
0111
%
6.26
6.59
7.03
6.43
6.30
6.26
6.94
7.28
值
1000
1001
1010
1011
1100
1101
1110
1111
%
6.39
7.62
6.73
6.26
6.34
6.25
7.32
0.00
(统计数据是利用LUT为“0x61fd50b4c83a2e97”获得的)
图9示出了4个排除(N=4)的特定示例配置。注意为提供来自随机器80的5个输出而如何选择最后的多工器以再分成两个多工器74-A、74-B,每个多工器从2个LUT值而不是4个中进行选择。这是因为最后2个输出最不可能被选择器挑选,所以降低的随机性应该对机率分布具有较少影响。
如果要排除的值是“1111”,则机率分布如何受到影响如下:
值
0000
0001
0010
0011
0100
0101
0110
0111
%
6.27
6.58
7.01
6.49
6.33
6.25
6.91
7.22
值
1000
1001
1010
1011
1100
1101
1110
1111
%
6.44
7.54
6.75
6.28
6.39
6.25
7.28
0.00
如果要排除的附加值是“0000”,则机率分布如何受到影响如下:
值
0000
0001
0010
0011
0100
0101
0110
0111
%
0.00
7.97
7.31
6.52
6.30
6.60
8.11
8.23
值
1000
1001
1010
1011
1100
1101
1110
1111
%
6.42
8.33
6.92
6.26
6.35
6.95
7.72
0.00
(统计数据是利用LUT为“0x61fd50b4c83a2e97”获得的)
图10示出了第二种方法,其排除可以是“1111”或“0000”任一者的一个固定模式和是任意变量的一个输入值。这足以“重着色”/改变现有值。输出仅从LFSR 72导出。LFSR应该具有至少6位。
在图10所示的设计中,从LFSR状态提取4位以用作暂定输出值(“选择标签值”)102。如若全部位都相同(模式“0000”、“1111”),则来自LFSR的再多2位被提取并被用于多工器/移位器,以精确选择输出中要被反转一位(使用异或(XOR)运算),以生成中间值100。这保证了对于中间值100,“0000”和“1111”模式永远不会发生。否则,选择标签值102被原样输出作为中间值100。
这生成了具有伪随机输出(具有以下统计分布)的中间值100:
值
0000
0001
0010
0011
0100
0101
0110
0111
%
0.0
7.8
7.8
6.3
7.8
6.3
6.3
7.8
值
1000
1001
1010
1011
1100
1101
1110
1111
%
7.8
6.3
6.3
7.8
6.3
7.8
7.8
0.0
为更容易解释系统的下一部分,假设要排除的固定模式是“1111”并且“0000”是有效输出。因为“0000”是有效模式,所以它可与输入变量交换。因此,比较中间值100与输入(由随机标签设定指令所定义的禁止值)的相等性。如若它们匹配,则输出“0000”。否则,原样输出中间值100。这导致最后输出104既不是“1111”(因为它已经被第一步排除),也不等于由随机标签设定指令所提供的输入。最后输出104可用作随机标签值,以设定给目标地址的地址标签。
最后输出的统计分布是:
值
0000
0001
0010
0011
0100
0101
0110
0111
%
6.7
7.3
7.3
5.8
7.3
5.8
5.8
7.3
值
1000
1001
1010
1011
1100
1101
1110
1111
%
7.3
5.8
5.8
7.3
5.8
7.3
7.3
0.0
可交换“0000”和“1111”的角色,以禁止“0000”作为输出,并且转而使用“1111”作为变量输入的有效替换。此外,可以选择任何任意模式(不仅仅是“0000”或“1111”)作为预定排除标签值(对应于图10的示例中的“1111”)和另一预定标签值(对应于图10中的“0000”),如若另一预定标签值与由随机标签设定指令所定义的附加排除标签值103匹配,则另一预定标签值替换中间值100。
在上文方法中,单一随机标签设定指令能够在整组候选值中取得排除值的指示,并且响应于单一指令从剩余值中选择随机值。当与图7中所示的形式的附加指令配对来定义排除值时,这可提供实现选择的相对代码有效的方式。
然而,为了进一步简化硬件,将用于选择随机标签值并且在选择中排除值的操作分开到多个指令中也可以是有用的。图11至图14示出了该方法的示例。图11示出了用于定义随机标签设定指令的排除值的随机选择状态信息的替代形式。例如,针对图5的随机标签设定指令所示的寄存器Xm可指定图11所示的随机选择状态信息的形式,而不是如图6所示的位字段。在图11的示例中,并不是在整组候选值中定义排除值,而是可仅为候选值的适当子集提供位掩码70,其值由随机选择状态信息本身的字段72来指示。在该上下文中,适当子集意味着排除候选集合的值中的至少一者的子集。在该示例中,随机标签值72的适当子集和对应的排除掩码70都存储在相同寄存器内,但是其他示例可将它们存储在不同寄存器中。
利用该方法,可以将随机选择操作分成多个指令:第一指令,其将随机值的子集选择作为可由随后的随机标签设定指令选择的工作值集合,如图12所示;第二指令,其根据排除值检查先前选择的子集的值,并且如若存在匹配,则设定排除掩码,如图13所示;第三指令(随机标签设定指令),如图14所示,其使用图11所示的随机选择状态来选择随机标签值72的子集中未被指示为由排除掩码所排除的一者。
图12示出了指定目的地寄存器Xd的BeginRandomTag(开始随机标签)指令(随机标签选择指令),其基于随机数生成器或伪随机数生成器60的输出来选择一小组随机标签。在此阶段,不需要考虑任何软件定义的排除值。在一些实现方式中,如若一些值被定义为由硬件永久排除,或者如若一些值被可配置地定义为使用配置寄存器排除,则BeginRandomTag指令仍然可排除一些值被选择。然而,通过忽略取决于与由软件所提供的输入地址相关联的标签或取决于先前指令的结果的任何软件定义的排除,这可简化用于实现该指令的硬件。因此,响应于该指令,指令译码器6控制伪随机数生成器或随机数生成器60来简单选择一定数目的标签值,并且控制处理电路4将选择值写入目的地寄存器Xd的对应的随机标签字段72。响应于BeginRandomTag指令,随机选择状态信息的排除掩码70被设定为全部0,以确保最初全部选择值被指示为非排除的。目的地寄存器的任何剩余位可以是零扩展的。
图13示出了指定两个源寄存器Xn、Xm和目的地寄存器Xd的ExcludeRandomTag(排除随机标签)指令(标签值排除指令),可执行该指令以确保由软件所定义的特定标签值不会由随后的随机标签设定指令选择作为随机标签值。该指令可类似于图7所示的指令,因为它需要指定已经具有设定的标签值40的地址的寄存器作为源寄存器Xn。响应于图13的指令,指令译码器6控制处理电路4从寄存器Xn中的地址提取标签值40,并且将提取标签值与存储在第二源寄存器Xm中所指定的随机选择状态信息的字段72中的随机标签值中的每一者进行比较,并且如若提取地址标签40与由BeginRandomTag指令所先前填充的随机标签72中的任一者匹配,则在目的地寄存器Xd中将排除掩码70的对应位设定为1。将随机标签值72本身从源寄存器Xm简单不变写到目的地寄存器Xd。ExcludeRandomTag指令可用不同的地址多次执行,以便检查是否应该排除随机标签值72中的多于一个的随机标签值。
图14示出了随机标签设定指令(EndRandomTag,结束随机标签),其基于存储在源寄存器Xm中的随机选择状态,来选择未由图13的ExcludeRandomTag指令排除的剩余标签中的一者,将选择的标签***在源寄存器Xn中所指定的地址,并且将结果写入目的地寄存器Xd。因此,多工器110可在寄存器Xm中所指定的随机标签值72的子集之间进行选择,这取决于排除掩码70的各个位的值。假设在BeginRandomTag指令与EndRandomTag指令之间的ExcludeRandomTag指令有最多T-1个实例(其中T是寄存器Xm中所指示的子集中的随机标签的数目),则总是存在至少一个未排除的随机标签值,并且因此至少一个未排除的随机标签值可由多工器80选择以用于***作为目的地寄存器Xd中所指定的地址中的随机标签值。
因此,通过将操作分成许多指令,这可更容易构建满足时序要求的处理硬件,并且其确保每个指令只需要指定最多2个源寄存器(这对于有效使用寄存器读取端口是有用的),而同时仍然允许从选择中排除从输入地址的相应地址标签提取的多于2个的值。
将理解的是,上文所示的全部示例实现方式仅仅是示例,并且还可使用其他硬件实现方式来实现排除某些值被选择的随机标签设定指令的架构功能。
图15示出了图示处理随机标签设定指令的方法的流程图。在步骤100,指令译码器60译码随机标签设定指令,其可以是上文所示的任何形式的指令。在步骤102,译码器6控制处理电路4来随机或伪随机选择一组候选标签值中的一者。在指令的一些变体中,可在步骤102防止选择一个或多个排除值。可如上文讨论般使用表示应排除哪些值的任何方式。在步骤104,指令译码器6控制处理电路4将用于标签设定目标地址的地址标签设定为选择的随机标签值本身或选择的随机标签值的变换中任一者。在某些情况下,可能需要基于标签设定目标地址本身的位或多个位来变换选择的随机标签值。这对排除某些值被选择的形式的指令是特别有用的,因为它们用作特殊的硬件特定值。例如,如若将某值保留为“匹配全部”值,其被认为是与标签的任何其他值匹配,则在一些实现方式中,可期望的是使用不同的值作为匹配全部值,这取决于地址空间中发现了地址的部分。例如,具有最高有效位等于0的地址可使用一个值作为匹配全部值,并且最高有效位等于1的地址可使用不同的值作为匹配全部值。这可简化实现方式,而同时支持按预期操作的传统代码。通过以在步骤102的相同方式来选择随机值而无论特定标签设定目标地址如何,但然后随后取决于地址的其他位来应用变换(诸如位的反转),这可使得传统功能能够如传统代码最初预期的那样工作,而不会非必要地复杂化随机选择步骤102。
可选地,在步骤106,还可将与包括由标签设定目标地址所标识的寻址位置的对应存储器位置区块相关联的保护标签设定为随机标签值。因此,响应于随机标签设定指令,指令译码器6还可控制存储器存取电路15将随机标签值写入存储与寻址位置相关联的保护标签的位置。
图16示出可使用的模拟器实现方式。尽管先前所述的实施例从用于操作支持所涉技术的特定处理硬件的装置和方法方面实现本发明,也可能根据本文所述的实施例来提供经由使用计算机程序来实现的指令执行环境。此种计算机程序通常被称为模拟器,只要其提供硬件架构的基于软件的实现方式。模拟器计算机程序的变体包括模仿器、虚拟机、模型和二进制转换器(包括动态二进制转换器)。典型地,模拟器实现方式可在主机处理器230上运行,主机处理器230可选地运行主机操作系统220,支持模拟器程序210。在一些布置中,在硬件与所提供的指令执行环境之间和/或在相同主机处理器上所提供的多个不同的指令执行环境之间可能存在多层模拟。历史上,已需要强力处理器来提供以合理速度执行的模拟器实现方式,但此种方法可被证明在某些情况下是合理的,诸如当需要运行另一处理器本端的代码以获得兼容性时,或出于重复使用的原因。例如,模拟器实现方式可提供具有主机处理器硬件不支持的附加功能的指令执行环境,或提供通常与不同硬件架构相关联的指令执行环境。模拟的概述在Winter 1990USENIX Conference第53页至第63页由RobertBedichek所写的“Some Efficient Architecture Simulation Techniques”中给出。
就先前已在模拟环境中参考特定硬件构造或特征描述的实施例而言,等效功能可由适当的软件构造或特征来提供。例如,可将特定电路在模拟实施例中实现为计算机程序逻辑。类似地,可将存储器硬件(诸如寄存器或高速缓存)在仿真实施例中实现为软件数据结构。在先前所述的实施例中提及的硬件元件中的一者或多者被呈现在主机硬件(例如,主机处理器230)上的布置中,一些模拟实施例可在适当时利用主机硬件。
模拟器程序210可存储在计算机可读取存储介质212(可以是非暂态介质)上,并且向目标代码200(其可包括应用程序、操作系统及超管理器)提供程序接口(指令执行环境),该程序接口与由模拟器程序210模型的硬件架构的应用程序接口相同。因此,目标代码200的程序指令(包括上文所述的随机标签设定指令)可使用模拟器程序210在指令执行环境内来执行,使得实际上不具有上文讨论的装置2的硬件特征的主计算机230可以模拟这些特征。例如,模拟器程序210可包括:存储器存取程序逻辑214,用于由目标代码200的指令控制对存储器的存取。例如,存储器存取程序逻辑214可包括用于执行保护标签与地址标签的比较并且报告在保护标签与地址标签之间是否已检测到任何不匹配的指令。此外,模拟器程序210可包括标签设定程序逻辑216,其包括用于响应于包括在目标代码200中的随机标签设定指令而触发上文讨论的将与标签设定目标地址相关联的地址标签设定为随机选择值的指令,其方式对应于硬件实施例设定地址标签的方式。
在本申请中,词语“被配置为……”用于意味着装置的元件具有能够进行所定义操作的配置。在此上下文中,“配置”意味着硬件或软件的互连的布置或方式。例如,装置可具有提供所定义操作的专用硬件,或处理器或其他处理设备可被编程以执行功能。“被配置为”不暗示需要以任何方式改变装置元件以便提供所定义操作。
尽管已在本文中参考附图详细描述了本发明的说明性实施例,要理解的是,本发明不限于那些精确实施例,并且本领域普通技术人员可在其中实现各种变化和修改,而不偏离由随附权利要求所定义的本发明的范畴及精神。
- 上一篇:一种医用注射器针头装配设备
- 下一篇:用于虚拟计算资源的部署前安全分析器服务