微处理器和用于一微处理器的检测方法【专利摘要】本发明涉及一种微处理器和一种用于一微处理器的检测方法,该微处理器包括:一指令高速缓存;一硬件状态机,用以检测在由该指令高速缓存撷取的一指令字节的数据流中的N个不动作(NOP)指令的一连续序列,其中N大于零;以及其中当检测到N个NOP指令的该连续序列时,该微处理器暂停由该指令高速缓存撷取及执行指令。【专利说明】微处理器和用于一微处理器的检测方法【
技术领域:
】[0001]本发明涉及一种微处理器,特别涉及一种可动态重设的微处理器及用于微处理器的动态重设方法。【
背景技术:
】[0002]微处理器的设计者往往会花费许多努力在效能分析上。在依据先前几代的微处理器以利用特征及效能目标的基础集合来架构一微处理器时,设计者会执行软件应用程序中与他们的顾客最为相关的一具有代表性的样本,并撷取软件应用程序的指令执行记录。设计者接着使用所撷取的记录做为刺激(stimulus)以仿真正在设计的微处理器的操作。为了在所有目标软件应用程序中达成最高的聚集效能(aggregateperformance),设计者可设定被仿真的微处理器的不同特性。一般而言,会需要一目标应用程序的特性的一特别组态设定,且其它应用程序不需要。在这些例子中,设计者可决定那个软件应用程序较为重要,或是寻找其它方法,可尝试平衡多个软件应用程序的需求。上述选择并无法达到目标软件应用程序的最佳效能,因为其在尝试最佳化其中一个软件应用程序的效能时也会损害了另一个软件应用程序的效能。[0003]当辨识出组态设定的最佳平均集合时,举例来说,微处理器的设计者可将其写为VHDL或Verilog程序代码。其它微处理器可通过在微处理器中包含一列的保险丝(fuse)来改良其硬编码设定,其可在微处理器的制造时选择性地熔断(blown),以改变其硬编码值的组态设定。上述方式可让微处理器在制造时有限度的最佳化,或许可响应在微处理器设计之后而发表的新软件应用程序或是操作系统。然而,该解决方式仍无法达到目标软件应用程序的最佳效能,因其需要设计者/制造者选择用于最佳化某些应用程序的组态设定且同时牺牲了其它应用程序的效能,或是选择一平衡组态设定,通常不会对任何应用程序进行最佳化。[0004]为了陈述该问题,于2008年7月10日申请的美国专利申请号12/170,591已揭示相关技术,例如一微处理器可通过基于目前正在操作的应用程序的一装置驱动器以动态设定至多个操作模式。然而,仍然需要更佳的效能最佳化效果。【
发明内容】[0005]本发明提供一种微处理器,包括:一指令高速缓存;一硬件状态机,用以检测在由该指令高速缓存撷取的一指令字节的数据流中的N个不动作(NOP)指令的一连续序列,其中N大于零;以及其中当检测到N个NOP指令的该连续序列时,该微处理器用以暂停由该指令高速缓存撷取及执行指令。[0006]本发明还提供一种用于一微处理器的检测方法,该微处理器包括一指令高速缓存及一硬件状态机,该方法包括:利用该硬件状态机检测在由该指令高速缓存撷取的一指令字节的数据流中的N个不动作(NOP)指令的一连续序列,其中N大于零;以及其中当检测到N个NOP指令的该连续序列时,暂停由该指令高速缓存撷取及执行指令。[0007]本发明还提供一种计算机程序产品,编码于至少一计算机可读媒体中以供一运算装置使用,该运算装置包括一微处理器,该计算机程序产品包括:一第一程序代码,用以指出该微处理器的一指令高速缓存;以及一第二程序代码,用以指出该微处理器的一硬件状态机,用以检测在由该指令高速缓存撷取的一指令字节的数据流中的N个不动作(NOP)指令的一连续序列,其中N大于零;以及其中当检测到N个NOP指令的该连续序列时,该微处理器用以暂停由该指令高速缓存撷取及执行指令。【专利附图】【附图说明】[0008]图1不出了一微处理器100的功能方块图。[0009]图2示出了依据本发明一实施例中的指纹单元102的详细功能方块图。[0010]图3示出了依据本发明一实施例中用以产生已知目标程序部分及其有关的静态指纹、组态设定及指纹产生准则的数据库的流程图。[0011]图4示出了依据本发明一实施例中微处理器100动态重设其本身的动作的流程图。[0012]图5示出了依据本发明一实施例中微处理器110动态重设其本身的更进一步操作的流程图。[0013]图6示出了依据本发明另一实施例中微处理器100动态重设其本身的操作的流程图。[0014]图7示出了依据本发明另一实施例中微处理器100动态重设其本身的操作的流程图。[0015]图8示出了依据本发明另一实施例中图1的指纹单元102的方块图。[0016]图9示出了依据本发明一实施例中的微处理器100动态重设其本身的操作的流程图。[0017]图10示出了依据本发明一实施例中微处理器100检测NOP滑动的操作的流程图。[0018]附图符号说明[0019]100?微处理器;[0020]102?指纹单元;[0021]104?重设单元;[0022]124?组态寄存器;[0023]126?指纹设定准则表;[0024]128?动态重设功能性单元;[0025]132?指纹编程寄存器;[0026]142?指令信息;[0027]144?控制信号;[0028]202?指令索引;[0029]204?位移字段;[0030]206?运算码字段;[0031]208?ModRM字段;[0032]212?SIB字段;[0033]214?前缀;[0034]222?数学运算电路;[0035]224?结果(动态指纹);[0036]226?比较器;[0037]228?相符信号;[0038]232?静态指纹;[0039]234?控制逻辑;[0040]238?指纹产生准则;[0041]242?衰减计数器;[0042]244?串接信号;[0043]822?指令计数器;[0044]826?比较器;[0045]832?静态指令计数值;[0046]302-314,402—412,514—522,602—608,702—708,902—912,1002—1008?方块【具体实施方式】[0047]为使本发明的上述目的、特征和优点能更明显易懂,下文特举一较佳实施例,并配合所附图式,作详细说明如下。[0048]词汇(Glossary)[0049]「指纹(fingerprint)」为可辨识一程序的指令的序列的一数值。指纹值的产生是依据一数学运算而得到的关于指令的序列的信息累积的结果。该信息可包括,举例来说,该指令的指令索引值的多个组合(例如指令的地址)、指令的操作码(opcode)、指令的位移(displacement)、指令的前缀(prefix)、及/或指令的部分地址模式,例如是x86架构指令的SIB或modRM位或其部分。举例来说,累积指令信息的数学运算可包括连续地计算与在序列中的各指令有关的一循环冗余检查码(cyclicredundancycode)。举例来说,该数学运算亦可包括在一多输入位移寄存器(multipleinputshiftregister)中使用最大计数多项式来累计指令信息。举例来说,该数学运算还可包括依据一哈希函数(hashfunct1n),例如是一变长度(variable-length)数据哈希函数,以累计指令信息。举例来说,该数学运算更可包括利用连接指令信息进行排列,例如是一固定长度排列(fixed-lengthqueue),以累计指令信息。[0050]依据两个不同产生的时间点,指纹值可分为两种类型:静态及动态。当微处理器执行一程序的指令时,微处理器的指纹单元产生一动态指纹(dynamicfingerprint),反之,工程师会预先产生一静态指纹。静态指纹会提供至指纹单元,使得指纹单元可比较其产生的动态指纹及其所接收的静态指纹。指纹单元更可接收指纹产生准则(fingerprintgenerat1ncriteria),例如是起始条件、停止条件、及重置条件,其可控制指纹单元累计指令信息以产生动态指纹。指纹产生准则亦可指定为指令信息的部分的组合以让指纹单元进行累计以产生动态指纹。[0051]当各指令执行后(取出(fetch)后为佳),指纹单元接收指令信息。若指纹单元检测到一起始条件,其会依据可产生结果的数学运算来累计指令信息,其结果为动态指纹。当各指令执行后,指纹单元会持续接收指令信息,并依据可产生结果的数学运算以累计指令信息,直到指纹单元检测到一停止条件或一重置条件。在重置条件的一例子中,指纹单元清除累计的状态,并依据可产生结果的数学运算再开始累计指令信息。更适宜地而言,每当指纹单元产生介于一起始条件及一停止条件的一新结果,其会比较该结果(动态指纹)与该静态指纹,并表示它们是否相符。起始条件的例子包括一已分支(branch)的指令、一返回(return)指令、来自中断(interrupt)指令的返回、一陷讲(trap)情况、一例外(except1n)情况、一系统呼叫或返回指令(例如x86架构中的SYSENTER或SYSEXIT指令)、一子过程调用(subroutinecall)、一功能性单元控制指令(例如x86架构中的FINIT指令)、或是来自另一指纹单元的表示符,表示其已检测到指纹相符。停止条件的例子包括类似于起始条件的各种情况,且亦可包括指纹相符及在一起始条件之后所执行的指令的计算的失效(expirat1n)。重置条件的例子包括类似于起始条件的各种情况,且亦可包括一硬件重置及非不作业(NOP)指令的一指令。[0052]产生静态指纹的流程揭露于下述实施例。工程师可辨识程序部分的一目标集合,并想以其来增进效能、降低功耗及/或修正错误。接着,对于各目标程序部分,工程师辨识指令序列,若执行指令序列,其表示该目标程序部分正在执行或是即将执行。工程师接着提供该串(strand),即称为指令信息,并依据数学运算(与在指纹单元中用于产生动态指纹的数学运算相同)累计指令信息以产生一结果。该结果储存于一数据库或一档案中,与该程序部分相关的静态指纹相同。产生静态指纹可通过多种方式来操作。举例来说,工程师可提供收集与该指令序列有关的准则的指纹至一软件程序,例如是一微处理器的一功能仿真器,并接着于该功能仿真器上执行该程序,且在当其遇到停止条件时,指示该功能仿真器输出该功能仿真器的指纹引擎部分的结果,其中该结果用于该指令序列的静态指纹。另一方面,工程师可使用微处理器本身以执行一相同运算,在一实验室环境中,该微处理器可特别设定于侦错/测试设定以输出静态指纹及/或该微处理器连接至测试设备的一块以提供测试向量(testvectors)至该微处理器并接收测试结果。在工程师已收集目标静态指纹之后,工程师可创建一窗体,其将静态指纹与下列条件进行联结,例如(I)可最佳化微处理器的功能性单元的组态设定,其用于处理与指令序列有关的程序部分;及(2)收集准则的指纹。[0053]需了解的是检测一静态指纹与一动态指纹的相符并不会唯一肯定地辨识与该程序部分有关的指令序列,但取而代之的是指出一高机率表示该指令序列已经被执行。此方式有点类似于人的指纹并无法唯一肯定地辨识一个人。即,在一相对少数的情况中,指纹单元更可指出在静态指纹所产生的该指纹序列之外的一指令序列,其可称为一「别名(alias)」指令序列。[0054]一功能性单元为硬件或是在一微处理器中的软件及硬件的组合,其可执行与处理一指令相关的一函数。功能性单元的例子包括,但非限定,一指令撷取单元、一分支预测单元、一指令格式单元、一指令转译单元、一寄存器更名单元、一指令排程单元、一执行单元(例如是一整数单元、一浮点单元、一分支单元、一单一指令多重数据(singleinstruct1nmultipledata)单元、一多媒体单元、读取单元、储存单元)、一重新排序单元、一引退单元(retireunit)、一高速寄存、一数据预撷取单元、一电源管理单元、一内存管理单元、以及一储存冲突检测单元。[0055]若一功能性单元的设定可在微处理器操作时改变,则表示该功能性单元是动态可重设(dynamicallyreconfigurable)的。需了解的是,为了改变动态可重设的功能性单元的设定,当正要改变组态设定时,微处理器需先通过该动态重设功能性单元及/或整个微处理器以暂停指令的处理。举例来说,在一实施例中,微程序代码(miCTocode)可通过写入一数值至设定寄存器以改变组态设定。该微程序代码路径可在新组态设定写入之前且直到新组态设定生效时,序列化(serialize)指令的执行。[0056]一功能性单元的一组态设定为一状态,其可在当状态具有不同数值时,可导致该功能性单元以不同方式执行其功能。不同的方式会影响执行其功能的功能性单元的效能、功耗及/或正确度。[0057]请参考图1,图1示出了一微处理器100的功能方块图。微处理器100包括多个动态重设功能性单兀(dynamicallyreconfigurablefunct1nalunit)128、多个组态寄存器124、一重设单元104、一或多个指纹单元102、一指纹编程寄存器132(例如是一特定模型寄存器(modelspecificregister、MSR))、以及指纹设定准则表126,其中该指纹设定准则表126记录静态指纹、相关的组态设定及指纹产生准则。于图1中未示出,微处理器100还可包括无法动态可重设的功能性单元。在一实施例中,微处理器100包括一超向量非循序执行微架构(superscalarout-of-orderexecut1nmicroarchitecture),尽管在此所介绍的动态可重设的处理可由包括不同微架构的一微处理器所执行。在一实施例中,微处理器100包括一X86指令集架构,尽管在此所介绍的动态可重设的处理可由包括不同指令集架构的一微处理器所执行。[0058]组态寄存器124保存组态设定,并提供组态设定至动态重设功能性单元128以控制其特定方面的操作。可由该组态设定以进行动态可重设处理在不同操作方面的例子介绍于下列实施例,但非限定。[0059]「数据撷取组态设定」,其设定数据如何由系统内存中预先撷取(prefetch)至微处理器100的不同高速寄存中。举例来说,微处理器100可直接预先撷取高可能性的预测数据至LI数据高速缓存中,及/或预先撷取较低可能性的预测数据至一专用预先撷取缓冲器,其中该专用预先撷取缓冲器与LI及L2数据高速缓存分开。在另一实施例中,为了可持续触发而不需要预先撷取的应用程序,由数据预先撷取器所执行的数据撷取可被关闭。在又一实施例中,数据预先撷取器可被关闭而不处理在一软件应用程序中的预先撷取指令所请求的预先撷取动作,因为其倾向于在微处理器100内部启动的预先撷取进行负面互动。[0060]「分支预设组态设定」,其用以设定微处理器100预测分支指令的方式。举例来说,可由分支预测器由指令高速缓存的各数据线所预测的分支指令的数目是可以设定的。除此之外,由分支预测器所使用的独特分支预测机制的数目亦是可以设定的。更进一步,分支预测器可设定为假设是否一反向零值跳跃(jumponzero,JZ)分支指令会被经常采取或是不采取。此外,用于索引至在分支预测器中的一分支目标地址高速缓存(branchtargetaddresscache,BTAC)的一哈希算法亦是可以设定的。最后,若在该预定列表中的一个或多个目前运行的软件应用程序倾向于执行高度无法预测的分支指令,分支预测器可被设定至暂时整个关闭分支预测,或是设定至暂时关闭部分分支预测机制,例如在分支预测器中的一分支目标地址高速缓存。[0061]「指令高速缓存逐出(evict1n)设定」,其设定微处理器100所使用的算法以将指令由指令高速缓存逐出(evict)。[0062]「暂停执行(suspendexecut1n)组态设定」,其用以设定微处理器100是否要暂时暂停执行程序指令。举例来说,微处理器100可被设定为暂时暂停执行指令,以响应决定操作系统的空闲处理已经被执行一预定时间。[0063]「LI指令高速寄存尺寸组态设定」、「LI数据高速寄存尺寸组态设定」、及「L2指令高速寄存尺寸组态设定」,其分别用以设定LI指令高速缓存、LI数据高速缓存、及L2高速寄存的尺寸。举例来说,高速寄存尺寸可依据目前运行的一个或多个软件应用程序的工作数据集合的尺寸来进行设定。[0064]「转译/格式化组态设定」,其用以设定指令转译器/格式化器如何转译及/或格式化指令。举例来说,可以设定在各时钟周期由指令转译器/格式化器所转译及/或格式化的指令的数目。举例来说,指令转译器/格式化器可设定为在每个时钟周期仅转译及/或格式化单一指令,当此方式可满足正在运行的应用程序时,可降低微处理器100的功耗。除此之外,指令转译器/格式化器可由合并(merging)指令所关闭,以降低功耗。[0065]「推测寻访(speculativetablewalk)组态设定」,其用以设定微处理器100的一内存管理单元是否响应一转译侧视缓冲器(translat1nlookasidebuffer,TLB)的失误(miss)以执行推测页面寻访。举例来说,该内存管理单元可设定为关闭用于一应用程序的推测寻访,其会导致推测会持续不正确,因此会逐出(evict)在转译侧视缓冲器中的其它有用的项目(entry)。在一实施例中,可设定寻访的推测的强度。举例来说,该内存管理单元可设定为在所有较旧的储存动作已引退(retire)后、或在所有较旧的储存动作的地址已解析、或是不管较旧的储存动作时,仅进行一推测页面寻访。除此之外,内存管理单元可设定为可同时独立控制数据与程序代码的推测寻访。更进一步,内存管理单元可设定为可执行推测地寻访,但并不推测地更新转译侧视缓冲器。最后,内存管理单元可设定为辨识那些类型的微执行码或硬件功能可进行推测寻访,例如不同的软件或硬件预先撷取。[0066]「LI高速缓存失误行为组态设定」,其用以设定内存管理单元是否响应在LI指令高速缓存的失误、以序列或平行方式由L2高速缓存及处理器总线请求数据。[0067]「转送哈希(forwardinghash)组态设定」,其用以设定微处理器100所使用的算法以哈希虚拟地址位至地址比较以检测微处理器100是否应执行一数据转送动作,例如由一较旧未引退的储存指令至一读取(load)指令,或是在一读取队列(loadqueue)及一填充队列(fillqueue)之间。举例来说,可设定下列情况:(I)在虚拟地址的页面索引位之外会被进行比较的位数目;(2)在非页面索引位中的那一个会被哈希以产生这些位;以及(3)所选择的位如何被哈希。[0068]「队列尺寸(queuesize)组态设定」,其设定在微处理器100中不同队列的可用尺寸,例如是储存队列、读取队列、及高速缓存线填充队列。举例来说,不同的队列可被设定至较小的尺寸,当其可满足目前正在运行的应用程序时藉以降低功耗量。[0069]「发送(issue)尺寸组态设定」,其设定微处理器110在单一时钟周期中发送至不同执行单元的指令的数量。举例来说,发送尺寸组态设定可设定至相对较小的数值,当在每个时钟周期所发送的一较小数量的指令可满足正在运行的应用程序时藉以降低功耗量。[0070]「重新排列缓冲器尺寸组态设定」,其设定在重新排列缓冲器中可用项目的数量。举例来说,装置驱动程序可设定重新排列缓冲器项目的数量至一相对较小的数量,当其可满足正在操作的应用程序时藉以降低功耗量。[0071]「非循序(out-of-orderness)组态设定」,其设定微处理器100如何利用非循序执行的指令。举例来说,微处理器100可被设定为以一严谨程序顺序以执行指令(注:没有非循序执行)。除此之外,微处理器100可被设定为考虑在指令窗口中会有多深入,以让指令发送器寻找独立指令以发送至执行单元执行。[0072]「读取延迟组态设定」其设定微处理器100的一读取延迟机制为关闭或开启。在一实施例中,微处理器100推测地发送一读取指令,且若其依据(dependon)一较旧的储存指令且其数据尚无法取得时,表示其可能是有害于效能,此时微处理器100需重新播放该读取指令。为了降低重播放的相似度,该读取延迟机制会依已重新播放过的读取指令的过去历史以选择性地延迟一读取指令的发送。然而,当该读取延迟机制开启时,某些软件应用程序会具有较差效能的倾向。因此,举例来说,对于具有上述倾向的一软件应用程序来说,可关闭该读取延迟机制。[0073]「非时间(non-temporal)读取/储存组态设定」,其设定微处理器100的读取/储存指令的行为,其包括一非时间暗示(hint)以防止微处理器100高速缓存其数据。在假设微处理器100中的数据高速缓存小于微处理器100的实际数据高速缓存尺寸且若该数据被高速缓存则会加速执行,某些软件应用程序会被写入以利用非时间读取/储存指令。因此,举例来说,微处理器100会被设定为高速缓存由读取/储存指令所指定的数据,其包括一非时间暗示。除此之外,可设定在微处理器100中可取得包括一非时间数据暗示的读取/储存指令的读取缓冲器的数量。[0074]在另一实施例中,另一组态设定可选择性地设定微处理器100的硬件分页目录高速缓存(hardwarepagedirectorycache,PDC)以包含分页目录项目(pagedirectoryentries,PDE)或第4阶的分页表项目(fourth-levelpagetableentries,PML4)。[0075]在另一实施例中,另一组态设定可选择性地设定两个、一个或无数据及程序代码转译侧视缓冲器(TLB)项目被放置至微处理器100的L2转译侧视缓冲器。另一组态设定可设定L2转译侧视缓冲器的尺寸。[0076]另一组态设定可选择性地设定是否已确保一软件预先撷取线的配置。S卩,内存管理单元可被设定为等待完成,直到击中(hit)、或已为该软件预先撷取线推送一请求、或完成但继续在唤醒时尝试配置该软件预先撷取线。[0077]另一组态设定可设定自我调整码(self-modifyingcode)检测是否开启或关闭。除此之外,若自我调整码检测开启,微处理器100可被设定为先更正(correct)或后更正,并执行或不执行完整机器清除(flush)。[0078]另一组态设定设定微处理器100的读取及/或储存管线(pipeline)中的不同平行仲裁(arbitrat1n)是否开启或关闭。举例来说,在储存管线中的一读取有效地址(loadeffectiveaddress,LEA)产生并不需要为了整个管线进行仲裁,因为其会先产生结果,因此微处理器100可被设定为允许需要完整管线的另一操作在同时间进行仲裁。更进一步,读取管线可被选择性地设定为允许不需要读取高速缓存的仲裁器与需要读取高速缓存的仲裁器平行地进行仲裁。[0079]另一组态设定设定关于写入合并的读取(write-combineloads)的推测(speculat1n)的程度。举例来说,写入合并的读取可为完整推测、推测但仍然依照顺序、或是非推测。可对与X86M0NVNTDQA指令有关的读取进行类似的组态设定。[0080]另一组态设定在一读取失误(loadmiss)已需要较新的微操作(micro-operat1ns))以重新播放且该读取已快要完成之后,其设定内存管理单元开启或关闭是否该内存管理单元意指微处理器100的指令排程器。上述方式允许该排程器以推测地安排相依的微操作以与读取结果转送阶段一同排队,而不是在排程前等待提供该结果。此为推测该读取现在具有一有效结果,但若没有有效结果,则需要另一重新播放。[0081]另一组态设定设定微处理器100的转送路径以选择性地关闭转送。此组态设定对避免被检测到微处理器的后续设计的设计缺失特别有效,且当一特定程序部分由微处理器100所执行时可能会显露其本身。转送的例子可为选择性地关闭,其包括,但非限定,寄存器结果转送及读取-储存转送。[0082]在另一实施例中,动态重设功能性单元128的一动态可重设处理导致寄存器更名单元清除维持读取-储存依存性的队列,其由寄存器更名单元所使用以影响读取指令排程以降低由读取-储存冲突所造成的读取重新播放。一般而言,功能性单元128是动态可重设以清除(flush)累计的效能特征状态,其已知、或被猜测为假(false)、或与一特定程序部分有关的变形。[0083]在另一实施例中,动态重设功能性单元128的一动态可重设处理导致一条或多条高速缓存线、或整个高速寄存被清除以避免潜在的数据一致性。此方式对于当一特定程序部分由微处理器100所执行时会显露其本身的设计缺失特别有用。[0084]在另一实施例中,动态重设功能性单元128的一动态可重设处理是为了一架构性指令的一特定例子暂时改变该架构性指令的微程序代码的行为。举例来说,微程序代码执行该架构性指令的特定例子中的一交替码路径(alternatecodepath),例如已被该架构性指令已包括于一特定程序部分之中,并在该架构性指令中的其它例子执行一正常码路径。再次重申,此方式对于避免设计缺失特别有用。[0085]重设单元104读取与一相符静态指纹有关的组态设定126,并将组态设定126写入组态寄存器124以重设微处理器100的动态重设功能性单元128。在一实施例中,重设单元104包括由微处理器100所执行的微程序代码,其执行读取与该相符静态指纹有关的组态设定126以及写入组态设定126至组态寄存器124。更适宜地,当指纹单元102检测到指纹相符,其会控制至微程序代码的陷阱。在另一实施例中,重设单元104包括硬件控制逻辑,其可响应指纹单元102通知指纹相符以读取与相符静态指纹有关的组态设定126,并写入与该相符静态指纹有关的组态设定126。重设单元104及指纹单元102利用控制信号144进行沟通。[0086]需了解的是,在微处理器100中并非所有功能性单元均是动态可重设的。亦需了解的是,当重设单元104重设动态重设功能性单元128时,不会写入各个组态寄存器124,且不会各个动态重设功能性单元128均被重设,尽管会有至少一组态寄存器124会被写入,也会有至少一动态重设功能性单元128会被重设。[0087]当微处理器100的功能性单元128执行指令并累计指令信息142时,指纹单元102依据可产生动态指纹的数学运算以接收来自微处理器100的功能性单元128的指令信息142,其中动态指纹与静态指纹进行比较。更适宜地,指纹单元102包括多个指纹单元102,各指纹单元102依据一不同的指纹产生准测以产生一动态指纹,并将其与一静态指纹进行比较。在一实施例中,有4个分开的指纹单元102,且它们会被逻辑性地链接在一起以完成相对复杂的指令序列的检测。指纹单元102的一实施例会在图2中进一步详述。[0088]指纹编程寄存器132可由软件写入,例如是一装置驱动程序或基本输入输出系统(B1S),以控制指纹单元102,并填充(populate)静态指纹及其有关组态设定及指纹产生准则126的窗体。[0089]在此处所介绍的微处理器100的动态可重设处理的使用方式的一例子是为了增加效能及/或降低微处理器100的功耗,例如当执行程序的已知部分,其效能及功耗会显著地受到动态重设该微处理器100至已知组态的影响。[0090]在此处所介绍的微处理器100的动态可重设处理的使用方式的另一例子是为了防止微处理器100不正确地操作,例如当微处理器100处理一程序的一部分时,若该程序部分由微处理器100以一第一已知组态所执行,会导致一功能性错误,但若由微处理器100以一第二已知组态所执行,会导致一正确结果。举例来说,当数据预先撷取器用以执行数据预先撷取的一特别积极模式(particularlyaggressivemode),若微处理器100执行该程序部分,微处理器100会产生一功能性错误。相反地,当数据预先撷取器用以执行数据预先撷取的一较不积极模式(lessaggressivemode)或是数据预先撷取已完全关闭,微处理器100不会产生功能性错误。功能性错误,例如为但非限定,数据损毁(corruptdata)、停止条件(例如死锁(deadlock)或活锁(Iivelock))、不正常的缓慢效能、以及操作系统未准备好补救(remedy)的例外情况(except1ncondit1n)。微处理器100的设计的缺失会导致直到微处理器100大量制造之后及/或已出货给顾客之后功能性错误仍未被发现。在这种情况下,通过动态重设微处理器100以修正此问题是有帮助的,而不是重新设计微处理器100及/或召回或不贩卖有错误的组件。[0091]在此介绍的动态重设的实施例的潜在好处是微处理器100可以相对较佳的粒度(granularity)来辨识软件应用程序的部分。当软件应用程序的不同部分可依据不同组态而动态重设微处理器100的功能性单元而得到好处,此方式对于包括不同部分的软件应用程序来说特别有用。举例来说,一电玩游戏可包括一程序读取部分、一初始化部分、一图形计算部分、一使用者输入接收部分、以及一策略计算部分。各个程序部分可在微处理器100的功能性单元的不同组态下有较佳的效能。需了解的是,若微处理器100较快地执行该程序部分、使用较少的功耗以执行该程序部分、及/或正确地执行该程序部分,表示微处理器100的效能较佳。[0092]请参考图2,图2示出了依据本发明一实施例中的指纹单元102的详细功能方块图。指纹单元102包括一数学运算单元222、比较逻辑226、一静态指纹232、一衰退(decay)计数器242、以及控制逻辑234。[0093]数学运算单元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所提供。[0094]更适宜地,数学运算电路222包括一多输入移位寄存器(multipleinputshiftregister,MISR),其使用一最大计数多项式(maximumcountpolynomial)。更适宜地,当各指令被格式化时,该(选择性过滤的)指令信息142为具有最左输入位的一位右移的多输入位移寄存器的目前状态的布尔互斥或(BooleanX0R)结果,其为多输入位移寄存器阶数(taps)的互斥或结果。在一实施例中,多输入移位寄存器为50位宽,且多输入移位寄存器的阶数为49、9及O以完成该最大计数多项式。在一实施例中,产生一误合(falsematch)的别名串(aliasstrand)的相似度大约是1:250)。如上所述,虽然串辨识(strandidentificat1n)可能不绝对是唯一的,在多数用途上,该辨识可为充分唯一的(sufficientlyunique),例如是增进效能及改善设计缺失的影响。在一少见的别名串的误合的例子中,其结果可能为较低的效能、最高的功耗、及/或无法修正在微处理器100设计中的一缺失。如上所述,指纹单元102可在每个时钟周期接收用于多个指令的指令信息142,且数学运算电路222用以执行数学运算以在单一时钟周期中累计所有的指令信息142。更进一步而言,在此多输入移位寄存器的实施例中,数学运算电路222用以在单一时钟周期中执行所有指令信息142的互斥或运算。[0095]数学运算电路222依据来自控制逻辑234而接收的信息238以产生结果,其包括指纹产生准则238。指纹产生准则238包括起始条件、停止条件及重置条件,当数学运算电路222累计指令信息142以产生动态指纹224时,该等条件用于控制。指纹产生准则238亦指定数学运算电路会累计以产生动态指纹224的指令信息142的部分(202,204,206,208,212,214)的集合,并指出会被过滤的部分。更适宜地,二位的O值会被插入与被过滤部分有关的位。[0096]比较器224将数学运算电路222所产生的动态指纹与静态指纹232进行比较以产生一真值于一相符信号(matchsignal)228,若两个指纹相符时,其提供至控制逻辑234。在一实施例中,当达到一停止条件时,比较器226仅执行比较运算。更适宜地,一装置驱动器及/或微程序代码加载(load)该静态指纹232及指纹产生准则238。当控制逻辑234检测到在该相符信号228的一真值时,控制逻辑234会利用控制信号144以将该相符情况与重设单元104进行沟通。除此之外,控制逻辑234利用一串接信号(chainsignal)244以将该相符情况与另一指纹单元102进行沟通,其细节将于后述的图6及图7的部分详述。控制逻辑234亦接收来自其它指纹单元102的串接信号244。更进一步,控制逻辑234可加载一衰减计数器242以回应该相符情况。衰减计数器的运算将于图5的实施例中详述。[0097]请参考图3,图3示出了依据本发明一实施例中用以产生已知目标程序部分及其有关的静态指纹、组态设定及指纹产生准则的数据库的流程图。该流程开始于方块302。[0098]在方块302,辨识程序部分的一列表,其用于最佳化微处理器100的动态重设功能性单元128的组态,例如增进其效能(较快的程序部分执行或较低的功耗)及/或修正错误(bug)。该流程前进至方块304。[0099]在方块304,决定用在方块302中所辨识的程序部分的一个的动态重设功能性单元128的最佳化组态设定。该流程前进至方块306。[0100]在方块306,辨识与在方块304中所辨识的程序部分有关的串(strand),并设计指纹产生准则,其可用以产生用于该串的一指纹。该流程前进至方块308。[0101]在方块308,利用在方块306所设计的指纹产生准则以产生用于与该程序部分有关的该串的一静态指纹。该流程前进至方块312。[0102]在方块312,储存与该程序部分有关的静态指纹、组态设定、以及指纹产生准则。该流程前进至方块314。[0103]在方块314,针对在方块302中所指出的各个其它程序部分以重复方块304、306、308及312以编译(compile)—数据库。该流程结束于方块314。[0104]请参考图4,图4示出了依据本发明一实施例中微处理器100动态重设其本身的动作的流程图。该流程开始于方块402。在方块402,微处理器100接收静态指纹、相关组态以及指纹产生准则的一指纹设定准则表126。更适宜地,指纹设定准则表126包括依据图3的流程而编译的一数据库的一部分。指纹设定准则表126是可编程的。更适宜地,一装置驱动器将该信息列表提供至该微处理器100。举例来说,该装置驱动器决定由操作系统的一个或多个正在操作且可在数据库中辨识的软件应用程序,且响应上述动作,提供与该正在操作的软件应用程序的程序部分有关的静态指纹、组态设定及指纹产生准则126。选择性地,系统韧体,例如是B1S,提供指纹设定准则表126至微处理器100,特别是在动态可重设用于修正一错误的情况。另外,选择性地,指纹设定准则表126可通过微程序代码的一更新(patch)而加载微处理器100。更适宜地,在微处理器100重置后且指纹产生准则是不确定地存留(persistindefinitely)或是至少直到微处理器100再度重置,微程序代码更新会被加载。这在一情况下会特别有帮助,例如是动态可重设用于修正一错误,其会在微处理器100重置后的软件执行过程的早期就显露。该指纹设定准则表126可包括较大数量的程序部分的信息远大于指纹单元102的数量,且当程序执行时,微处理器100的微程序代码可动态地加载具有静态指纹及指纹产生准则的指纹单元102而不需要装置驱动器的介入。更适宜地,指纹设定准则表126被接收至微处理器100的一私有内存,其无法被架构程序所存取,但可由微处理器100的微程序代码所存取。该流程前进至方块404。[0105]在方块404,指纹单元102加载静态指纹及指纹产生准则。如上所述,其会发生在当装置驱动器写入指纹设定准则表126及/或当微程序代码检测到事件时,例如是指纹单元102已检测到指纹相符(例如图7的方块703)。该流程前进至方块406。[0106]在方块406,当动态重设功能性单元128正依据在组态寄存器124中的目前组态设定而执行指令时,指纹单元102会依据基于在方块404所加载的指令信息142的数学运算以累计指令信息142,藉以产生动态指纹224并将其与在方块404中所加载的静态指纹232进行比较。该流程前进至决定方块408。[0107]在决定方块408,指纹单元102(例如比较器226及控制逻辑234)决定在静态指纹及动态指纹之间是否有相符。若有,该流程前进至方块412;否则,该流程前进至方块406。[0108]在方块412,控制逻辑234利用控制信号144通知重设单元104该相符情况,且重设单元104会响应地利用与在方块408中与动态指纹224相符的静态指纹232有关的组态设定以重设动态重设功能性单元128(例如通过写入组态寄存器124)。该流程结束于方块412。[0109]请参考图5,图5示出了依据本发明一实施例中微处理器110动态重设其本身的更进一步操作的流程图。该流程由方块502开始,特别是由图4的方块412开始。[0110]在方块502,控制逻辑234加载具有与在方块408中相符的静态指纹有关的一衰减计数值的衰减计数器242。更适宜地,该衰减计数值包括于图1中的指纹设定准则表126。该流程前进至方块516。[0111]在方块516,周期性地一特别是每时钟周期一该衰减计数器242会减少计数。该流程前进至决定方块518。[0112]在决定方块518,控制逻辑234决定衰减计数值是否已过期(expired)。若是,贝丨J该流程前进至方块522;否则,该流程回到方块516。[0113]在方块522,控制逻辑234利用控制信号144通知重设单元104该衰减计数器242的过期,且该重设单元104响应地以指纹设定准则表126中的预设组态设定以重设动态重设功能性单元128。在一实施例中,预设组态设定被编程至微程序代码中。在一实施例中,预设组态设定包括于指纹设定准则表126中。在一实施例中,预设组态设定为在方块412中的动态可重设动作执行前的先前组态设定(注:在方块406中微处理器100正在执行的指令的目前组态设定)。在一实施例中,该组态设定的一子集合会回到其默认值,同时该组态设定的另一子集合会维持在方块412所写入的数值。更适宜地,这些子集合均定义于指纹设定准则表126中。该流程结束于方块522。[0114]请参考图6,图6示出了依据本发明又一实施例中微处理器100动态重设其本身的操作的流程图。该流程开始于方块602。[0115]在方块602,指纹单元102中的一个(用第一指纹单元表示)检测到其动态指纹224及其静态指纹232相符,并表示该相符情况,例如通过一串表示符(chainindicator)244。该流程前进至方块604。[0116]在方块604,不同的指纹单元102(用第二指纹单元表示)接收在方块602由第一指纹单元所产生的表示符,并响应地开始依据基于指纹产生准则的数学运算以累计指令信息142,藉以产生动态指纹224并将其与静态指纹232进行比较。该流程前进至方块606。[0117]在方块606,第二指纹单元检测到其动态指纹224及其静态指纹232的相符情况。该流程前进至方块608。[0118]在方块608,控制逻辑234以控制信号144通知重设单元104相符情况已找到,且重设单元104响应地以在方块606中与动态指纹224相符的静态指纹232有关的组态设定126以重设动态重设功能性单元128。该流程结束于方块608。[0119]请参考图7,图7示出了依据本发明又一实施例中微处理器100动态重设其本身的操作的流程图。该流程开始于方块702。[0120]在方块702,指纹单元102的一个检测到其动态指纹224及其静态指纹232相符,并表示该相符情况,例如通过控制信号144。该流程前进至方块703。[0121]在方块703,重设单元104加载具有一新静态指纹232及其相关的指纹产生准则的指纹单元,藉以响应在方块702中已找到该相符情况的表示。该流程前进至方块704。[0122]在方块704,指纹单元102依据基于在方块703中所加载的该新指纹产生准则的数学运算以累计指令信息142,藉以产生动态指纹224,并将其与静态指纹232进行比较。该流程前进至方块706。[0123]在方块706,指纹单元102检测到其动态指纹224及其静态指纹232的一相符情况。该流程前进至方块708。[0124]在方块708,控制逻辑234以控制信号144通知重设单元104已找到新的相符情况,且重设单元104响应地以与在方块706中与动态指纹224相符的新静态指纹232有关的组态设定以重设动态重设功能性单元128。该流程结束于方块708。[0125]虽然图7描述指纹单元102仅一次有效地串接至其本身,更适宜地,指纹单元102可串接至其本身更多次。更进一步,虽然图6中仅描述仅串接两个指纹单元102,更适宜地,所有的指纹单元102可依同样的方式进行串接。更进一步,图6的实施例可与图7的实施例合并,使得用于正在搜寻的相符情况的目前加载至指纹单元102的静态指纹的集合会动态地变化,使得具有长于指纹单元102的数量的程序部分的链接的数量可被检测到,且动态重设功能性单元128可如同想要地被动态重设。[0126]请参考图8,图8示出了依据本发明另一实施例中图1的指纹单元102的方块图。图8的指纹单元102与图2中的指纹单元102类似;然而,其亦包括了一指令计数器822、一第二比较器826、以及一静态指令计数值832。[0127]指令计数器822接收来自图1的动态重设功能性单元128的指令信息142,并在每次其遇到由控制逻辑234所接收的指令计数产生准则838所指定的一类型的一指令以产生一结果824,其为一动态计数值。更适宜地,指令计数产生准则838指定要计数的指令类型。在一实施例中,要计数的指令类型包括所有指令、次循环呼叫类型指令(subroutinecalltypeinstruct1n)、回传类型指令(returntypeinstruct1n)、NOP类型指令、以及限制在微程序代码的指令(意即用微程序代码实现)。在一实施例中,数学运算电路222仅累计特定类型且由指令计数器所计数的指令信息142,同时用于排除指令类型的指令信息142不会被数学运算电路222所累计。在一实施例中,NOP指令包括除了单字节X86N0P指令之外的指令,例如是多字节指令,可有效地作为一NOP指令(0x90),其细节将于图10中详述。[0128]比较器826由指令计数器822所产生的比较动态指令计数值824及静态指令计数值832,若两个指令计数值相符,则产生一真值于提供至控制逻辑234的一第二相符信号。在一实施例中,当达到一停止条件时,比较器826仅进行比较动作。更适宜地,一装置驱动器及/或微程序代码加载静态指令计数值832及指令计数产生准则838。当控制逻辑234检测到在相符信号828的一真值时,控制逻辑234利用控制信号144通知重设单元104该相符情况。除此之外,控制逻辑234利用一串接信号通知其它的指纹单元102该相符情况。控制逻辑234可加载衰减计数值以回应该相符情况。更适宜地,可采用类似于图3所述的方式将静态指令计数值832及指令计数产生准则838编译至已知目标程序部分的一数据库。[0129]请参考图9,图9示出了依据本发明一实施例中的微处理器100动态重设其本身的操作的流程图。图9在某些方面与图4类似;然而,图9描述指纹单元102的操作以动态重设微处理器100以响应检测到一静态指令计数值而不是一静态指纹,其细节如下所述。然而,需注意的是指纹单元102可用以同时检测指纹及指令计数值。除此之外,指纹单元102可用串接的方式操作(例如图6及图7的实施例所述),让指纹单元102加载以同时检测所需的指纹及指令计数值以动态重设微处理器100。该流程开始于方块902。[0130]在方块902,微处理器100接收包括静态指令计数值及图1中有关的组态设定及指令计数产生准则的指纹设定准则表126。该流程前进至方块904。[0131]在方块904,指纹单元102加载静态指令计数值及指令计数产生准则。该流程前进至方块906。[0132]在方块906,当动态重设功能性单元128正依据在组态寄存器124中的目前组态设定以执行指令时,指纹单元102依据在方块904中所加载的指令计数产生准则以计数指令,藉以产生动态指令计数值824,并将其与在方块904中所加载的静态指令计数值832进行比较。该流程前进至决定方块908。[0133]在决定方块908,指纹单元102(例如比较器826及控制逻辑)决定在静态指令计数值及动态指令计数值之间是否相符。若是,则该流程前进至方块912;否则,该流程回到方块906。[0134]在方块912,控制逻辑234利用控制信号144通知重设单元104该相符情况,且重设单元104响应地利用在方块908中与动态指令计数值相符的静态指令计数值有关的组态设定以重设动态重设功能性单元128。该流程结束于方块912。[0135]上述所介绍的动态重设的实施例与成本的取舍有关。首先,指纹单元的硬件的芯片实际面积及功耗会有成本。第二,改变组态设定亦会有成本。此成本来自暂时暂停(suspend)指令处理以改变组态设定。此成本亦可来自所改变的组态设定会在少数已辨识出一别名串的例子中导致较低的效能。[0136]整合NOP滑动检测器[0137]在此所介绍的指纹单元的另一个用处是检测一「Ν0Ρ滑动(可称为NOPslide或NOPsled)J0[0138]NOP滑动指来自一处理器撷取并执行指令的一内存的连续NOP指令的序列。NOP滑动通常是被攻击者用来未经许可存取一计算机系统。NOP指令指可执行一操作,并不影响处理器的架构状态(architecturalstate)或是仅在一方面影响架构状态,其可接受攻击者试图未经许可存取计算机系统,包括处理器。NOP滑动的使用在计算机安全的领域为公知技术,但将会简短介绍。[0139]攻击者会试图发掘在计算机系统上操作的软件的弱点且其具有执行权限(executiveprivileges)。通过发现弱点,攻击者可让「壳码(shellcode)」写入至计算机系统的内存中。壳码会执行对攻击者有利的动作,例如是提供系统的存取执行权限。其目前是让控制权转移到壳码。然而,某些已发现的弱点的本质是让在内存中的目标地址不知不觉地转移是无法准确得知的。当然,在一些例子中并不一定知道目标地址,且攻击者依赖小型统计相似度,即目标地址为壳码。第一种方式是攻击者试图增进小型统计相似度以写入许多壳码的拷贝至内存。第二种方式是用许多不同次数尝试攻击。第三种方式是使用NOP滑动。[0140]攻击者会将NOP滑动写入在壳码之前,其可提供一安全降落垫,也就是为了转移控制权。NOP滑动可能非常大,举例来说,是数百或数千阶(order)的字节大小。只要目标地址的控制权转移到NOP滑动之内的某处,处理器会仅执行NOP指令,直到其达到并执行壳码。执行(一可能大数量)的NOP指令对于攻击者来说是可接受的,因为除了攻击者不关心的方式之外,NOP指令不会改变处理器的架构状态。攻击者可能会写入NOP滑动的许多拷贝及壳码,且可能尝试许多次以使用这种方式入侵,而上述全部方式合并可增进取得已执行的壳码的相似度。[0141]因为NOP滑动常常会包含于在攻击者的攻击中,计算机系统可分析在网络上传输至一计算机系统的封包以搜寻一NOP滑动。若在一封包中检测到NOP滑动,该封包会被丢弃(discard)。该技巧常常用于网络攻击检测系统(networkintrus1ndetect1nsystem,NIDS)。NIDS的缺点是封包可能被加密,会更难检测NOP滑动。更进一步,攻击者的输入包括NOP滑动及壳码亦可能被加密。在此处所介绍的NOP滑动检测器的实施例的优点是其可在当处理器中的NOP指令的序列将要被执行时检测该序列,也因此可保证在当时一定会被译码且被NOP滑动检测器所检查。[0142]请参考图10,图10示出了依据本发明一实施例中微处理器100检测NOP滑动的操作的流程图。特别是指纹单元102被使用为一NOP滑动检测器。NOP指令为可执行一动作的指令,其不会影响到处理器的架构状态(除了更新指令索引)或是仅以一预定方式影响架构状态。微处理器100的设计者在设计预定方式时,在其心中会有那些对攻击者是可接受的以得到计算机系统未经许可的存取权,其包括微处理器100,且此方式会随着壳码所采取的动作而变化。依据不同实施例,在方块1004由指令计数器822所计数的NOP指令的列表,且其用于决定为了重置条件目的的一非NOP指令,如下所述一包括下面多种组合:微处理器100的指令集中的架构性定义的NOP指令(例如x86架构NOP指令,0x90);分支(branch)指令,其分支至下一循序指令;除了架构状态的一预定集合之外,不会改变微处理器100的架构状态的指令,例如是一个或两个条件标记寄存器(例如X86EFLAGS),及堆栈索引寄存器。例如下列x86架构指令:PUSHES(0x06),PUSHCS(OxOE),PUSHSS(0x16)、PUSHDS(OxlE)、PUSHregister(0x50-0x57)、PUSHSP(0x5C)、PUSHA(0x60)、WAIT(0x9B)、SAHF(0x9E)、REPNEprefix(0xF2)、CLD(OxFC)、STD(OxFD)、CLC(0xF8)、STC(0xF9)、CMC(0xF5)。除此之外,在微处理器100的指令集架构具有变长度指令的一实施例中,NOP指令的列表会被包含于包括多字节NOP指令的组合中,其中所个别取得的指令的各字节为一NOP指令。换个方式来说,一多字节NOP指令具有一种特性,使得若控制权转移至指令的任何字节,剩下的字节或指令的字节会构成微处理器100的指令集架构所定义的一有效指令(例如不会产生一无效指令例外(invalidinstruct1nexcept1n)),否则具有如一单字节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指令的数值,例如是PMADDffD(0xF5)、PSUBB(0xF8)、PSUBff(0xF9)、PADDB(OxFC)、PADDff(OxFD)。该流程开始于方块1002。[0143]在方块1002,指纹单元102加载静态指令计数值822及指令计数产生准则838,如同图8及图9的实施例所述的方式。更适宜地,静态指令计数值832可让一使用者或系统软件通过指纹编程寄存器132而可编程。在一实施例中,静态指令计数值832通过微处理器100的熔合(fuse)而可编程。在一实施例中,起始条件为检测一回传(return)指令,重置条件为检测到不是一NOP指令的指令(即为非NOP指令),且没有指定停止条件。会考虑其它实施例,例如其起始条件为检测到一子程序呼叫(subroutinecall)指令、由中断指令回传、或是一系统呼叫或回传指令。该流程前进至方块1004。[0144]在方块1004,当微处理器100正撷取并执行指令,指纹单元依据在方块1002所指出的指令计数产生准则以计算连续NOP指令,藉以产生一动态指令计数值824,并所产生的动态指令计数值824与在方块1002所加载的静态指令计数值832进行比较。该流程前进至决定方块1006。[0145]在决定方块1006,指纹单元102决定动态指令计数值824是否与静态指令计数值832相符。若是,则该流程前进至方块1008;否则,该流程回到方块1004。[0146]在方块1008,指纹单元102响应微处理器100暂停(suspend)架构指令的执行以表示该相符情况。更适宜地,指纹单元102造成微程序代码的陷井(trap)以响应检测到该相符情况(注:回应检测到NOP滑动)。在一实施例中,微程序代码产生一无效运算码错误(例如x86架构的INT6)。在一实施例中,微程序代码产生一机器检查例外(machinecheckexcept1n,例如是x86架构的#MC,vector编号18)。在一实施例中,若微处理器100处于一虚拟机器模式(virtualmachinemode,例如是x86的VMXmode),该微程序代码离开该虚拟机器模式。在一实施例中,若微处理器处于一信任执行模式(trustedexecut1nmode),微程序代码采取一安全例外动作(securityexcept1n)。该流程结束于方块1008。[0147]虽然指纹单元及数学运算电路的特定实施例已被揭露,需了解的是其它实施例可用于产生动态指纹及指令计数值,并检测静态指纹及指令计数值的相符情况。[0148]虽然以上叙述本发明多种实施方式,必须声明的是,上述内容乃本技术的部分应用例子,并非用来限定本发明的范围。本领域技术人员可依循本发明特征,以现有技术另外发展出许多变形。例如,可以软件方式实现本发明所揭露的内容,例如,所揭露的设备或方法的功能、制作、模型化、仿真、说明以及/或测试。上述软件可采用常见的程序语言(例如,C、C++)、硬件描述语言(hardwaredescript1nlanguage,HDL)包括VerilogHDL、VHDL...等或其它可用的程序语言。上述软件可载于现有的任何计算机储存媒体,例如,磁记录装置(magnetictape)、半导体(semiconductor)、磁盘(magneticdisk)、或光盘(opticaldisc、如⑶-ROM、DVD-ROM等),也可载于网络、有线系统、或其它通讯媒体。本发明所揭露的各种装置与方法可由一半导体智慧财产权核心一例如一微处理器核心,可由硬件描述语言实现一保护,且可被转换为硬件型式,以集成电路方式制作。此外,所揭露的装置与方法也可由硬件与软件共同设计实现。因此,本发明不应受上述任何实施方式所限定,应当根据本发明权利要求的内容作解读。特别是,本发明可被实现于一微处理器中,实现一般常用的计算机。本发明【
技术领域:
】人员有可能基于本发明,以所揭露的概念以及所述的特殊实施方式为基础,设计或调整其它结构,以在不偏离本发明权利要求的前提下,发展与本发明具有同样目的的技术。【权利要求】1.一种微处理器,包括:一指令高速缓存;一硬件状态机,用以检测在由该指令高速缓存撷取的一指令字节的数据流中的N个不动作(NOP)指令的一连续序列,其中N大于零;以及其中当检测到N个NOP指令的该连续序列时,该微处理器用以暂停由该指令高速缓存撷取及执行指令。2.如权利要求1所述微处理器,其中N的数值通过在该微处理器所执行的一软件而可编程。3.如权利要求1所述的微处理器,其中该硬件状态机响应检测到一子程序回传指令而开始计数该NOP指令。4.如权利要求1所述的微处理器,其中该硬件状态机响应检测到一非不动作(non-NOP)指令以开始计数该NOP指令。5.如权利要求1所述微处理器,其中当检测到该NOP指令的该连续序列时,该微处理器用以阻止该微处理器的一微程序代码。6.如权利要求1所述的微处理器,其中当未检测到该NOP指令的该连续序列时,该微处理器用以继续由该指令高速缓存撷取并执行指令。7.如权利要求1所述的微处理器,更包括:一条件标记寄存器;一堆栈索引寄存器;其中该NOP指令包括不改变该微处理器的一架构状态而不会影响到该条件标记寄存器及该堆栈索引寄存器的一或两者的指令。8.如权利要求1所述的微处理器,其中该NOP指令包括下列x86架构指令中的一或多个:PUSHES、PUSHCS、PUSHSS,PUSHDS,PUSHregister、PUSHSP、PUSHA、WAIT、SAHF、REPNEprefix、CLD、STD、CLC、STC、CMC。9.如权利要求1所述的微处理器,其中该NOP指令包括一或多个x86架构的多个多字节指令,其中该多字节指令的一直接字节为一单字节NOP指令。10.如权利要求1所述的微处理器,其中该NOP指令包括一或多个X86架构的多个多字节指令,其中该多字节指令的一modRM字节为一单字节NOP指令。11.一种用于一微处理器的检测方法,该微处理器包括一指令高速缓存及一硬件状态机,该方法包括:利用该硬件状态机检测在由该指令高速缓存撷取的一指令字节的数据流中的N个不动作(NOP)指令的一连续序列,其中N大于零;以及其中当检测到N个NOP指令的该连续序列时,暂停由该指令高速缓存撷取及执行指令。12.如权利要求11所述的方法,其中N的数值通过在该微处理器所执行的一软件而可编程。13.如权利要求11所述的方法,其中该硬件状态机响应检测到一子程序回传指令而开始计数该NOP指令。14.如权利要求11所述的方法,其中该硬件状态机响应检测到一非不动作(non-NOP)指令以开始计数该NOP指令。15.如权利要求11所述的方法,还包括:当检测到该NOP指令的该连续序列时,阻止该微处理器的一微程序代码。16.如权利要求11所述的方法,其中该NOP指令包括不改变该微处理器的一架构状态而不会影响到该条件标记寄存器及该堆栈索引寄存器的一个或两个指令。17.如权利要求11所述的方法,其中该NOP指令包括下列x86架构指令中的一个或多个:PUSHES、PUSHCS、PUSHSS,PUSHDS,PUSHregister、PUSHSP、PUSHA、WAIT、SAHF、REPNEprefix、CLD、STD、CLC、STC、CMC。18.如权利要求11所述的方法,其中该NOP指令包括一个或多个x86架构的多个多字节指令,其中该多字节指令的一直接字节为一单字节NOP指令。19.如权利要求11所述的方法,其中该NOP指令包括一个或多个x86架构的多个多字节指令,其中该多字节指令的一modRM字节为一单字节NOP指令。【文档编号】G06F9/30GK104199636SQ201410482567【公开日】2014年12月10日申请日期:2014年9月19日优先权日:2013年9月20日【发明者】泰瑞.派克斯申请人:威盛电子股份有限公司