首页> 中国专利> 微处理器及用于微处理器的动态重设方法

微处理器及用于微处理器的动态重设方法

摘要

本发明提供一种微处理器及用于微处理器的动态重设方法。该微处理器包括:多个动态重设功能性单元;一指纹;一指纹单元,其中当该等动态重设功能性单元依据一第一配置设定以执行多个指令时,该指纹单元依据一数学运算以累计关于该等指令的一指令信息,藉以产生一结果;以及一重设单元,用以依据一第二配置设定重设该等动态重设功能性单元以执行该等指令,藉以回应该结果与该指纹相符。

著录项

  • 公开/公告号CN104267928A

    专利类型发明专利

  • 公开/公告日2015-01-07

    原文格式PDF

  • 申请/专利权人 威盛电子股份有限公司;

    申请/专利号CN201410482537.6

  • 申请日2014-09-19

  • 分类号G06F9/30(20060101);

  • 代理机构11105 北京市柳沈律师事务所;

  • 代理人钱大勇

  • 地址 中国台湾新北市

  • 入库时间 2023-12-17 03:57:53

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2023-06-27

    专利权人的姓名或者名称、地址的变更 IPC(主分类):G06F 9/30 专利号:ZL2014104825376 变更事项:专利权人 变更前:上海兆芯集成电路有限公司 变更后:上海兆芯集成电路股份有限公司 变更事项:地址 变更前:201203 上海市张江高科技园区金科路2537号301室 变更后:201203 上海市浦东新区张江高科技园区金科路2537号301室

    专利权人的姓名或者名称、地址的变更

  • 2018-01-26

    授权

    授权

  • 2016-02-10

    专利申请权的转移 IPC(主分类):G06F9/30 登记生效日:20160121 变更前: 变更后: 申请日:20140919

    专利申请权、专利权的转移

  • 2015-02-04

    实质审查的生效 IPC(主分类):G06F9/30 申请日:20140919

    实质审查的生效

  • 2015-01-07

    公开

    公开

说明书

技术领域

本发明涉及一种微处理器,特别涉及一种可动态重设的微处理器及用于 微处理器的动态重设方法。

背景技术

微处理器的设计者往往会花费许多努力在效能分析上。在依据先前几代 的微处理器以利用特征及效能目标的基础集合来架构一微处理器时,设计者 会执行软件应用程序中与他们的顾客最为相关的一具有代表性的样本,并提 取软件应用程序的指令执行记录。设计者接着使用所提取的记录做为刺激 (stimulus)以模拟正在设计的微处理器的运作。为了在所有目标软件应用程序 中达成最高的聚集效能(aggregate performance),设计者可设定被模拟的微处 理器的不同特性。一般而言,会需要一目标应用程序的特性的一特别配置设 定,且其他应用程序不需要。在这些例子中,设计者可决定那个软件应用程 序较为重要,或是寻找其他方法,可尝试均衡多个软件应用程序的需求。上 述选择并无法达到目标软件应用程序的最佳效能,因为其在尝试最佳化其中 一个软件应用程序的效能时也会损害了另一个软件应用程序的效能。

当辨识出配置设定的最佳平均集合时,举例来说,微处理器的设计者可 将其写为VHDL或Verilog程序代码。其他微处理器可藉由在微处理器中包 含一列的保险丝(fuse)来改良其硬编码设定,其可在微处理器的制造时选择性 地熔断(blown),藉以改变其硬编码值的配置设定。上述方式可让微处理器在 制造时有限度的最佳化,或许可回应在微处理器设计之后而发表的新软件应 用程序或是操作系统。然而,此解决方式仍无法达到目标软件应用程序的最 佳效能,因其需要设计者/制造者选择用于最佳化某些应用程序的配置设定且 同时牺牲了其他应用程序的效能,或是选择一均衡配置设定,通常不会对任 何应用程序进行最佳化。

为了陈述此问题,于2008年7月10日申请的美国专利申请号12/170, 591已揭示相关技术,例如一微处理器可藉由基于目前正在运作的应用程序 的一装置驱动器以动态设定至多个操作模式。然而,仍然需要更佳的效能最 佳化效果。

发明内容

本发明提供一种微处理器,包括:多个动态重设功能性单元;一指纹; 一指纹单元,其中当该等动态重设功能性单元依据一第一配置设定以执行多 个指令时,该指纹单元依据一数学运算以累计关于该等指令之一指令信息, 藉以产生一结果;以及一重设单元,用以依据一第二配置设定重设该等动态 重设功能性单元以执行该等指令,藉以回应该结果与该指纹相符。

本发明还提供一种用于一微处理器的动态重设方法,该微处理器包括一 指纹及多个动态重设功能性单元,该方法包括:当该等动态重设功能性单元 依据一第一配置设定执行多个指令时,依据一数学运算累计该等指令之一指 令信息以产生一结果;以及依据回应表示该结果与一指纹相符的一第二配置 设定以重设该等动态重设功能性单元以执行该等指令。

本发明还提供一种微处理器,包括:多个动态重设功能性单元;一静态 计数值;一指令计数器,其中当该等动态重设功能性单元依据一第一配置设 定以执行多个指令时,该指令计数器依据一准则计数该等指令以产生一动态 计数值;以及一重设单元,用以依据回应该动态计数值与该静态计数值相符 的一第二配置设定以重设该等动态重设功能性单元以执行该等指令。

本发明还提供一种用于一微处理器的动态重设方法,该微处理器包括一 静态计数值及多个动态重设功能性单元,该方法包括:当该等动态重设功能 性单元依据一第一配置设定执行多个指令时,依据一准则以计数该等指令以 产生一动态计数值;以及依据回应该动态计数值与该静态计数值相符的一第 二配置设定以重设该等动态重设功能性单元以执行该等指令。

附图说明

图1是显示一微处理器100的功能方块图。

图2是显示依据本发明一实施例中的指纹单元102的详细功能方块图。

图3是显示依据本发明一实施例中用以产生已知目标程序部分及其有关 的静态指纹、配置设定及指纹产生准则的数据库的流程图。

图4是显示依据本发明一实施例中微处理器100动态重设其本身的动作 的流程图。

图5是显示依据本发明一实施例中微处理器110动态重设其本身的更进 一步运作的流程图。

图6是显示依据本发明又一实施例中微处理器100动态重设其本身的运 作的流程图。

图7是显示依据本发明又一实施例中微处理器100动态重设其本身的运 作的流程图。

图8是显示依据本发明另一实施例中图1的指纹单元102的方块图。

图9是显示依据本发明一实施例中的微处理器100动态重设其本身的运 作的流程图。

图10是显示依据本发明一实施例中微处理器100检测NOP滑动的运作 的流程图。

【符号说明】

100~微处理器;

102~指纹单元;

104~重设单元;

124~配置寄存器;

126~指纹设定准则表;

128~动态重设功能性单元;

132~指纹编程寄存器;

142~指令信息;

144~控制信号;

202~指令指针;

