维持推测的状态的制作方法

文档序号:23068006发布日期:2020-11-25 17:55阅读:129来源:国知局
维持推测的状态的制作方法

本技术涉及数据处理。具体而言,本技术与推测执行的领域相关。



背景技术:

推测执行是一种技术,其中在知道是否应当执行一系列指令之前执行那些指令。在以后的某个时间点,确定是否应当执行推测执行的指令。如果是,则过程继续。如果不是,则执行被“倒回”。这种形式的推测被称为控制流推测。在某些情况下,已经发现这样的推测执行导致安全漏洞。例如,可以使处理器推测地执行特权代码以将受保护的数据不必要地加载到缓存中。由于在倒回后缓存可能未被清除,因此所请求的数据可以使用旁路攻击被探查。另一种形式的推测是数据值推测,其中在已知指令的所有输入之前推测该指令所产生的结果值。



技术实现要素:

本技术认识到期望在发生控制流推测之处保持数据安全。

从第一示例配置来看,提供了一种装置,其包括:输入电路,用于接收输入数据;输出电路,用于输出要由数据处理电路执行的指令序列,这些指令中的至少一些指令被分组到功能中;以及生成电路,用于执行生成过程以使用输入数据来生成指令序列,其中,该生成过程使指令序列中的指令中的至少一个指令存储在指令序列的执行期间执行的控制流推测的状态;并且所存储的控制流推测的状态在功能之间被维持。

从第二示例配置来看,提供了一种方法,其包括:接收输入数据;执行生成过程以使用输入数据来生成指令序列;以及输出要由数据处理电路执行的指令序列,这些指令中的至少一些指令被分组到功能中,其中,该生成过程使指令序列中的指令中的至少一个指令存储在指令序列的执行期间执行的控制流推测的状态;并且所存储的控制流推测的状态在功能之间被维持。

从第三示例配置来看,提供了一种装置,其包括:用于接收输入数据的装置;用于输出要由数据处理电路执行的指令序列的装置,这些指令中的至少一些指令被分组到功能中;以及用于执行生成过程以使用输入数据来生成指令序列的装置,其中该生成过程使指令序列中的指令中的至少一个指令存储在指令序列的执行期间执行的控制流推测的状态;并且所存储的控制流推测的状态在功能之间被维持。

附图说明

将参考如附图所示的本技术的实施例仅通过示例的方式来进一步描述本技术,其中:

图1示出了根据一些实施例的装置;

图2示出了分支指令的行为,并被用于演示一种形式的推测执行;

图3示出了条件选择指令的示例;

图4a和图4b示出了根据一些实施例的输入数据到输出指令序列的转换,该输出指令序列包含数据值推测限制的指令,从而使能控制流未命中推测(miss-speculation)跟踪;

图5a、图5b和图5c示出了根据一些实施例的输入数据到输出指令序列的转换,该输出指令序列包含跨功能调用边界的符合abi的控制流未命中推测跟踪;

图6示出了可以如何组合几种涉及转换的技术;

图7示出了根据一些实施例的装置;

图8示出了根据一些实施例的流程图形式的数据处理方法;并且

图9示出了根据一些实施例的流程图形式的数据处理方法。

具体实施方式

在参考附图讨论实施例之前,提供了对实施例和相关优点的以下描述。

根据一个方面,提供了一种装置,其包括:输入电路,用于接收输入数据;输出电路,用于输出要由数据处理电路执行的指令序列,这些指令中的至少一些指令被分组到功能中;以及生成电路,用于执行生成过程以使用输入数据来生成指令序列,其中该生成过程使指令序列中的指令中的至少一个指令存储在指令序列的执行期间执行的控制流推测的状态;并且所存储的控制流推测的状态在功能之间被维持。