204~位移字段;

206~运算码字段;

208~ModRM字段;

212~SIB字段;

214~前缀;

222~数学运算电路;

224~结果(动态指纹);

226~比较器;

228~相符信号;

232~静态指纹;

234~控制逻辑;

238~指纹产生准则;

242~衰减计数器;

244~串接信号;

822~指令计数器;

826~比较器;

832~静态指令计数值;

302-314、402-412、514-522、602-608、702-708、902-912、1002 -1008~方块。

具体实施方式

为使本发明的上述目的、特征和优点能更明显易懂,下文特举一优选实 施例,并配合附图,作详细说明如下。

词汇(Glossary)

「指纹(fingerprint)」为可辨识一程序的指令的序列的一数值。指纹值的 产生依据一数学运算而得到的关于指令的序列的信息累积的结果。该信息可 包括,举例来说,该指令的指令指针值的多个组合(例如指令的地址)、指令的 操作码(opcode)、指令的位移(displacement)、指令的前缀(prefix,又称为“字 首”)、和/或指令的部分地址模式,例如是x86架构指令的SIB或modRM位 或其部分。举例来说,累积指令信息的数学运算可包括连续地计算与在序列 中的各指令有关的一循环冗余检查码(cyclic redundancy code)。举例来说,该 数学运算也可包括在一多输入移位寄存器(multiple input shift register)中使用 最大计数多项式来累计指令信息。举例来说,该数学运算还可包括依据一哈 希函数(hash function),例如是一变长度(variable-length)数据哈希函数,以累 计指令信息。举例来说,该数学运算还可包括利用连接指令信息进行排列, 例如是一固定长度排列(fixed-length queue),以累计指令信息。

依据两个不同产生的时间点,指纹值可分为两种类型:静态及动态。当 微处理器执行一程序的指令时,微处理器的指纹单元产生一动态指纹 (dynamic fingerprint),反之,工程师会预先产生一静态指纹。静态指纹会提供 至指纹单元,使得指纹单元可比较其产生的动态指纹及其所接收的静态指纹。 指纹单元更可接收指纹产生准则(fingerprint generation criteria),例如是起始条 件、停止条件、及重置条件,其可控制指纹单元累计指令信息以产生动态指 纹。指纹产生准则也可指定为指令信息的部分的组合以让指纹单元进行累计 以产生动态指纹。

当各指令执行后(取出(fetch)后为佳),指纹单元接收指令信息。若指纹单 元检测到一起始条件,其会依据可产生结果的数学运算来累计指令信息,其 结果为动态指纹。当各指令执行后,指纹单元会持续接收指令信息,并依据 可产生结果的数学运算以累计指令信息,直到指纹单元检测到一停止条件或 一重置条件。在重置条件的一例子中,指纹单元清除累计的状态,并依据可 产生结果的数学运算再开始累计指令信息。更适宜地而言,每当指纹单元产 生介于一起始条件及一停止条件的一新结果,其会比较该结果(动态指纹)与该 静态指纹,并表示它们是否相符。起始条件的例子包括一已分支(branch)的指 令、一返回(return)指令、来自中断(interrupt)指令的返回、一陷阱(trap)情况、 一例外(exception)情况、一系统调用或返回指令(例如x86架构中的 SYSENTER或SYSEXIT指令)、一子程序调用(subroutine call)、一功能性单 元控制指令(例如x86架构中的FINIT指令)、或是来自另一指纹单元的表示 符,表示其已检测到指纹相符。停止条件的例子包括类似于起始条件的各种 情况,且也可包括指纹相符及在一起始条件之后所执行的指令的计算的失效 (expiration)。重置条件的例子包括类似于起始条件的各种情况,且也可包括 一硬件重置及非不操作(NOP)指令的一指令。

产生静态指纹的流程公开于下述实施例。工程师可辨识程序部分的一目 标集合,并想以其来增进效能、降低功耗和/或修正错误。接着,对于各目标 程序部分,工程师辨识指令序列,若执行指令序列,其表示该目标程序部分 正在执行或是将于即将执行。工程师接着提供该串(strand),即称为指令信息, 并依据数学运算(与在指纹单元中用于产生动态指纹的数学运算相同)累计指 令信息以产生一结果。该结果存储于一数据库或一档案中,与该程序部分相 关的静态指纹相同。产生静态指纹可藉由多种方式来运作。举例来说,工程 师可提供收集与该指令序列有关的准则的指纹至一软件程序,例如是一微处 理器的一功能模拟器,并接着于该功能模拟器上执行该程序,且在当其遇到 停止条件时,指示该功能模拟器输出该功能模拟器的指纹引擎部分的结果, 其中该结果用于该指令序列的静态指纹。另一方面,工程师可使用微处理器 本身以执行一相同运算,在一实验室环境中,该微处理器可特别设定于侦错/ 测试设定以输出静态指纹和/或该微处理器接至测试设备的一块以提供测试 矢量(test vectors)至该微处理器并接收测试结果。在工程师已收集目标静态指 纹之后,工程师可创建一表单,其将静态指纹与下列条件进行联结,例如(1) 可最佳化微处理器的功能性单元的配置设定,其用于处理与指令序列有关的 程序部分;及(2)收集准则的指纹。

需了解的是检测一静态指纹与一动态指纹的相符并不会唯一肯定地辨识 与该程序部分有关的指令序列,但取而代之的是指出一高机率表示该指令序 列已经被执行。此方式有点类似于人的指纹并无法唯一肯定地辨识一个人。 意即,在一相对少数的情况中,指纹单元更可指出在静态指纹所产生的该指 纹序列之外的一指令序列,其可称为一「别名(alias)」指令序列。

一功能性单元为硬件或是在一微处理器中的软件及硬件的组合,其可执 行与处理一指令相关的一函数。功能性单元的例子包括,但非限定,一指令 提取单元、一分支预测单元、一指令格式单元、一指令转译单元、一寄存器 更名单元、一指令调度单元、一执行单元(例如是一整数单元、一浮点单元、 一分支单元、一单一指令多重数据(single instruction multiple data)单元、一多 媒体单元、读取单元、存储单元)、一重新排序单元、一引退单元(retire unit)、 一快取存储器、一数据预提取单元、一电源管理单元、一存储器管理单元、 以及一存储冲突检测单元。

若一功能性单元的设定可在微处理器运作时改变,则表示该功能性单元 动态可重设(dynamically reconfigurable)。需了解的是,为了改变动态可重设的 功能性单元的设定,当正要改变配置设定时,微处理器需先藉由该动态重设 功能性单元和/或整个微处理器以暂停指令的处理。举例来说,在一实施例中, 微程序代码(microcode)可藉由写入一数值至设定寄存器以改变配置设定。该 微程序代码路径可在新配置设定写入之前且直到新配置设定生效时,序列化 (serialize)指令的执行。

一功能性单元的一配置设定为一状态,其可在当状态具有不同数值时, 可导致该功能性单元以不同方式执行其功能。不同的方式会影响执行其功能 的功能性单元的效能、功耗和/或正确度。