以上装置可以采取将输入指令转换为输出指令的编译器的形式。输入电路接收输入数据,并且输出电路输出要由数据处理电路执行的指令序列。生成电路对输入数据执行生成过程,以便生成指令序列。该生成过程使所输出的指令中的至少一个指令存储在指令正在被执行时控制流推测的状态。该状态在功能之间被维持,例如在功能调用和从功能调用返回期间。在这种情况下,可能可以在另一个功能中访问在一个功能中建立的推测状态。输入数据可以通过生成过程被从第一语言转化成可由数据处理电路(其可以是处理电路本身)执行的第二语言。在其他实施例中,输入数据可以是以与所输出的指令序列相同的语言,并且生成过程可以使附加指令被添加以建立控制流推测的状态。

在一些实施例中,控制流推测的状态指示控制流推测是否正确地发生。控制流推测可以发生在条件分支指令的情况下,其中进行分支预测以确定关于获取、解码和开始执行进一步的指令是否应当遵循该分支,直到该分支的结果已知为止。在这些实施例中,提供了指示推测是否正确地发生的指令。

在一些实施例中,指令序列中的指令中存储控制流推测状态的至少一个指令被数据处理电路阻止经历(subjectto)数据值推测。这可以通过例如配设“推测屏障”来实现,该“推测屏障”禁止在进一步的指令中使用推测的数据值,直到已经确定那些推测的数据值是正确的为止。如前所述,数据推测是一种用于估计数据值的技术。因此,通过在确定控制流推测的状态时禁止发生数据值推测,可以确定实际上是否应该遵循分支。

在一些实施例中,指令序列中的指令中存储控制流推测状态的至少一个指令适于使数据处理电路执行比较并根据比较结果存储控制流推测的状态。执行比较以确定控制流推测是否应当引起分支。控制流推测的状态然后被存储,使得其在其他地方的其他计算中可以被引用或使用。

在一些实施例中,输入数据包括条件分支指令,该条件分支指令包括条件和当该条件被满足时分支到的目标;并且指令序列在该目标处包括指令序列中的指令中存储控制流推测状态的至少一个指令。存储控制流推测状态的指令发生在可能经历控制流推测的分支指令之后。因此,在发生控制流推测的情况下,可以确定分支决定是否正确。

在一些实施例中,比较在逻辑上与条件相对应。将会认识到,如果由确定控制流推测状态的指令执行的比较与条件分支指令中的条件相匹配,则控制流推测的状态与是否应当采取条件分支相匹配。这里,术语“在逻辑上与…相对应”意味着条件和比较具有逻辑等价。如技术人员将知道的,这可以使用布尔真值表来建立。

在一些实施例中,响应于与条件未被满足相对应的比较结果,控制流推测的状态指示控制流推测不正确地发生。

在一些实施例中,指令序列的至少子集符合应用二进制接口;并且所存储的控制流推测的状态通过以下操作在功能之间被维持:将根据应用二进制接口的非法值存储在存储电路中。应用二进制接口(abi)规定软件应当如何使用某些硬件元素。例如,abi可以规定调用约定(例如,不同的值将如何被存储在寄存器和/或堆栈中以便执行功能调用或从功能调用返回)。因此,abi可以规定特定的寄存器应当/不应当存储特定的值。无论如何,在这样的实施例中,尽管多个指令的至少子集符合abi,但是(根据abi的)“非法”(例如,不允许的)值被存储在存储电路中,以便在功能之间维持控制流推测的状态。以这种方式,由于存储电路中的“非法”值的存在应当没有效果,因此与现有系统的兼容性可以被维持。

在一些实施例中,所存储的控制流推测的状态通过以下操作在至少一些功能内被维持:存储根据应用二进制接口的合法值。在一些实施例中,在功能之间,合法值被存储在其中存储有非法值的相同存储电路中。然而,在一些实施例中,在功能之内,合法值被存储在不同的存储电路中。