请参考图1,图1是显示一微处理器100的功能方块图。微处理器100 包括多个动态重设功能性单元(dynamically reconfigurable functional unit)128、 多个配置寄存器124、一重设单元104、一或多个指纹单元102、一指纹编程 寄存器132(例如是一特定模型寄存器(model specific register、MSR))、以及指 纹设定准则表126,其中该指纹设定准则表126记录静态指纹、相关的配置 设定及指纹产生准则。于图1中未绘示,微处理器100更可包括无法动态可 重设的功能性单元。在一实施例中,微处理器100包括一超标量非循序执行 微架构(superscalar out-of-order execution microarchitecture),尽管在此所介绍 的动态可重设的处理可由包括不同微架构的一微处理器所执行。在一实施例 中,微处理器100包括一x86指令集架构,尽管在此所介绍的动态可重设的 处理可由包括不同指令集架构的一微处理器所执行。

配置寄存器124保存配置设定,并提供配置设定至动态重设功能性单元 128以控制其特定方面的运作。可由该配置设定以进行动态可重设处理在不 同运作方面的例子介绍于下列实施例,但非限定。

「数据提取配置设定」,其设定数据如何由系统存储器中预先提取 (prefetch)至微处理器100的不同快取存储器中。举例来说,微处理器100可 直接预先提取高可能性的预测数据至L1数据快取中,和/或预先提取较低可 能性的预测数据至一专用预先提取缓冲器,其中该专用预先提取缓冲器与L1 及L2数据快取分开。在另一实施例中,为了可持续触发而不需要预先提取的 应用程序,由数据预先提取器所执行的数据提取可被关闭。在又一实施例中, 数据预先提取器可被关闭而不不处理在一软件应用程序中的预先提取指令所 请求的预先提取动作,因为其倾向于在微处理器100内部启动的预先提取进 行负面互动。

「分支预设配置设定」,其用以设定微处理器100预测分支指令的方式。 举例来说,可由分支预测器由指令快取的各数据线所预测的分支指令的数目 是可以设定的。除此之外,由分支预测器所使用的独特分支预测机制的数目 亦是可以设定的。更进一步,分支预测器可设定为假设是否一反向零值跳转 (jump on zero,JZ)分支指令会被经常采取或是不采取。又,用于索引至在分 支预测器中的一分支目标地址快取(branch target address cache,BTAC)的一哈 希算法亦是可以设定的。最后,若在该预定列表中的一或多个目前运行的软 件应用程序倾向于执行高度无法预测的分支指令,分支预测器可被设定至暂 时整个关闭分支预测,或是设定至暂时关闭部分分支预测机制,例如在分支 预测器中的一分支目标地址快取。

「指令快取逐出(eviction)设定」,其设定微处理器100所使用的算法以将 指令由指令快取逐出(evict)。

「暂停执行(suspend execution)配置设定」,其用以设定微处理器100是否 要暂时暂停执行程序指令。举例来说,微处理器100可被设定为暂时暂停执 行指令,藉以回应决定操作系统的空闲处理已经被执行一预定时间。

「L1指令快取存储器尺寸配置设定」、「L1数据快取存储器尺寸配置设 定」、及「L2指令快取存储器尺寸配置设定」,其分别用以设定L1指令快取、 L1数据快取、及L2快取存储器的尺寸。举例来说,快取存储器尺寸可依据 目前运行的一或多个软件应用程序的工作数据集合的尺寸来进行设定。

「转译/格式化配置设定」,其用以设定指令转译器/格式化器如何转译和/ 或格式化指令。举例来说,可以设定在各时钟周期由指令转译器/格式化器所 转译和/或格式化的指令的数目。举例来说,指令转译器/格式化器可设定为在 每个时钟周期仅转译和/或格式化单一指令,当此方式可满足正在运行的应用 程序时,可降低微处理器100的功耗。除此之外,指令转译器/格式化器可由 合并(merging)指令所关闭,藉以降低功耗。

「推测寻访(speculative tablewalk)配置设定」,其用以设定微处理器100 的一存储器管理单元是否回应一转译侧视缓冲器(translation lookaside buffer, TLB)的失误(miss)以执行推测页面寻访。举例来说,该存储器管理单元可设 定为关闭用于一应用程序的推测寻访,其会导致推测会持续不正确,因此会 逐出(evict)在转译侧视缓冲器中的其他有用的项目(entry)。在一实施例中,可 设定寻访的推测的强度。举例来说,该存储器管理单元可设定为在所有较旧 的存储动作已引退(retire)后、或在所有较旧的存储动作的地址已解析、或是 不管较旧的存储动作时,仅进行一推测页面寻访。除此之外,存储器管理单 元可设定为可同时独立控制数据与程序代码的推测寻访。更进一步,存储器 管理单元可设定为可执行推测地寻访,但并不推测地更新转译侧视缓冲器。 最后,存储器管理单元可设定为辨识那些类型的微执行码或硬件功能可进行 推测寻访,例如不同的软件或硬件预先提取。

「L1快取失误行为配置设定」,其用以设定存储器管理单元是否回应在 L1指令快取的失误、以串行或并行方式由L2快取及处理器总线请求数据。

「转送哈希(forwarding hash)配置设定」,其用以设定微处理器100所使用 的算法以哈希虚拟地址位至地址比较以检测微处理器100是否应执行一数据 转送动作,例如由一较旧未引退的存储指令至一读取(load)指令,或是在一读 取队列(load queue)及一填充队列(fill queue)之间。举例来说,可设定下列情况: (1)在虚拟地址的页面索引位之外会被进行比较的位数目;(2)在非页面索引位 中的那一者会被哈希以产生这些位;以及(3)所选择的位如何被哈希。

「队列尺寸(queue size)配置设定」,其设定在微处理器100中不同队列的 可用尺寸,例如是存储队列、读取队列、及快取线填充队列。举例来说,不 同的队列可被设定至较小的尺寸,当其可满足目前正在运行的应用程序时藉 以降低功耗量。

「发送(issue)尺寸配置设定」,其设定微处理器110在单一时钟周期中发 送至不同执行单元的指令的数量。举例来说,发送尺寸配置设定可设定至相 对较小的数值,当在每个时钟周期所发送的一较小数量的指令可满足正在运 行的应用程序时藉以降低功耗量。

「重新排列缓冲器尺寸配置设定」,其设定在重新排列缓冲器中可用项目 的数量。举例来说,装置驱动程序可设定重新排列缓冲器项目的数量至一相 对较小的数量,当其可满足正在运作的应用程序时藉以降低功耗量。

「非循序(out-of-orderness)配置设定」,其设定微处理器100如何利用非 循序执行的指令。举例来说,微处理器100可被设定为以一严谨程序顺序以 执行指令(注:没有非循序执行)。除此之外,微处理器100可被设定为考虑在 指令视窗中会有多深入,以让指令发送器寻找独立指令以发送至执行单元执 行。

「读取延迟配置设定」其设定微处理器100的一读取延迟机制为关闭或 开启。在一实施例中,微处理器100推测地发送一读取指令,且若其依据 (depend on)一较旧的存储指令且其数据尚无法取得时,表示其可能是有害于 效能,此时微处理器100需重新播放该读取指令。为了降低重播放的相似度, 该读取延迟机制会依已重新播放过的读取指令的过去历史以选择性地延迟一 读取指令的发送。然而,当该读取延迟机制开启时,某些软件应用程序会具 有较差效能的倾向。因此,举例来说,对于具有上述倾向的一软件应用程序 来说,可关闭该读取延迟机制。

「非时间(non-temporal)读取/存储配置设定」,其设定微处理器100的读 取/存储指令的行为,其包括一非时间暗示(hint)以防止微处理器100快取其数 据。在假设微处理器100中的数据快取小于微处理器100的实际数据快取尺 寸且若该数据被快取则会加速执行,某些软件应用程序会被写入以利用非时 间读取/存储指令。因此,举例来说,微处理器100会被设定为快取由读取/ 存储指令所指定的数据,其包括一非时间暗示。除此之外,可设定在微处理 器100中可取得包括一非时间数据暗示的读取/存储指令的读取缓冲器的数 量。

在另一实施例中,另一配置设定可选择性地设定微处理器100的硬件分 页目录快取(hardware page directory cache,PDC)以包含分页目录项目(page  directory entries,PDE)或第4阶的分页表项目(fourth-level page table entries, PML4)。

在另一实施例中,另一配置设定可选择性地设定两者、一者或无数据及 程序代码转译侧视缓冲器(TLB)项目被放置至微处理器100的L2转译侧视缓 冲器。另一配置设定可设定L2转译侧视缓冲器的尺寸。

另一配置设定可选择性地设定是否已确保一软件预先提取线的配置。意 即,存储器管理单元可被设定为等待完成,直到击中(hit)、或已为该软件预 先提取线推送一请求、或完成但继续在唤醒时尝试配置该软件预先提取线。

另一配置设定可设定自我调整码(self-modifying code)检测是否开启或关 闭。除此之外,若自我调整码检测开启,微处理器100可被设定为先更正 (correct)或后更正,并执行或不执行完整机器清除(flush)。

另一配置设定设定微处理器100的读取和/或存储管线(pipeline)中的不同 并行仲裁(arbitration)是否开启或关闭。举例来说,在存储管线中的一读取有 效地址(load effective address,LEA)产生并不需要为了整个管线进行仲裁,因 为其会先产生结果,因此微处理器100可被设定为允许需要完整管线的另一 操作在同时间进行仲裁。更进一步,读取管线可被选择性地设定为允许不需 要读取快取的仲裁器与需要读取快取的仲裁器并行地进行仲裁。

另一配置设定设定关于写入合并的读取(write-combine loads)的推测 (speculation)的程度。举例来说,写入合并的读取可为完整推测、推测但仍然 依照顺序、或是非推测。可对与x86MONVNTDQA指令有关的读取进行类 似的配置设定。

另一配置设定在一读取失误(load miss)已需要较新的微操作 (micro-operations))以重新播放且该读取已快要完成之后,其设定存储器管理 单元开启或关闭是否该存储器管理单元意指微处理器100的指令调度器。上 述方式允许该调度器以推测地安排相依的微操作以与读取结果转送阶段一同 排队,而不是在调度前等待提供该结果。此为推测该读取现在具有一有效结 果,但若没有有效结果,则需要另一重新播放。

另一配置设定设定微处理器100的转送路径以选择性地关闭转送。此配 置设定对避免被检测到微处理器之后续设计的设计缺失特别有效,且当一特 定程序部分由微处理器100所执行时可能会显露其本身。转送的例子可为选 择性地关闭,其包括,但非限定,寄存器结果转送及读取-存储转送。

在另一实施例中,动态重设功能性单元128的一动态可重设处理导致寄 存器更名单元清除维持读取-存储依存性的队列,其由寄存器更名单元所使用 以影响读取指令调度以降低由读取-存储冲突所造成的读取重新播放。一般而 言,功能性单元128动态可重设以清除(flush)累计的效能特征状态,其已知、 或被猜测为假(false)、或与一特定程序部分有关的变形。

在另一实施例中,动态重设功能性单元128的一动态可重设处理导致一 或多条快取线、或整个快取存储器被清除以避免潜在的数据一致性。此方式 对于当一特定程序部分由微处理器100所执行时会显露其本身的设计缺失特 别有用。

在另一实施例中,动态重设功能性单元128的一动态可重设处理是为了 一架构性指令的一特定例子暂时改变该架构性指令的微程序代码的行为。举 例来说,微程序代码执行该架构性指令的特定例子中的一交替码路径 (alternate code path),例如已被该架构性指令已包括于一特定程序部分之中, 并在该架构性指令中的其他例子执行一正常码路径。再次重申,此方式对于 避免设计缺失特别有用。

重设单元104读取与一相符静态指纹有关的配置设定126,并将配置设 定126写入配置寄存器124以重设微处理器100的动态重设功能性单元128。 在一实施例中,重设单元104包括由微处理器100所执行的微程序代码,其 执行读取与该相符静态指纹有关的配置设定126以及写入配置设定126至配 置寄存器124。更适宜地,当指纹单元102检测到指纹相符,其会控制至微 程序代码的陷阱。在另一实施例中,重设单元104包括硬件控制逻辑,其可 回应指纹单元102通知指纹相符以读取与相符静态指纹有关的配置设定126, 并写入与该相符静态指纹有关的配置设定126。重设单元104及指纹单元102 利用控制信号144进行沟通。

需了解的是,在微处理器100中并非所有功能性单元均是动态可重设。 亦需了解的是,当重设单元104重设动态重设功能性单元128时,不会写入 各个配置寄存器124,且不会各个动态重设功能性单元128均被重设,尽管 会有至少一配置寄存器124会被写入,也会有至少一动态重设功能性单元128 会被重设。

当微处理器100的功能性单元128执行指令并累计指令信息142时,指 纹单元102依据可产生动态指纹的数学运算以接收来自微处理器100的功能 性单元128的指令信息142,其中动态指纹与静态指纹进行比较。更适宜地, 指纹单元102包括多个指纹单元102,各指纹单元102依据一不同的指纹产 生准测以产生一动态指纹,并将其与一静态指纹进行比较。在一实施例中, 有4个分开的指纹单元102,且它们会被逻辑性地链接在一起以完成相对复 杂的指令序列的检测。指纹单元102的一实施例会在图2中进一步详述。

指纹编程寄存器132可由软件写入,例如是一装置驱动程序或基本输入 输出系统(BIOS),以控制指纹单元102,并填充(populate)静态指纹及其有关 配置设定及指纹产生准则126的表单。