在一些实施例中,响应于控制流推测状态指示发生未命中推测,非法值被存储在存储电路中。由于作为未命中推测的结果,将预期发生“倒回”,因此直到发生倒回为止将非法值存储在存储电路中可被认为是可接受的。注意,在一些其他实施例中,相反情况可以是真的,即,响应于控制流推测状态指示未发生未命中推测而存储非法值。

在一些实施例中,存储电路包括寄存器。例如,在一些实施例中,存储电路包括堆栈指针寄存器;并且非法值是0。在一些abi中,堆栈指针寄存器(其可用于指向存储器中存储前一堆栈帧的末尾的地址)不被允许跨功能调用地为0。因此,通过将值0存储在堆栈指针寄存器中,可以指示已经发生未命中推测。此外,由于禁止这样的值在堆栈指针寄存器中,因此在这里存储这样的值应当没有整体效果。

在一些实施例中,指令序列包括访问指令,该访问指令包括访问地址;并且该访问指令的正确执行取决于控制流推测的状态。以这种方式,可以根据控制流推测是应当发生还是不应当发生来控制对数据的访问。在一些情况下,可以认为访问指令的正确执行是安全的,因为以这种方式可以阻止在不安全的情形下(诸如其中已经发生控制流未命中推测并且其中对数据值的访问是不合适的)执行访问指令。这可以帮助阻止特权数据被泄漏,因为该数据在发生未命中推测的情况下可以实际上不被取回。

在一些实施例中,指令序列包括在访问指令之前的对访问地址执行操作的指令;并且该操作取决于控制流推测的状态。通过对地址执行取决于控制流推测状态的操作,可以根据控制流推测是否正确来影响该地址。这可以在访问不合适的情况下使得可以使地址“损坏”,使得不会发生访问,从而防止数据被取回。

有多种方式可以执行该操作。在一些实施例中,该操作是包括操作数的逻辑“与”运算;并且在控制流推测的状态指示发生未命中推测的情况下,该操作数是0。因此,当发生未命中推测时,执行“与”运算的结果是有效地使访问地址“无效”(归零),从而阻止发生访问。在根据控制流推测的状态尚未发生未命中推测的情况下,操作数可以是全1值(例如,对于存储在适当寄存器中的每个位都是‘1’),使得与访问地址的“与”结果是访问地址本身。

另一种保护数据的方式是在数据已被取回之后对数据本身执行操作。因此,在一些实施例中,指令序列包括对由访问指令从访问地址取回的数据执行操作的指令;并且该操作取决于控制流推测的状态。再次,例如,在一些实施例中,该操作是包括操作数的逻辑“与”运算;并且在控制流推测的状态指示发生未命中推测的情况下,操作数是0。因此,在取回数据之后,其在指示发生未命中推测的情况下立即被使数据无效(归零)的“与”运算所影响。

现在将参考附图描述具体实施例。

图1示出了根据一些实施例的装置100。该装置可以例如采取用于执行指令的流水线的形式。在图1的示例中,提供了指令获取器110。这例如从存储器或从指令缓存获得将被执行的指令。指令获取器然后将获取的(一个或多个)指令传递给指令解码器120,该指令解码器120对获取的指令进行解码并针对每个指令生成一个或多个控制信号。这些控制信号被传递给一个或多个保留站130a-130d。每个保留站存储与用于供执行单元140a-140d执行的指令相对应的数据。每个保留站130充当关于经解码指令的队列,并且给定保留站130a中的经解码指令可以由对应的执行单元140a以任何顺序来处理。这里,执行单元140包括两个算术逻辑单元(alu)140a、140b,浮点单元140c,以及加载/存储单元140d。经解码的指令被发送到适当的执行单元140。例如,浮点指令经由对应的保留站130c被发送到浮点单元140c。

图2示出了分支指令的行为,并被用于演示一种形式的推测执行。具体而言,第一组指令200包括分支指令a。这导致流程跳转到第二组指令210。在条件分支指令(具有与之相关联的条件的分支指令)的情况下,将仅在条件被满足的情况下发生分支。如果发生分支,则执行将在分支指令的目标b处继续。在该示例中,这涉及指令d、e、f、g和h的执行。指令h充当返回指令,该返回指令使分支返回。流程然后返回到第一块指令200中的指令c,在该指令处执行恢复。