在此处所介绍的微处理器100的动态可重设处理的使用方式的一例子是 为了增加效能和/或降低微处理器100的功耗,例如当执行程序的已知部分, 其效能及功耗会显著地受到动态重设该微处理器100至已知配置的影响。

在此处所介绍的微处理器100的动态可重设处理的使用方式的另一例子 是为了防止微处理器100不正确地运作,例如当微处理器100处理一程序的 一部分时,若该程序部分由微处理器100以一第一已知配置所执行,会导致 一功能性错误,但若由微处理器100以一第二已知配置所执行,会导致一正 确结果。举例来说,当数据预先提取器用以执行数据预先提取的一特别积极 模式(particularly aggressive mode),若微处理器100执行该程序部分,微处理 器100会产生一功能性错误。相反地,当数据预先提取器用以执行数据预先 提取的一较不积极模式(less aggressive mode)或是数据预先提取已完全关闭, 微处理器100不会产生功能性错误。功能性错误,例如为但非限定,数据损 毁(corrupt data)、停止条件(例如死锁(deadlock)或活锁(livelock))、不正常的缓 慢效能、以及操作系统未准备好补救(remedy)的例外情况(exception  condition)。微处理器100的设计的缺失会导致直到微处理器100大量制造之 后和/或已出货给顾客之后功能性错误仍未被发现。在这种情况下,藉由动态 重设微处理器100以修正此问题是有帮助的,而不是重新设计微处理器100 和/或召回或不贩售有错误的元件。

在此介绍的动态重设的实施例的潜在好处是微处理器100可以相对较佳 的颗粒度(granularity)来辨识软件应用程序的部分。当软件应用程序的不同部 分可依据不同配置而动态重设微处理器100的功能性单元而得到好处,此方 式对于包括不同部分之软件应用程序来说特别有用。举例来说,一电玩游戏 可包括一程序读取部分、一初始化部分、一图形计算部分、一使用者输入接 收部分、以及一策略计算部分。各个程序部分可在微处理器100的功能性单 元的不同配置下有较佳的效能。需了解的是,若微处理器100较快地执行该 程序部分、使用较少的功耗以执行该程序部分、和/或正确地执行该程序部分, 表示微处理器100的效能较佳。

请参考图2,图2是显示依据本发明一实施例中的指纹单元102的详细 功能方块图。指纹单元102包括一数学运算单元222、比较逻辑226、一静态 指纹232、一衰退(decay)计数器242、以及控制逻辑234。

数学运算单元222接收来自图1中的功能性单元128的指令信息142, 并藉由依据一数学运算累计指令信息以产生一结果224,该结果为动态指纹, 其中数学运算可参考上述实施例。在图2的实施例中,指令信息142包括该 指令的指令指针202(意即指令地址),一位移字段(又称为“栏位”)204、运算 码字段206、modRM字段208、SIB字段212、及来自该指令的前缀214。在 其他实施例中,其他指令字段包括指令信息142,特别是在使用不同于x86 架构的不同的指令集架构的实施例。更适宜地,指令集架构具有变长度指令 (例如x86指令即为变长度),且提取单元128包括一指令格式化单元128,当 由指令快取128提取指令位的区块并将其格式化至个别指令时,指令格式化 单元128接收指令位的区块,且每当其格式化指令时,数学运算电路222由 微处理器100的指令格式化单元128接收指令信息142。在一实施例中,指 令格式化单元128可在每个时钟周期格式化至多三个指令,并在每个时钟周 期为该至多三个指令提供指令信息142至数学运算电路222。在指令集架构 具有固定长度指令的另一实施例中,当由指令快取128提取指令时,指令信 息142可由提取单元128所提供。

更适宜地,数学运算电路222包括一多输入移位寄存器(multiple input  shift register,MISR),其使用一最大计数多项式(maximum count polynomial)。 更适宜地,当各指令被格式化时,该(选择性过滤的)指令信息142为具有最左 输入位的一位右移的多输入移位寄存器的目前状态的布尔异或(Boolean  XOR,互斥或)结果,其为多输入移位寄存器阶数(taps)的异或结果。在一实 施例中,多输入移位寄存器为50位宽,且多输入移位寄存器的阶数为49、9 及0以完成该最大计数多项式。在一实施例中,产生一误合(false match)的别 名串(alias strand)的相似度大约是1:250)。如上所述,虽然串辨识(strand  identification)可能不绝对是唯一的,在多数用途上,该辨识可为充份唯一的 (sufficiently unique),例如是增进效能及改善设计缺失的影响。在一少见的别 名串的误合的例子中,其结果可能为较低的效能、最高的功耗、和/或无法修 正在微处理器100设计中的一缺失。如上所述,指纹单元102可在每个时钟 周期接收用于多个指令的指令信息142,且数学运算电路222用以执行数学 运算以在单一时钟周期中累计所有的指令信息142。更进一步而言,在此多 输入移位寄存器的实施例中,数学运算电路222用以在单一时钟周期中执行 所有指令信息142的异或运算。

数学运算电路222依据来自控制逻辑234而接收的信息238以产生结果, 其包括指纹产生准则238。指纹产生准则238包括起始条件、停止条件及重 置条件,当数学运算电路222累计指令信息142以产生动态指纹224时,该 等条件用于控制。指纹产生准则238亦指定数学运算电路会累计以产生动态 指纹224的指令信息142的部分(202,204,206,208,212,214)的集 合,并指出会被过滤的部分。更适宜地,二位的0值会被插入与被过滤部分 有关的位。

比较器224将数学运算电路222所产生的动态指纹与静态指纹232进行 比较以产生一真值于一相符信号(match signal)228,若两个指纹相符时,其提 供至控制逻辑234。在一实施例中,当达到一停止条件时,比较器226仅执 行比较运算。更适宜地,一装置驱动器和/或微程序代码载入(load)该静态指纹 232及指纹产生准则238。当控制逻辑234检测到在该相符信号228的一真值 时,控制逻辑234会利用控制信号144以将该相符情况与重设单元104进行 沟通。除此之外,控制逻辑234利用一串接信号(chain signal)244以将该相符 情况与另一指纹单元102进行沟通,其细节将于后述的图6及图7的部分详 述。控制逻辑234亦接收来自其他指纹单元102的串接信号244。更进一步, 控制逻辑234可载入一衰减计数器242以回应该相符情况。衰减计数器的运 算将于图5的实施例中详述。

请参考图3,图3是显示依据本发明一实施例中用以产生已知目标程序 部分及其有关的静态指纹、配置设定及指纹产生准则的数据库的流程图。该 流程开始于方块302。

在方块302,辨识程序部分的一列表,其用于最佳化微处理器100的动 态重设功能性单元128的配置,例如增进其效能(较快的程序部分执行或较低 的功耗)和/或修正错误(bug)。该流程前进至方块304。

在方块304,决定用在方块302中所辨识的程序部分的一个的动态重设 功能性单元128的最佳化配置设定。该流程前进至方块306。