在典型的执行中,指令获取器110可花费一个处理器周期来获取指令,并且指令解码器可花费另一处理器周期来对该指令进行解码。该指令然后可以在保留站130中等待,直到必要的数据已被获得为止。例如,如果指令对存储器中的数据进行操作,则可能花费几个处理器周期从存储器中取回数据。一旦指令已被传递,则可能花费另一处理器周期在执行单元140处实际执行该指令。为了效率高地进行维持,典型的数据处理系统将继续同时操作(例如,获取、解码和执行)其他指令。在这里,条件分支指令在理论上可能会引起问题,因为在条件被实际评估之前不知道接下来应当获取/解码/执行哪些指令。为了帮助解决该问题,进行了分支预测,并假定分支将朝一个特定方向前进。然后,在该方向上的指令被获取/解码/执行。如果预测是正确的,则效率已被维持。如果不是,则发生“倒回”,并且执行从正确的位置恢复。在这种情况下,与执行仅仅在分支被执行之前停止的情况相比,没有损失大量的时间。这是推测执行的示例。因此,在图2的示例中,当到达a处的分支指令时,在知道是否应当遵循a处的分支之前可以执行指令b-h中的一些或全部(并且在h处的返回指令被执行的情况下甚至执行c)。

图3示出了条件选择指令300的示例。该指令包括目的地310(例如,寄存器x20)、第一源320(例如,特殊寄存器xzr,其总是包含值“0”)、第二源330(例如,寄存器x20)、和条件340(例如,“ge”,其指示“大于或相等标志是否被设置”)。大于或相等标志可被设置作为比较两个值的先前指令的结果。可替代地,在一些实施例中,组成条件选择指令的条件340可以直接包括两个值的比较。

如果大于或相等标志未被设置,则该指令的执行使(xzr寄存器中的)值0被存储在寄存器x20中。否则(如果大于或相等标志被设置),寄存器x20中的值被存储在寄存器x20中(即,寄存器x20的值保持不变)。注意,如果条件选择指令中的条件340与条件分支指令的条件相对应,则如在下面示出,可以使存储在寄存器x20中的值根据控制流推测执行是否正确发生而改变。

图4a示出了可以如何使用条件选择指令,以便通过将输入指令集400编译(例如,转换)成输出指令集410来确定是否已经发生未命中推测。注意,输入指令400可以以一种语言,并且输出指令410可以以旨在在诸如图1所示的数据处理电路100上执行的第二语言。

输入指令包含典型的条件分支场景。在该示例中,分支指令的条件420是“大于或相等标志”被设置。如果该条件被满足,则发生到目标标签bb2(其包括指令instr2)的分支。否则,执行在标签bb1(其包括指令instr1)处继续。在输出指令中,寄存器x20最初加载有值“-1”。然后如在输入指令中那样发生分支。在目标标签bb2处,如先前参考图3所描述的,发生条件选择指令。然而,条件选择指令430的条件是分支指令中的条件420的相反情况——依赖于‘lt’(“小于”)标志被设置。结果,条件选择指令的条件与分支指令的条件相对应,因为它们每个都依赖于相同的测试,并且只是根据可能的结果而采取不同的动作。然后执行分支bb2的剩余指令(包括instr2)。类似地,在分支bb1处,发生条件选择指令440。如果分支指令420未被遵循,则执行该代码。在这种情况下,条件选择指令440中的条件与分支指令420的条件相同。

以这种方式,在分支bb1处,寄存器x20中的值或者将保持不变(“-1”)或者将被改变(到“0”)。由于每个条件选择指令430、440中的条件420与到达包含该条件选择指令的目标所需的分支指令420中的条件相反,因此仅在发生未命中推测的情况下将改变寄存器x20的值。否则,寄存器x20将保持不变。例如,假设在bb2处发生推测。这在‘ge’标志被设置的情况下将结果是正确的。在这里,条件选择指令420确定‘lt’标志是否被设置。假设‘ge’和‘lt’标志是互斥的,如果分支指令420中的条件被满足(即,如果推测正确地发生),则条件选择指令420将使寄存器x20中的值保持不变(例如,通过将寄存器x20中的值移动到寄存器x20),并且对于bb1处的条件选择指令440也是类似的。在每种情况下,如果分支被正确地推测,则寄存器x20将维持值‘-1’。在该示例中,csdb指令阻止在csdb指令之后执行的任何指令观察到可能发生在csel指令上的数据值推测。这使寄存器x20中的值针对在csdb已被执行之后执行的指令准确地表示控制流预测的正确性。csdb指令是特殊的指令,其被用于阻止在csdb指令之后执行的指令看到在csdb指令之前发生的数据值未命中推测。因此,csel指令的实际结果被建立,而不是通过数据值推测来估计。当然,如果已发生未命中推测,则在将来的某个时间点,将发生“倒回”。然而,在那之前,了解已发生控制流未命中推测以阻止特权数据被泄漏是有用的。

将会认识到,在相关示例中,如果推测正确地发生,则可以使得发生改变,并且如果分支被未命中推测,则保持不变。类似地,将会认识到,可以针对每个结果任意选择特定值(例如‘0’和‘-1’)。

图4b示出了可以如何使用由条件选择指令产生的输出来保护对特定数据的访问。这里假设寄存器x20包含关于推测是正确地发生(全1)还是不正确地发生(全0)的指示。在输入数据450中,进行加载以获得在存储器地址处被存储在存储器中的数据,该存储器地址被存储在寄存器x1中。该数据被加载到寄存器x0中。在这里,寄存器x1中存储的存储器地址被认为包含特权信息,因为它与安全数据有关。因此,希望在正在发生控制流未命中推测时(即,当程序员不打算加载该数据时)不使该数据被加载在寄存器x0中。输出数据460用寄存器x20中存储的值对寄存器x1中的存储器地址执行逻辑“与”运算。这在控制流未命中推测的情况下导致x1具有值0,因此加载是从地址0而不是特权数据的地址进行加载。

最后,在现在存储在寄存器x1中的存储器地址上发生加载。如果发生未命中推测,则用寄存器x20中的全0值进行逻辑“与”运算将使寄存器x1中的存储器地址被擦除,从而防止通过加载指令进行其访问。如果推测正确地发生,则逻辑“与”运算将不管寄存器x20中的值,从而允许通过加载指令对其进行访问。因此,加载被保护,使得它可以仅在推测被正确执行的情况下才发生。

注意,csdb指令可被放置在对寄存器x20的最后csel操作与寄存器x20在“与”指令中的首次使用之间的任何位置,以保护加载特权数据的加载指令。

希望关于是否发生未命中推测的指示跨功能调用地持续。图5a、图5b和图5c示出了可以如何执行进一步的转化,以便使未命中推测指示符能够跨功能调用地持续。

在这些示例中,假设输出指令510、530、550符合应用二进制接口(abi)。这规定了底层软件应当如何利用硬件。例如,它可以规定调用约定,这些调用约定指定应当如何实现功能调用(例如,应当被用于将参数传递给所调用的功能的寄存器)、应当如何回传结果、应当如何以及何时改变程序计数器和堆栈指针等。在本示例中,假设(情况常常如此)abi禁止跨功能(例如,在调用或返回期间)将值‘0’存储在堆栈指针中。因此,通过将值‘0’存储在堆栈指针中,可以提供向后兼容的系统,该系统跨功能传送如下的事实:或者已正确地发生控制流推测,或者已发生未命中推测。由于这在寄存器中使用了被abi禁止的值,因此它对任何现有系统不应造成问题。换句话说,堆栈指针寄存器中的‘0’的存在应当没有效果。本示例使用值‘0’来指代已发生未命中推测的事实。另外,与先前使用的寄存器x20相反,本示例使用功能内的寄存器ip1来存储指示是否发生未命中推测的值。