在方块306,辨识与在方块304中所辨识的程序部分有关的串(strand), 并设计指纹产生准则,其可用以产生用于该串的一指纹。该流程前进至方块 308。

在方块308,利用在方块306所设计的指纹产生准则以产生用于与该程 序部分有关的该串的一静态指纹。该流程前进至方块312。

在方块312,存储与该程序部分有关的静态指纹、配置设定、以及指纹 产生准则。该流程前进至方块314。

在方块314,针对在方块302中所指出的各个其他程序部分以重复方块 304、306、308及312以编译(compile)一数据库。该流程结束于方块314。

请参考图4,图4是显示依据本发明一实施例中微处理器100动态重设 其本身的动作的流程图。该流程开始于方块402。在方块402,微处理器100 接收静态指纹、相关配置以及指纹产生准则的一指纹设定准则表126。更适 宜地,指纹设定准则表126包括依据图3的流程而编译的一数据库的一部分。 指纹设定准则表126是可编程的。更适宜地,一装置驱动器将该信息列表提 供至该微处理器100。举例来说,该装置驱动器决定由操作系统的一或多个 正在运作且可在数据库中辨识的软件应用程序,且回应上述动作,提供与该 正在运作的软件应用程序的程序部分有关的静态指纹、配置设定及指纹产生 准则126。选择性地,系统固件,例如是BIOS,提供指纹设定准则表126至 微处理器100,特别是在动态可重设用于修正一错误的情况。又,选择性地, 指纹设定准则表126可通过微程序代码的一更新(patch)而载入微处理器100。 更适宜地,在微处理器100重置后且指纹产生准则是不确定地存留(persist  indefinitely)或是至少直到微处理器100再度重置,微程序代码更新会被载入。 这在一情况下会特别有帮助,例如是动态可重设用于修正一错误,其会在微 处理器100重置后的软件执行过程的早期就显露。该指纹设定准则表126可 包括较大数量的程序部分之信息远大于指纹单元102的数量,且当程序执行 时,微处理器100的微程序代码可动态地载入具有静态指纹及指纹产生准则 的指纹单元102而不需要装置驱动器的介入。更适宜地,指纹设定准则表126 被接收至微处理器100的一私有存储器,其无法被架构程序所存取,但可由 微处理器100的微程序代码所存取。该流程前进至方块404。

在方块404,指纹单元102载入静态指纹及指纹产生准则。如上所述, 其会发生在当装置驱动器写入指纹设定准则表126和/或当微程序代码检测到 事件时,例如是指纹单元102已检测到指纹相符(例如图7的方块703)。该流 程前进至方块406。

在方块406,当动态重设功能性单元128正依据在配置寄存器124中的 目前配置设定而执行指令时,指纹单元102会依据基于在方块404所载入的 指令信息142的数学运算以累计指令信息142,藉以产生动态指纹224并将 其与在方块404中所载入的静态指纹232进行比较。该流程前进至决定方块 408。

在决定方块408,指纹单元102(例如比较器226及控制逻辑234)决定在 静态指纹及动态指纹之间是否有相符。若有,该流程前进至方块412;否则, 该流程前进至方块406。

在方块412,控制逻辑234利用控制信号144通知重设单元104该相符 情况,且重设单元104会回应地利用与在方块408中与动态指纹224相符的 静态指纹232有关的配置设定以重设动态重设功能性单元128(例如藉由写入 配置寄存器124)。该流程结束于方块412。

请参考图5,图5是显示依据本发明一实施例中微处理器110动态重设 其本身的更进一步运作的流程图。该流程由方块502开始,特别是由图4的 方块412开始。

在方块502,控制逻辑234载入具有与在方块408中相符的静态指纹有 关的一衰减计数值的衰减计数器242。更适宜地,该衰减计数值包括于图1 中的指纹设定准则表126。该流程前进至方块516。

在方块516,周期性地-特别是每时钟周期-该衰减计数器242会减少 计数。该流程前进至决定方块518。

在决定方块518,控制逻辑234决定衰减计数值是否已过期(expired)。若 是,则该流程前进至方块522;否则,该流程回到方块516。

在方块522,控制逻辑234利用控制信号144通知重设单元104该衰减 计数器242的过期,且该重设单元104回应地以指纹设定准则表126中的预 设配置设定以重设动态重设功能性单元128。在一实施例中,预设配置设定 被编程至微程序代码中。在一实施例中,预设配置设定包括于指纹设定准则 表126中。在一实施例中,预设配置设定为在方块412中的动态可重设动作 执行前的先前配置设定(注:在方块406中微处理器100正在执行的指令的目 前配置设定)。在一实施例中,该等配置设定的一子集合会回到其预设值,同 时该等配置设定的另一子集合会维持在方块412所写入的数值。更适宜地, 这些子集合均定义于指纹设定准则表126中。该流程结束于方块522。

请参考图6,图6是显示依据本发明又一实施例中微处理器100动态重 设其本身的运作的流程图。该流程开始于方块602。

在方块602,指纹单元102中中的一个(用第一指纹单元表示)检测到其动 态指纹224及其静态指纹232相符,并表示该相符情况,例如藉由一串表示 符(chain indicator)244。该流程前进至方块604。

在方块604,不同的指纹单元102(用第二指纹单元表示)接收在方块602 由第一指纹单元所产生的表示符,并回应地开始依据基于指纹产生准则的数 学运算以累计指令信息142,藉以产生动态指纹224并将其与静态指纹232 进行比较。该流程前进至方块606。

在方块606,第二指纹单元检测到其动态指纹224及其静态指纹232的 相符情况。该流程前进至方块608。

在方块608,控制逻辑234以控制信号144通知重设单元104相符情况 已找到,且重设单元104回应地以在方块606中与动态指纹224相符的静态 指纹232有关的配置设定126以重设动态重设功能性单元128。该流程结束 于方块608。

请参考图7,图7是显示依据本发明又一实施例中微处理器100动态重 设其本身的运作的流程图。该流程开始于方块702。

在方块702,指纹单元102中的一个检测到其动态指纹224及其静态指 纹232相符,并表示该相符情况,例如通过控制信号144。该流程前进至方 块703。

在方块703,重设单元104载入具有一新静态指纹232及其相关的指纹 产生准则的指纹单元,藉以回应在方块702中已找到该相符情况的表示。该 流程前进至方块704。

在方块704,指纹单元102依据基于在方块703中所载入的该新指纹产 生准则的数学运算以累计指令信息142,藉以产生动态指纹224,并将其与静 态指纹232进行比较。该流程前进至方块706。

在方块706,指纹单元102检测到其动态指纹224及其静态指纹232的 一相符情况。该流程前进至方块708。

在方块708,控制逻辑234以控制信号144通知重设单元104已找到新 的相符情况,且重设单元104回应地以与在方块706中与动态指纹224相符 的新静态指纹232有关的配置设定以重设动态重设功能性单元128。该流程 结束于方块708。