图5a示出了如何将输入指令500中的功能调用转化为执行功能调用的输出指令510。输出指令将当前堆栈指针移动到临时寄存器ip0中。然后在ip0中的堆栈指针值与包含控制流未命中推测值(在控制流正被正确推测的情况下为全1,并且在控制流正被不正确推测的情况下为0)的寄存器ip1的值之间执行逻辑“与”运算,并将结果存储在临时寄存器ip0中。该“与”运算导致ip0或者包含堆栈指针的值(在正确的控制流推测的情况下)或者为0(在不正确的控制流推测的情况下)。然后将结果存储回堆栈指针。某些体系结构禁止直接在堆栈指针上进行算术/逻辑运算。在该示例中,mov指令将堆栈指针的值移动到临时寄存器以允许对其进行更改。在允许堆栈指针上的直接操作的其他体系结构上,可能可以将堆栈指针的值直接设置为0(当发生控制流未命中推测时)而无需mov指令。

然后执行分支和链接指令,这导致发生对标签“callee(被调用者)”的无条件功能调用。注意,分支和链接指令不是条件分支指令,因此不会由于该分支和链接指令本身而发生未命中推测。然而,包含该分支和链接指令的功能可能由于发生未命中推测而被进入。本技术使得可以跨功能维持控制流推测的状态,因此在被从该分支和链接指令进入的功能中,已知是否已发生未命中推测(来自先前的条件分支指令,未示出)。

图5b示出了在callee标签处的行为。在输入指令520中,这可能仅包括标签“callee:”。在(例如经由编译或转换)由此生成的输出指令530中,进行堆栈指针与值‘0’之间的比较,之后是条件选择指令。当堆栈指针为零时,即当发生控制流未命中推测时,该代码序列导致寄存器ip1包含全零。如果在该点之前尚未发生控制流未命中推测,则堆栈指针将具有非零值,并且该代码序列导致ip1包含全一值。这样,通过在堆栈指针中使用abi非法值‘0’,已经将ip1的值从对“callee”的功能调用之前转移到了功能“callee”中。

图5c示出了导致从功能调用返回的返回指令处的行为。在输入指令540中,这可能仅包括指令‘ret’。在(例如经由编译或转换)由此生成的输出指令550中,堆栈指针被移动到临时寄存器ip0中。然后对ip0和ip1的内容执行逻辑“与”运算。最后,将结果移回堆栈指针,并发生到调用者的返回。如上所述,使用临时寄存器ip0,以便对堆栈指针中存储的值执行操作。

参考回图5a,输出指令510的最后两行指示在返回之后在调用者处发生了什么。具体而言,再次将堆栈指针与值‘0’进行比较。如果堆栈指针等于‘0’,则‘0’被存储在ip1中(即,指示发生了控制流未命中推测),否则,通过csetm指令将全一值存储在寄存器ip1中。组合的图5a、图5b和图5c演示了如何通过针对堆栈指针使用abi非法值来跨功能调用边界地传送寄存器ip1中的控制流未命中推测值。