虽然图7描述指纹单元102仅一次有效地串接至其本身,更适宜地,指 纹单元102可串接至其本身更多次。更进一步,虽然图6中仅描述仅串接两 个指纹单元102,更适宜地,所有的指纹单元102可依同样的方式进行串接。 更进一步,图6的实施例可与图7的实施例合并,使得用于正在搜寻的相符 情况的目前载入至指纹单元102的静态指纹的集合会动态地变化,使得具有 长于指纹单元102的数量的程序部分之链结的数量可被检测到,且动态重设 功能性单元128可如同想要地被动态重设。

请参考图8,图8是显示依据本发明另一实施例中图1的指纹单元102 的方块图。图8的指纹单元102与图2中的指纹单元102类似;然而,其亦 包括了一指令计数器822、一第二比较器826、以及一静态指令计数值832。

指令计数器822接收来自图1的动态重设功能性单元128的指令信息 142,并在每次其遇到由控制逻辑234所接收的指令计数产生准则838所指定 的一类型的一指令以产生一结果824,其为一动态计数值。更适宜地,指令 计数产生准则838指定要计数的指令类型。在一实施例中,要计数的指令类 型包括所有指令、子程序调用类型指令(subroutine call type instruction)、回传 类型指令(return type instruction)、NOP类型指令、以及限制在微程序代码的 指令(意即用微程序代码实现)。在一实施例中,数学运算电路222仅累计特定 类型且由指令计数器所计数的指令信息142,同时用于排除指令类型的指令 信息142不会被数学运算电路222所累计。在一实施例中,NOP指令包括除 了单字节x86NOP指令之外的指令,例如是多字节指令,可有效地做为一 NOP指令(0x90),其细节将于图10中详述。

比较器826由指令计数器822所产生的比较动态指令计数值824及静态 指令计数值832,若两个指令计数值相符,则产生一真值于提供至控制逻辑 234的一第二相符信号。在一实施例中,当达到一停止条件时,比较器826 仅进行比较动作。更适宜地,一装置驱动器和/或微程序代码载入静态指令计 数值832及指令计数产生准则838。当控制逻辑234检测到在相符信号828 的一真值时,控制逻辑234利用控制信号144通知重设单元104该相符情况。 除此之外,控制逻辑234利用一串接信号通知其他的指纹单元102该相符情 况。控制逻辑234可载入衰减计数值以回应该相符情况。更适宜地,可采用 类似于图3所述的方式将静态指令计数值832及指令计数产生准则838编译 至已知目标程序部分的一数据库。

请参考图9,图9是显示依据本发明一实施例中的微处理器100动态重 设其本身的运作的流程图。图9在某些方面与图4类似;然而,图9描述指 纹单元102的运作以动态重设微处理器100以回应检测到一静态指令计数值 而不是一静态指纹,其细节如下所述。然而,需注意的是指纹单元102可用 以同时检测指纹及指令计数值。除此之外,指纹单元102可用串接的方式运 作(例如图6及图7的实施例所述),让指纹单元102载入以同时检测所需的指 纹及指令计数值以动态重设微处理器100。该流程开始于方块902。

在方块902,微处理器100接收包括静态指令计数值及图1中有关的配 置设定及指令计数产生准则的指纹设定准则表126。该流程前进至方块904。

在方块904,指纹单元102载入静态指令计数值及指令计数产生准则。 该流程前进至方块906。

在方块906,当动态重设功能性单元128正依据在配置寄存器124中的 目前配置设定以执行指令时,指纹单元102依据在方块904中所载入的指令 计数产生准则以计数指令,藉以产生动态指令计数值824,并将其与在方块 904中所载入的静态指令计数值832进行比较。该流程前进至决定方块908。

在决定方块908,指纹单元102(例如比较器826及控制逻辑)决定在静态 指令计数值及动态指令计数值之间是否相符。若是,则该流程前进至方块912; 否则,该流程回到方块906。

在方块912,控制逻辑234利用控制信号144通知重设单元104该相符 情况,且重设单元104回应地利用在方块908中与动态指令计数值相符的静 态指令计数值有关的配置设定以重设动态重设功能性单元128。该流程结束 于方块912。

上述所介绍的动态重设的实施例与成本的取舍有关。首先,指纹单元的 硬件的芯片实际面积及功耗会有成本。第二,改变配置设定亦会有成本。此 成本来自暂时暂停(suspend)指令处理以改变配置设定。此成本也可来自所改 变的配置设定会在少数已辨识出一别名串的例子中导致较低的效能。

整合NOP滑动检测器

在此所介绍的指纹单元的另一个用处是检测一「NOP滑动(可称为NOP  slide或NOP sled)」。

NOP滑动指来自一处理器提取并执行指令的一存储器的连续NOP指令 的序列。NOP滑动通常是被攻击者用来未经许可访问一计算机系统。NOP指 令指可执行一运作,并不影响处理器的架构状态(architectural state)或是仅在 一方面影响架构状态,其可接受攻击者试图未经许可访问计算机系统,包括 处理器。NOP滑动的使用在计算机安全的领域为已知技术,但将会简短介绍。

攻击者会试图发掘在计算机系统上运作的软件的弱点且其具有执行权限 (executive privileges)。藉由发现弱点,攻击者可让「壳码(shellcode)」写入至 计算机系统的存储器中。壳码会执行对攻击者有利的动作,例如是提供系统 的访问执行权限。其目前是让控制权转移到壳码。然而,某些已发现的弱点 的本质是让在存储器中的目标地址不知不觉地转移是无法准确得知的。当然, 在一些例子中并不一定知道目标地址,且攻击者依赖小型统计相似度,即目 标地址为壳码。第一种方式是攻击者试图增进小型统计相似度以写入许多壳 码的拷贝至存储器。第二种方式是用许多不同次数尝试攻击。第三种方式是 使用NOP滑动。

攻击者会将NOP滑动写入在壳码之前,其可提供一安全降落垫,也就是 为了转移控制权。NOP滑动可能非常大,举例来说,是数百或数千阶(order) 的字节大小。只要目标地址的控制权转移到NOP滑动之内的某处,处理器会 仅执行NOP指令,直到其达到并执行壳码。执行(一可能大数量)的NOP指令 对于攻击者来说是可接受的,因为除了攻击者不关心的方式之外,NOP指令 不会改变处理器的架构状态。攻击者可能会写入NOP滑动的许多拷贝及壳 码,且可能尝试许多次以使用这种方式入侵,而上述全部方式合并可增进取 得已执行的壳码的相似度。

因为NOP滑动常常会包含于在攻击者的攻击中,计算机系统可分析在网 络上传输至一计算机系统的分组以搜寻一NOP滑动。若在一分组中检测到 NOP滑动,该分组会被丢弃(discard)。该技巧常常用于网络攻击检测系统 (network intrusion detection system,NIDS)。NIDS的缺点是分组可能被加密, 会更难检测NOP滑动。更进一步,攻击者的输入包括NOP滑动及壳码也可 能被加密。在此处所介绍的NOP滑动检测器的实施例的优点是其可在当处理 器中的NOP指令的序列将要被执行时检测该序列,也因此可保证在当时一定 会被解码且被NOP滑动检测器所检查。

请参考图10,图10是显示依据本发明一实施例中微处理器100检测NOP 滑动的运作的流程图。特别是指纹单元102被使用为一NOP滑动检测器。 NOP指令为可执行一动作的指令,其不会影响到处理器的架构状态(除了更新 指令指针)或是仅以一预定方式影响架构状态。微处理器100的设计者在设计 预定方式时,在其心中会有那些对攻击者是可接受的以得到计算机系统未经 许可的访问权,其包括微处理器100,且此方式会随着壳码所采取的动作而 变化。依据不同实施例,在方块1004由指令计数器822所计数的NOP指令 的列表,且其用于决定为了重置条件目的的一非NOP指令,如下所述-包括 下面多种组合:微处理器100的指令集中的架构性定义的NOP指令(例如x86 架构NOP指令,0x90);分支(branch)指令,其分支至下一循序指令;除了架 构状态的一预定集合之外,不会改变微处理器100的架构状态的指令,例如 是一或两个条件标志寄存器(例如x86EFLAGS),及堆迭指针寄存器。例如下 列x86架构指令:PUSH ES(0x06)、PUSH CS(0x0E)、PUSH SS(0x16)、PUSH  DS(0x1E)、PUSH register(0x50-0x57)、PUSH SP(0x5C)、PUSHA(0x60)、 WAIT(0x9B)、SAHF(0x9E)、REPNE prefix(0xF2)、CLD(0xFC)、STD(0xFD)、 CLC(0xF8)、STC(0xF9)、CMC(0xF5)。除此之外,在微处理器100的指令集 架构具有变长度指令的一实施例中,NOP指令的列表会被包含于包括多字节 NOP指令的组合中,其中所个别取得的指令的各字节为一NOP指令。换个 方式来说,一多字节NOP指令具有一种特性,使得若控制权转移至指令的任 何字节,剩下的字节或指令的字节会构成微处理器100的指令集架构所定义 的一有效指令(例如不会产生一无效指令例外(invalid instruction exception)), 否则具有如一单字节NOP指令相同的特性。下列例子为x86架构的多字节 NOP指令:2字节CMP指令,其中modRM位具有一单字节NOP指令 (ox38-0x3B)的数值;2字节CMP指令,其中其直接字节具有一单元字节NOP 指令(0x3C)的数值;3字节CMP指,其中modRM字节及直接字节具有一单 字节NOP指令(0x80,0x83)的数值;2字节TST指令,其中modRM字节具 有一单字节NOP指令(0x84-0x85)的数值;2字节TST指令,其中其直接字节 具有一单一字节NOP指令(0xA8)的数值;2字节包装指令,其中modRM字 节具有一单一字节NOP指令的数值,例如是PMADDWD(0xF5)、 PSUBB(0xF8)、PSUBW(0xF9)、PADDB(0xFC)、PADDW(0xFD)。该流程开 始于方块1002。

在方块1002,指纹单元102载入静态指令计数值822及指令计数产生准 则838,如同图8及图9的实施例所述的方式。更适宜地,静态指令计数值 832可让一使用者或系统软件藉由指纹编程寄存器132而可编程。在一实施 例中,静态指令计数值832通过微处理器100的熔合(fuse)而可编程。在一实 施例中,起始条件为检测一回传(return)指令,重置条件为检测到不是一NOP 指令的指令(即为非NOP指令),且没有指定停止条件。会考虑其他实施例, 例如其起始条件为检测到一子程序调用(subroutine call)指令、由中断指令回 传、或是一系统调用或回传指令。该流程前进至方块1004。

在方块1004,当微处理器100正提取并执行指令,指纹单元依据在方块 1002所指出的指令计数产生准则以计算连续NOP指令,藉以产生一动态指 令计数值824,并所产生的动态指令计数值824与在方块1002所载入的静态 指令计数值832进行比较。该流程前进至决定方块1006。

在决定方块1006,指纹单元102决定动态指令计数值824是否与静态指 令计数值832相符。若是,则该流程前进至方块1008;否则,该流程回到方 块1004。

在方块1008,指纹单元102回应微处理器100暂停(suspend)架构指令的 执行以表示该相符情况。更适宜地,指纹单元102造成微程序代码的陷井(trap) 以回应检测到该相符情况(注:回应检测到NOP滑动)。在一实施例中,微程 序代码产生一无效运算码错误(例如x86架构的INT 6)。在一实施例中,微程 序代码产生一机器检查例外(machine check exception,例如是x86架构的 #MC,vector编号18)。在一实施例中,若微处理器100处于一虚拟机器模 式(virtual machine mode,例如是x86的VMX mode),该微程序代码离开该虚 拟机器模式。在一实施例中,若微处理器处于一信任执行模式(trusted execution  mode),微程序代码采取一安全例外动作(security exception)。该流程结束于方 块1008。

虽然指纹单元及数学运算电路的特定实施例已被公开,需了解的是其他 实施例可用于产生动态指纹及指令计数值,并检测静态指纹及指令计数值的 相符情况。

虽然以上叙述本发明多种实施方式,必须声明的是,上述内容乃本技术 的部分应用例子,并非用来限定本发明的范围。本领域技术人员可依循本发 明特征,以现有技术另外发展出许多变形。例如,可以软件方式实现本申请 所公开的内容,例如,所公开的设备或方法的功能、制作、模型化、模拟、 说明和/或测试。上述软件可采用常见的程序语言(例如,C、C++)、硬件描述 语言(hardware description language,HDL)包括Verilog HDL、VHDL…等或其 他可用的程序语言。上述软件可载于现有的任何计算机存储介质,例如,磁 记录装置(magnetic tape)、半导体(semiconductor)、硬盘(magnetic disk)、或光 盘(optical disc、如CD-ROM、DVD-ROM等),也可载于网络、有线系统、或 其他通讯媒体。本发明所公开的各种装置与方法可由一半导体知识产权内核 ─例如一微处理器内核,可由硬件描述语言实现─保护,且可被转换为硬件 型式,以集成电路方式制作。此外,所公开的装置与方法也可由硬件与软件 共同设计实现。因此,本发明不应受上述任何实施方式所限定,应当根据权 利要求书的内容作解读。特别是,本发明可被实现于一微处理器中,实现一 般常用的计算机。本发明所属技术领域人员有可能基于本发明,以所公开的 概念以及所述的特殊实施方式为基础,设计或调整其他结构,以在不偏离权 利要求书所界定的内容的前提下,发展与本发明具有同样目的的技术。

相关申请的交叉引用

本申请要求于2013年9月20日提交的美国专利申请序列号61/880,620 (案号CNTR2701I00-USPPA)和于2013年10月10日提交的美国专利申请 序列号14/050,687(案号CNTR2701I00-US)的优先权,通过引用而为了所有 目的将其全部内容合并于此。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号