图6示出了可以如何组合这些技术中的几种。在这里,输入数据580导致分支到标签“function(功能)”。在标签“function”处,在寄存器x1中所列出的地址处被保存在存储器中的值然后被加载到寄存器x0中。然后在返回之前执行指令‘instr1’。在输出数据590中,再次在功能内使用寄存器ip1来表示是否已发生控制流未命中推测。通过将该值放入堆栈指针来在功能之间传递该值。在发生未命中推测的情况下,ip1中的值为‘0’,否则为全1值。对于堆栈指针,当发生未命中推测时,值为‘0’,否则为未被改变的堆栈指针值(abi规则禁止其为‘0’)。如之前,堆栈指针被移动到寄存器ip0中,使得其可以被调整。然后将其与ip1的当前值进行“与”,然后将其移回堆栈指针。在该阶段,堆栈指针现在将反映控制流推测的状态。然后发生功能调用(bl指令)。在功能‘function’处,控制流推测的状态被转移回ip1。如之前,如果已正确发生控制流推测,则寄存器‘x1’中的访问地址保持不变,否则该值被‘损坏’,从而防止访问。刚好在“与”指令之前的csdb指令意味着ip1的值将不是此时推测的数据值(未命中),使得当发生控制流未命中推测时,x1中的地址被损坏。然后执行指令‘instr1’。最后,在返回之前将控制流推测的状态存储回堆栈指针。在调用功能中的返回时,堆栈指针中的控制流未命中推测指示(对于未命中推测是‘0’,对于正确推测是任何非零值)被转化回寄存器ip1(对于未命中推测是‘0’,对于正确推测是全一),并且剩余指令的执行继续进行(在图6中被示出为‘…’)。

图7示出了根据一些实施例的用于从输入数据产生输出指令的装置600。该装置包括输入电路610,该输入电路610接收输入数据(其可以是以指令的形式,也许是以与输出指令不同的语言)。输入电路将这些指令传递给生成电路620,该生成电路620生成输出指令的序列。输出指令的序列基于输入指令。在该示例中,输出指令将实现与输入指令相同的效果,但是将使如下的其他指令被添加(其中至少一些限制被添加在数据值推测上):这些指令使得在寄存器中跟踪控制流未命中推测,如例如针对图4a、图4b、图5a、图5b和图5c中的一些或全部所演示的。然后由输出电路630输出这些输出指令。由输出电路630输出的指令序列被设计为在处理电路100上被执行。该指令序列是这样的:它们实现abi,只是有一个特定例外。这一个例外是:关于诸如堆栈指针寄存器之类的存储电路640,被禁止跨功能调用地存储在存储电路中的值实际上被跨功能调用地存储在该存储电路中,以便表示发生了(或尚未发生)未命中推测的事实。

图8示出了根据一些实施例的数据处理方法。该方法以流程图700的形式示出,并且可以例如由如图1所示的数据处理装置100执行。在步骤710,对指令进行解码并生成控制信号。在步骤720,使用控制信号来执行一个或多个数据处理操作。在步骤730,确定是否以某种方式标记了与数据处理操作相对应的控制信号(并因此标记了对应的指令),以阻止针对那些指令执行数据值推测。如果否,则在步骤740针对那些数据处理操作允许推测。否则,在步骤750,针对那些指令禁止推测。

图9示出了根据一些实施例的数据处理方法。该方法以流程图800的形式示出,并且可以例如使用如图7所示的装置600来执行。在步骤810,接收输入数据。在步骤820,执行生成过程。这可以与关于图4a、图4b、图5a、图5b和图5c示出的一些或全部过程相对应。输出指令中的一个或多个使得在执行期间存储控制流推测的状态。最后,在步骤830输出生成过程的输出(输出指令的序列)。

在本申请中,词语“被配置为...”用于表示装置的元件具有能够执行所定义的操作的配置。在该上下文中,“配置”表示硬件或软件的互连的布置或方式。例如,装置可以具有提供所定义的操作的专用硬件,或者处理器或其他处理设备可以被编程为执行功能。“被配置为”并非暗示需要以任何方式改变装置元件以便提供所定义的操作。

尽管本文中已经参考附图详细描述了本发明的说明性实施例,但是将会明白,本发明不限于那些精确的实施例,并且本领域技术人员在不脱离如由所附权利要求限定的本发明的范围和精神的情况下可以在其中实现各种改变、添加和修改。例如,在不脱离本发明的范围的情况下,可以进行从属权利要求的特征与独立权利要求的特征的各种组合。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1