具有外部和内部指令集的数据处理系统的制作方法

文档序号:6416415阅读:181来源:国知局
专利名称:具有外部和内部指令集的数据处理系统的制作方法
技术领域
本发明涉及一种具有外部指令集和内部指令集的数据处理系统,例如,涉及到这样一种具有指令高速缓冲存储器的系统,所述系统特别地使用与软件或者硬件翻译器相组合的存储器来把处理器的外部可见指令集与在内部实现的指令集相分开。
从美国专利US-A-6,332,215可以获知,该专利提供了这样一种系统,在该系统之中,由指令翻译硬件把外部Java字节码翻译成内部的本机处理器指令。
从Intel公司生产的奔腾IV处理器的跟踪高速缓冲存储器机制可知,所述机制通过计算机代码的一组基本块来存储表示先前执行路径的数据,这样就使得可以容易地获知推测性跟踪,而不必单个地取出所组成的基本块并将其作为测量结果,从而增加了强流水线系统中的处理速度。将所述跟踪信息使用大小固定的行存储在常规的高速缓冲存储器中,所述行具有用于规定推测性跟踪结构的标记中的指针。正如将要看到的那样,本发明不是在传统的高速缓冲存储器结构之上构造的;它在标准的随机存取存储器结构上实现了一种瞬态高速缓冲存储器,所述瞬态高速缓冲存储器包括大小可变的块,这样就有助于更大的空间效率和更快的操作。
在Transmeta生产的微处理器中已知的是,提供了这样一种系统,在所述系统之中,软件用于把指令集从非本机指令集翻译成本机指令集,然后管理所述翻译以便在处理器上执行。
提供用于支持多个外部指令集的微处理器是众所周知的。这些微处理器的一个例子是ARM体系结构的微处理器,这种微处理器目前支持三种外部指令集,也就是ARM、Thumb和Java指令集。尽管希望能够扩展由特定微处理器所支持的不同指令集的数目,但是多种指令集趋向于把额外的复杂性引入译码器中,这样又对处理器的性能和功耗产生了不良影响。
从一个方面来看,本发明提供了一种用于处理数据的设备,所述设备包括执行核心,可操作来执行内部指令;
翻译缓冲器,可操作来存储一个或多个内部指令的多个内部指令块,所述内部指令块是一个或多个外部指令的各自外部指令块的动态翻译;再映射器,响应于对外部指令块的执行请求来识别在所述翻译缓冲器内存储的相应内部指令块,以致使得把来自于所述相应内部指令块的一个或多个内部指令提供给所述执行核心。
所述再映射器包含将先前遇到的外部块的起始地址确切地映射到它们在翻译缓冲器中对应的内部地址。块是相关的,但不局限于通常所熟知的基本块。一个块通常起始于这样一种指令,所述指令作为一个或多个分支指令的目标,并且通常由分支指令或者对块大小的某一预先规定的限制来终止。然而,正如将看到的那样,在一些情况下,一个块可以继续一组指令,所述指令包括来自于可能的多个基本块的指令,并且不必按照原程序的次序。
本发明认识到通过使用翻译缓冲器,可以有效地分摊在从一种指令集翻译为另一种指令集的过程所牵扯的、对所述处理器的性能和功耗所造成的不良影响,在所述翻译缓冲器中,存储通过翻译对应的外部指令块而动态形成的内部指令块,以致使得当要执行涉及相同部分的计算机程序时可以直接再次使用它们,而不必进一步翻译。实际生活中,许多计算机程序重复地执行相同的小计算机代码部分,并且据此一旦此计算机代码已被翻译,那么可以再次使用所述翻译,而不会招致与另一次翻译相关联的性能和功耗的额外开销。
尽管对外部指令的执行请求可以不同于外部指令块中的第一指令,但是更为优选的是存储尽可能少的覆盖式翻译,以便节省存储空间,并且由此,所述执行请求应该是外部指令块中的第一外部指令,来自于相应内部指令块的内部指令被提供给所述执行核心,所述执行核心从来自于内部指令块的第一内部指令开始。
尽管产生采用其他方式执行的实施例也是可能的,但是更加优选的是,因为内部指令块提供了至少由外部指令块规定的功能,所以内部指令块在功能上等效于各个相应的外部指令块。
当所述外部指令块和/或内部指令块的长度可变时,存储器的存储资源的灵活性和高效应用就得到了改进。
本发明特别适合于这样的系统,在该系统之中,外部指令和内部指令都属于可外部访问的指令集的一部分。
一种定界外部指令块的优选方式是安排成利用分支外部指令来终止外部指令块。在实际的程序执行中,此类定界与程序流的跳转能很好地匹配。
尽管可能的情况是并非所有内部指令块都可以利用分支指令加以终止,诸如在将单个外部指令块翻译为指令的多个内部帧的情况就是这样,但是优选的是,当利用分支外部指令定界外部指令块时,然后优选地,对应的内部指令块也利用分支内部指令加以终止。内部指令块可以具有导致不是所有内部指令块都是利用分支指令加以终止的最大大小。
为了便于将外部指令块快速映射到内部指令块,优选的是,再映射器存储映射数据,所述映射数据用于识别所要求的映射并指向所述翻译缓冲器内相应的内部指令块的地址。
优选的是,专用于所述翻译的存储器资源的管理是通过下列方式来实现的把翻译缓冲器划分为多个不同部分,使用一个这样的部分作为将新生成的映射数据和已翻译的内部指令写入到其中的当前活动部分,直到当前部分内没有可利用的空闲空间为止,然后在当前部分,清空预先填充的部分和相关联的再映射器部分,并且把新生成的数据指向该新清空的部分。
用于选择要使用的存储器资源的不同部分优选技术是循环算法。
有益的是,所述翻译缓冲器可以存储涉及内部指令块的更进一步信息,更具体来讲,存储外部指令边界控制数据,用于规定特定的内部指令是否对应于外部指令之间的边界,以便易于中断和异常处理等等。可用来控制并行执行的指令间依赖控制数据,在处理中断之时有用的提前终止控制数据,分支预测数据用于加速处理,下一块数据指向被预测将要使用的特定的下一内部指令块,以及可用于统计分析执行中的代码的代码剖析数据。可以但不是必须的是对于要存储在内部指令块中的外部指令地址而言,或者作为选择,外部PC值能够在运行时间被重构,所述重构是通过每当在内部指令块中看见外部指令边界位时增量计数器加1来实现的。
在本发明优选的实施例中,通过提供更新机制可以改善总体系统性能,所述更新机制可操作来响应于检测到的执行行为更新在翻译缓冲器内存储的数据。
由此,一旦已经动态地形成了翻译,就可以通过反馈机制来微调所述翻译,所述反馈机制用于根据所觉察到的行为来更新诸如分支预测等等的信息。
存储在所述翻译缓冲器中的指令翻译可以依照各种方式来实现,诸如采用相对简单且合理紧密匹配的指令集上下文中的硬件翻译器来实现,或者在对更复杂或者不怎么紧密匹配的指令集进行软件控制之下来实现。
优选的是,所述指令翻译器可以响应运行时间信息来产生解析的内部指令,例如解析的存储器地址,内联的异常处理器、模式转变和简化计算(例如在内部指令内作为立即操作数内联的诸如PC之类的的值)。
通过在翻译缓冲器中提供锁定区域可以改善总体系统性能,尤其改善处理中断等等的能力,其中可以将内部指令块置于所述锁定区域中,并且进行锁定,以便如果要求它们,则可持久地用于快速使用。锁定区域可以是可变长度的。
本发明优选实施例还认识到一旦已经做出翻译,那么当将其被驱逐出翻译缓冲器时,仍然有益的是,可以通过临时将其保存在挽救存储器(rescue memory)中来使用,所述挽救存储器可以比翻译缓冲器慢,但是比必须重新从头开始翻译要快并且更为高效。还能够将数据在适当时机移入挽救存储器中,对,可以确定的是它将很快被驱逐,但是将会在后来被使用。
有益的是,将正执行的程序分为内部指令块可以便于推测性执行,借此程序流中识别的指令块可以提早被推测性地执行,如此使得当程序流实际上到达它们时,可以快速地获得其结果。
作为一个例子,可以推测性地获取一个或多个外部指令块,并且将其识别为优良的候选,以便用于推测性调度,这是因为例如在它们执行期间存在多条流水线停滞并且在先前运行期间没有觉察到异常条件。这些块因此能(使用翻译器/译码器或者一些其他硬件或软件)被翻译为一组推测性内部块。如果当执行推测性块时,检测到错误推测,那么将推测性状态修补为与非推测性的状态一致,并且或许要求按照推测性的次序来重新执行指令。有益的是,可以在一些开始不知道外部PC值的情况下执行内部指令块的推测性执行。
在优选的实施例中,可以对异常做出特特殊规定。异常可以被认为是分支,所述分支没有在程序中被静态编码。处理异常的一种方式是执行异常处理器的翻译(其也许早已被翻译),执行它然后重新翻译来自引起下一分支指令的异常的指令的一个新的内部块,并且恢复执行。这在翻译缓冲器中很可能产生额外的重复。为了避免重新翻译,优选的实施例可以将一些位添加至返回地址堆栈,所述位用于规定发生异常的内部PC,然后允许微型体系结构在内部块中恢复执行。很有意义的是,内部和外部PC的微型体系结构细节不必暴露于所述体系结构。返回指针不必是返回地址堆栈的扩展。
上述考虑的事项还适用于中断为了处理内部块中的中断,所述系统可以如上所述来执行以便避免重新翻译在其中发生中断的块。
进一步优选的特征在于根据某种额外的标准,可以把这些块置于再映射器中的不同部分(和相关联的翻译缓冲器部分)。例如,核心代码可以被置于某些特定的范围,指向锁定代码的入口点置于另一个中,在另一个中不大可能需要翻译(诸如中断和异常重入块)等。
相对于锁定,待锁定的代码可以经历另外的预处理步骤,例如通过使用类似于链接器/装载器之类的软件来消除在再映射器中不必要的查找。此技术是通过在将整个代码图像置于翻译缓冲器之前访问所述整个代码图像,然后具有把所述程序直接重新定位至翻译缓冲器的存储空间的能力来进行工作的。其目标处于锁定代码中的分支可以被转化为特殊的内部分支指令,所述特殊的内部分支指令在不必经历在再映射器中进行查找的情况下、被直接分支到翻译缓冲器中的位置。依照该方式,只需要把指向锁定区域的外部入口点存储到再映射器中(例如中断向量从外部到内部地址的映射)。这使得锁定更灵活,并且更加具有确定性,这对于快速的中断处理是十分重要的。
进一步优选的特征是所述翻译缓冲器可以被映射到物理存储器的区域,以致使得在某些的模式下,在所述系统中,所述核心可以对它进行寻址,就像对任意其他的存储器寻址一样来进行。这对于上述提及的环境的例子是十分有用的,在该环境中所述中断处理器可以被直接寻址,甚至无需经历再映射器。对于需要把数据置于翻译缓冲器的方式的软件翻译器来说也同样有用。
进一步优选的特征提供了特殊的内部分支指令,该特殊的内部分支指令绕过再映射器以及其他执行翻译高速缓冲存储器专用操作(测试再映射器、管理条目等)的装置。这些指令只能用于所述系统的特权模式。
从另一方面看来,本发明提供了一种处理数据的方法,所述方法包括在翻译缓冲器中存储一个或多个内部指令的多个内部指令块,所述内部指令块是一个或多个外部指令的各自外部指令块的动态翻译;响应于对外部指令的执行请求,识别在所述翻译缓冲器内存储的相应内部指令块,其中所述外部指令位于所述外部指令块之一内;并且把所述相应内部指令块中的一个或多个内部指令提供给执行核心,所述执行核心可操作来执行内部指令。
所述翻译可以响应于指令预取来在适当时机加以执行。
现在将参照附图、仅仅通过举例来描述本发明的实施例,其中

图1示意性地举例说明了翻译高速缓冲存储器体系结构的高层视图;图2示意性地举例说明了影响程序执行中的控制流的再映射器的功用;图3示意性地举例说明了再映射器中的分段的存储;以及图4示意性地举例说明了使用相对上述附图所描述的翻译高速缓冲存储器的处理器中的取出部件。
所述ARM体系结构目前支持三种外部指令集ARM、Thumb以及Java。然而,许多指令集在译码器中引入了额外的复杂性,这又对处理器的性能以及功耗造成不良影响。处理此问题的方式之一是通过使用翻译高速缓冲存储器来分摊译码代价。
正如其名称暗含的,所述翻译高速缓冲存储器高速缓存翻译,而不必是原始指令。当高速缓冲存储器未命中时,将外部指令的基本块从存储系统取出,并且将它们的指令翻译为核心的内部(本机)指令集。外部可见的基本块中指令的数目不必与内部表示相同,这给微体系结构实现方式带来了灵活性,以便决定在硬件中直接支持哪些指令。此外,可以将内部指令的布局设计成在流水线中能够被容易地译码,并且还可以包括用于帮助执行的额外的信息。例如,所述翻译器可以示出两个相邻指令是独立的还是不独立的,并且在翻译高速缓冲存储器中照此标记它们。当这些指令被发出时,所述核心只需要看此信息的独立位即可,而不必在候选指令之间执行寄存器比较。还可以与翻译一起存储更一进步的信息,诸如外部指令边界,提前终止的可允许性。
图1示出了翻译高速缓冲存储器的抽象体系结构。它的五个主要部件是翻译器、翻译缓冲器、再映射器、取出部件以及更新器。所述翻译器将外部指令翻译为内部表示,并且在翻译缓冲器中分配存储帧。它还把基本块的及其翻译的起始地址之间的映射置于再映射器中。翻译器的操作单位是基本块,所述基本块被翻译为内部指令的一个或多个大小可变的帧。除已翻译的代码以外,尤其是帧可以包含分支预测和统计信息(这可以在运行时间被动态地更新)。在此示例性的实施例中,所述翻译缓冲器是较大的片上存储器阵列,用于存储已翻译的帧。根据实现方式,可以将其作为高速缓冲存储器来实现,用于高速缓存较大的外存储器,然而目前优选的实现方式是独立的片上存储器。所述取出缓冲器是翻译机制和执行核心之间的“粘接剂”。在执行期间,它保持目前执行帧的副本,以便可以依照顺向方式将顺序的指令提供给核心。当遇到分支指令时,所述取出部件将地址转送至再映射器。如果存在目标地址的映射,那么可以将新的帧直接从翻译缓冲器载入,否则所述翻译器必须首先被调用以便生成新的帧。根据取出部件的先进程度,它还可以包括各种分支预测器以及预取机制,以便分摊翻译代价并且减少分支负担。所述更新器位于执行流水线的末尾,并且其主要任务在于更新信息(诸如分支预测信息),所述信息与结束执行的最后帧相关联。在以后几节里研究与翻译高速缓冲存储器组织相关的设计权衡。
存在涉及翻译缓冲器的两个关键问题发现翻译的方式,以及如何为新翻译回收空间。这两个问题都是通过使用和组织再映射器来解决的。在每个帧的执行结束时访问所述再映射器,以便基于其外部地址找到下一帧的索引(在翻译缓冲器中)。图2示出了两个原始基本块(BB1和BB2)之间以及它们相应的翻译帧(XBB1和XBB2)之间的控制流。在一般的情况下,所述翻译器无法静态地确定分支的目的地地址将映射至哪一个帧,并且由此必须在再映射器中查出翻译的地址。这暗含以下内容·再映射器的大小以及关联性将上界制定为翻译缓冲器中有效的(即,可访问的)帧数目。
·由于再映射器中的冲突的未命中的原因,有效的翻译可能会变得不可访问。
·为了使帧无效,必须去除其在再映射器中对应的入口。从概念上讲,这涉及从翻译的索引到块的外部地址的反向映射。
另一涉及的问题是虽然在指令流中因存在分支指令而清楚地标记了基本块的结束,但是基本块的入口点不是显式的分支在一组连续指令的中间可能具有一个目标,所述连续指令在ISA中没有显式地加以标记。这意味着当遇到新的块时,将外部指令流翻译为内部指令流可以导致某种程度的重复,其中所述新的块早已被部分翻译了。存在两种主要方式来减少重复·在翻译处理期间,为每个指令检验它是否已经早已于再映射器中被映射,并且如果命中,那么结束所述帧。此技术会避免在翻译器最初遇到过较大块的较小子集情况下的重复,然而如果最初执行过较大的块时,此技术还不能够防止重复发生。
·在翻译缓冲器中保存从外部基本块结束地址到它们的索引的映射。此结构与再映射器相似,只是由基本块的结束而不是开始来做索引。在将新的帧置于所述翻译缓冲器以前,检查此结构以便查看是否存在具有相同终点的翻译。如果存在,那么新的和旧的翻译的重覆必须适当地一致,并且依照相关结构被更新。
虽然存在减少重复的方式,但是显然它不是需要解决的问题。使块中具有更多的指令对于性能而言是有好处的,这是因为这样可以增加分支之间顺序的指令的数目。此外,检测重复的代价可能会大于潜在的空间节省。
一种适合于缓冲器再用的简单策略是如果在缓冲器中没有剩余更多的空间,那么清空再映射器并且去除所有翻译。再映射器的大小是通过考虑可以置于翻译缓冲器的帧数来选择的,对于寻址所述翻译缓冲器,它们的平均大小和位数是有要求。作为一个例子,假定所述翻译将包含与外部程序中的指令数目相同的指令数目,假定一个基本块中平均有4条指令,并且假定所述翻译缓冲器可以依照小于16位的位数来编址。这暗指对于32K翻译缓冲器来说,要翻译为4K再映射器大小,人们需要2048个索引入口。
在所述翻译缓冲器中将有少许分配空间,其中所述分配空间是不能经由再映射器访问的。此情况是由于再映射器中冲突未命中而导致的结果。处理此问题的主要方式是增加其关联性。优选的是,所述再映射器需要至少4路关联,但是更高程度的关联性具有肯定的回应。
由于一个块具有多个入口点,造成少许字节将被多次翻译。尽管多次翻译造成翻译缓冲器中空间的浪费,但是要求用于减少重复的机制代价也是很高的(就存储器和控制器复杂性这二者而言)。例如,如上所述,可以通过保存块结束地址到其关联的帧翻译缓冲器大小的映射来检测重复。由于重复只占5%左右,故而此方案往往不会是空间十分有效。如果有用的缓冲器应用具有很高重要性,那么只翻译指令的简单技术就可用于减少重复,其中所述指令的地址不通过再映射器进行映射。然而,增加翻译复杂性以及经常进行再映射器的访问可以对翻译时间造成不良影响。
可以使用在充满之后清空全部翻译缓冲器的简单技术。虽然是接近最佳的,但是此技术适用于相对小的工作量和翻译缓冲器大小,并且简化翻译缓冲器中的数据和再映射器中的相应入口的同步。为了改进此技术,主要的问题是每当将一批帧驱逐出翻译缓冲器时,需要将相应的入口从再映射器中去除。实现此方法的简单方式是在逐出之前遍历所有帧,在再映射器中查找它们,然后使它们的入口无效。此外能够将新的帧分配到翻译缓冲器中,现有空间可能需要进行整理碎片。这是连续的并且是相对缓慢的过程,这个过程可以明显增加未命中的恶化。
图3举例说明了分段的再映射器,用于实现更快速并且更简单的空间回收。将所述翻译缓冲器依照再映射器中的相应段分为段,这些段被一起分配并且被释放。只要所述帧索引位于确定水印之下,那么就将帧置于由分配索引涉及的再映射器段中。如果所述帧的索引超出阈值,那么分配移到新的再映射器段上。如果该段早已包含有效的映射,那么首先将其清空。清空是通过使再映射器段中所有行同时无效来迅速完成的,并且将水印设定为翻译缓冲器中下一缓冲器范围的结束。优选的是,往往选择具有有效再映射器地址的最小工作集的再映射器段来再次使用。然而实际上,循环的再次使用策略会很好的工作,该策略具有简单实现的额外优点。虽然将新的映射每次分配到单个段中,但是在所有段中并行查找地址。然而,由于所述分配策略的原因,确保最多单个段包含所述数据。
虽然所述分段的再映射器简化了缓冲器的再次使用,但是这增加了与其相关联的其他代价。通过使单个大的高速缓冲存储器成为多个小的高速缓冲存储器,标记存储器的大小上升并且增加了各个段中的冲突未命中。经验表明即使对于较小的基准,由于减少了丢弃有用翻译的数目,故而在所导致的减少存储器通信量方面,分段的优点是十分明显的。另一方面,由于各个段中的额外冲突,增加了存储器的通信量。此问题可以通过增加再映射器中段的关联性或者段的数目来减轻。这可以很好起作用,原因在于使用更多段,相同数目的条目现在负责在缓冲器中保存较小范围的映射。增加段的数目是增加在每个段内关联性程度的可行的选择。
翻译高速缓冲存储器的重要优点在于它可以分摊译码代价。然而,如果在高速缓冲存储器中查找翻译的开销明显延长时,可能会削减这种优点。开销的主要成分是每当遇到分支时经由再映射器的额外访问。概念上,需要对每个分支采取以下步骤·分支目标地址计算。
·分支目标的虚拟至物理地址映射(TLB查找)。
·再映射器在所述高速缓冲存储器中查找以便找到已翻译的帧。
·翻译高速缓冲存储器访问。
·帧调整。
保守设计往往允许2至3个周期来实现这些步骤,然而在每个分支指令上引入的这种开销往往严重限制了处理器的性能。处理此问题的主要方式是推测性地预取帧,并且通过高速缓存再映射的帧索引来减少帧查找代价。
由于所述核心执行来自于不同于程序原始位置的位置的指令,例如来自于翻译缓冲器的指令,所以程序计数器(PC)的作用就需要加以阐明。从概念上讲,除贯穿原程序定序的PC以外,需要一个内部PC-在体系结构上未必可见,所述内部PC贯穿已翻译的指令定序。要使异常和分支语义可以正确工作,这两种程序计数器必须保持同步。实现此方法的一种方式是使用内部指令保持一点信息,所述信息用于规定该指令是外部指令边界还是不是。每当执行其外部指令边界位被设置的内部指令时,就对所述外部PC进行增量。
图4提供了取出部件以及与处理器其余部件交互的例子的更加详细的视图。在小型缓冲器中保存当前执行的帧,指令定序器从所述缓冲器中向执行核心发送单个指令(或者指令组)。与执行并行进行的是,所述分支预测器推测性地预取所述帧,并将它们置于预取缓冲器中,并且根据需要将它们提升到当前执行时隙中。
翻译高速缓冲存储器的一个重要方面在于可以把信息与每个基本块唯一地相关联。所述取出部件可以利用此存储器的一种方式是在帧首部中(分支目标)保存分支预测信息(两位的计数器和/或历史信息)和以下基本块的索引,并且由此消除在用于预测的数据之间的混淆。前一种技术减少预测之间的混淆,而后者减少需要访问的再映射器的次数。可以将简单的分支预测策略(其中1或2位的状态可用于分支预测)连同预测的下一帧的高速缓存索引以及最后错误预测帧的索引一起使用。依照此框架,第一状态位选择接下来将要执行两个帧的哪一个,第二状态位用于控制何时应该在两个帧之间切换预测。由此策略使用的状态量可以通过在首部中只保存已预测的帧索引并且增加再映射器查找而引入的错误预测等待时间来减少。一旦已经取出帧,就可以紧接着启动对后续帧的预取,这是因为当帧开始执行时就马上知道下一帧的预测。在测试中,每个帧中指令的平均数目,甚至是在双发出处理器上都是这样的,以致使得可能要花费2-3周期那么多的时间来完成预取而不停滞流水线。
由于内部和外部可见的ISA可以不同,故而必须小心以便每当发生异常时,暴露一致的机器状态。这意味着如果已经把单个外部指令映射成多个内部指令,那么只应当在外部指令边界上处理异常。此问题的一种解决方案是在翻译高速缓冲存储器中为每个指令保存额外的位,用于标记外部指令边界。所述额外且必要的位可以存储在帧首部中,或者作为标记存储在翻译缓冲器的每个字上。
异常和中断之间的重要区别在于异常是在内部产生的,而中断是因外部源产生的。为了处理异常,必须把执行回滚到上次的外部指令边界,而中断可以在当前指令已经结束执行之后再处理。为了保持优良的中断等待,这暗指外部和内部指令之间的翻译必须接近一对一。长等待时间但是可重新启动的一类指令可以被定义,以便易于大规模的翻译。然而,即使在第二种情况中,能够保证向前进行也是十分重要的。
翻译高速缓冲存储器的另一个问题是在中断或者异常处理器之后,如何恢复执行。问题是通常只对帧边界改变控制流,而无法把所述帧边界的要求强加到所有异常。处理异常返回的简单方式是创建新的入口点并且生成起始于该地址的新帧。然而,此策略在翻译缓冲器中会明显增加浪费的空间量,这是由于再次访问新的入口点是不太可能的(因为中断是外部的,相对于PC而言基本是随机事件)。更好的策略是使用额外的信息来扩充分支预测器的返回地址堆栈,所述地址堆栈可以在帧内的任意指令处恢复执行。当返回地址堆栈未命中时,所述处理器可以对所有翻译进行重新排序。
使用翻译高速缓冲存储器的主要模式是将外部基本块的连续指令再映射到已翻译帧中对应的连续指令集。为了保持确切的异常语义,并且为了易于进行单步调试,内部和外部的指令次序必须是相同的。翻译器的主要任务是再映射指令并且简化译码(下面将描述适合于执行动态调度的建议)。翻译器的重要需求之一是少许额外暂时寄存器的可用性,所述暂时寄存器用于保持已翻译指令之间的中间值。当外部指令映射至多个内部指令时,已翻译指令之间的通信将不会因局部结果而恶化有结构的状态,——需要这样一种方式,当遇到异常时,能够会滚到一致的状态。
翻译高速缓冲存储器还可以作为译码的指令高速缓冲存储器,用于保存信息的附加位,以便简化译码器在临界路径上的任务。例如,位字段的定序及其意思可以在内部改变,或者可以明确地标记连续指令之间的独立性,以便在执行流水线的过程中不需要采取寄存器比较。
虽然大多数的翻译和译码操作是由翻译部件处理,所述翻译部件采用硬件方式来实现,但是还可以采用软件方式来处理复杂的译码。当遇到复杂指令时,所述翻译部件可以抛出一个异常,该异常使得在核心上调用翻译异常处理器。应注意的是,除非推测性地取出翻译,或者所述执行流水线是乱序的,否则将不会与翻译器并发地来执行核心流水线。Java翻译是在软件中处理的最好选择。
翻译高速缓冲存储器的性能很大部分取决于外部和内部指令集在语义上的密切程度。然而,所述内部指令需要能够寻址比外部可用空间大得多的寄存器空间,并且需要消除操作模式的改变。
虽然对于大多数基本块来说,外部和内部指令之间存在一对一的对应关系,但是因为使用的少许简单的修改,所以按次序的核心可以利用无序执行的优点。所述思想如下·微体系结构监控所述执行并且标记这样的帧,这些帧具有一部分有意义的、与其相关联的流水线停滞。
·如果问题帧以很高的概率跟随其他特定帧的执行,并且在执行期间存在低的异常发生率,那么选择标记的帧集合来跟踪调度。
·与执行并发地在翻译部件中进行重调度。
·一旦已经生成了推测性帧,那么就将新帧的地址作为先前帧的预测目标地址。
·就像对待异常那样来处理错误的推测去除推测性状态并且从最后获知的优良的非推测性状态重启开始。
在未命中推测性之后恢复所设计的寄存器状态是容易的,这是由于在独立的寄存器范围内处理推测性寄存器写操作。然而,不存在用于推测性存储器访问的独立的存储区,由此必须小心操作以致使得推测性存储器写操作无法到达物理存储器。这可以借助于负载存储队列实现,其只将数据以非推测性的模式写入主存储器。
翻译的锁定区域也可以用于诸如OS内核、中断/执行处理程序等的代码,对于这些代码,要求快速并且一致的执行。
可以提供一个挽救存储器,在被确定为很可能再次需要的翻译(例如它们被经常执行)在被驱逐出主翻译缓冲器之前,可以被转送到所述挽救存储器中。
所述翻译器可以操作来预处理所述翻译,以便解析存储器地址,并且对于内联异常处理器,去除模式转变,并且基于运行时间信息简化计算。
可以为翻译系统管理提供特权模式指令,诸如绕过再映射器的分支指令以及再映射器管理指令。
权利要求
1.用于处理数据的设备,所述设备包括执行核心,可操作来执行内部指令;翻译缓冲器,可操作来存储一个或多个内部指令的多个内部指令块,所述内部指令块是一个或多个外部指令的各自外部指令块的动态翻译;再映射器,响应于对处于所述外部指令块之一内的外部指令的执行请求,来识别在所述翻译缓冲器内存储的相应内部指令块,以致使得将来自于所述相应内部指令块的一个或多个内部指令提供给所述执行核心。
2.如权利要求1所述的设备,其中所述执行请求是外部指令块内的第一外部指令,并且把来自于所述相应内部指令块的内部指令提供给所述执行核心,所述执行核心起始于来自于所述相应内部指令块的第一内部指令。
3.如权利要求1和2任一项所述的设备,其中内部指令块在功能上等效于各个相应的外部指令块。
4.如权利要求1、2和3的任一项所述的设备,其中所述外部指令块的长度可变。
5.如前述权利要求中任一项所述的设备,其中所述内部指令块的长度可变。
6.如前述权利要求中任一项所述的设备,其中所述内部指令是可外部访问的指令集的一部分。
7.如前述权利要求中任一项所述的设备,其中外部指令块用分支外部指令加以终止。
8.如前述权利要求中任一项所述的设备,其中内部指令块用分支内部指令加以终止。
9.如前述权利要求中任一项所述的设备,其中所述再映射器存储映射数据,所述映射数据用于识别外部指令块的地址和在所述翻译缓冲器内相应内部指令块地址之间的映射。
10.如权利要求9所述的设备,其中所述映射数据被存储在所述再映射器内的再映射器存储器中。
11.如权利要求10所述的设备,其中所述再映射器存储器被划分为多个再映射器存储器部分,每个再映射器存储器部分均与所述翻译缓冲器中各自翻译缓冲器部分相关联,所述再映射器可以操作这种所述再映射器存储器部分之一,所述再映射器存储器部分之一用于接收新生成的映射数据,直到所述相关联的翻译缓冲器部分不再具有空闲空间来接受新生成的映射数据,于是另一所述重新映射存储器部分被选择并且被清空,并且把新生成的映射数据存储在其中,新生成的内部指令块存储在相关联的翻译缓冲器部分中。
12.如权利要求11所述的设备,其中使用循环算法来选择所述另一再映射器存储器部分。
13.如前述权利要求中任一项所述的设备,其中所述翻译缓冲器还存储内部指令块内每个内部指令的外部指令边界控制数据,用于规定所述内部指令是否对应于外部指令之间的边界。
14.如前述权利要求中任一项所述的设备,其中所述翻译缓冲器还存储内部指令块内每个内部指令的指令独立性控制数据,用于规定在不依赖于所述内部指令块内先前指令的情况下是否执行所述内部指令。
15.如前述权利要求中任一项所述的设备,其中所述翻译缓冲器还存储内部指令块内每个内部指令的提前终止控制数据,用于规定在不破坏系统状态的情况下并在结束之前是否终止所述内部指令。
16.如前述权利要求中任一项所述的设备,其中所述翻译缓冲器还存储每个内部指令块的分支预测数据,用于规定在完成所述内部指令块的执行之时要获得的预测分支目标。
17.如前述权利要求中任一项所述的设备,其中所述翻译缓冲器还存储每个内部指令块的下一块数据,用于规定要加以执行的已预测的下一内部指令块在所述翻译缓冲器中的位置。
18.如前述权利要求中任一项所述的设备,其中所述翻译缓冲器还存储每个内部指令块的代码剖析数据,用于规定涉及所述内部指令块执行的统计量。
19.如权利要求16、17和18任一项所述的设备,包括更新器,可操作来响应于检测到的执行行为,更新在所述翻译缓冲器内存储的数据,所述数据与所存储的内部指令块相关。
20.如前述权利要求中任一项所述的设备,包括指令翻译器,可操作来将外部指令块翻译为内部指令块。
21.如权利要求20所述的设备,其中所述指令翻译器是以下翻译器之一基于硬件的指令翻译器;和基于软件的指令翻译器。
22.如前述权利要求中任一项所述的设备,其中所述翻译缓冲器包括锁定区域,其中可以将内部指令块放置在锁定存储器中。
23.如前述权利要求中任一项所述的设备,包括挽救存储器,在所述挽救存储器中至少临时存储在所述翻译缓冲器中先前存储的内部指令块,并且当在所述翻译缓冲器内查找所述内部指令块时,如果发生未命中,所述挽救存储器可用来访问。
24.如前述权利要求中任一项所述的设备,其中至少某一内部指令或者内部指令块是在程序执行流程中它们的位置前被推测性地执行的。
25.如权利要求20和21任一项所述的设备,其中当所述指令翻译器将外部指令块翻译为内部指令块时,所述指令翻译器对关于所述外部指令块的可用的运行时间信息做出响应。
26.如权利要求25所述的设备,其中所述指令翻译器可操作来进行以下一个或多个操作解析存储器地址;解析内联异常处理器;去除模式转变;和简化依赖于在运行时间上恒定或者基本上恒定的信息的计算。
27.如前述权利要求中任一项所述的设备,包括异常处理器,可操作来在执行内部指令块的内部指令时发生异常的情况下,触发对异常处理指令的执行并且存储异常返回指针,以便使得对所述内部指令块的执行能够在发生所述异常的点处恢复。
28.如前述权利要求中任一项所述的设备,包括中断处理器,可操作来在执行内部指令块的内部指令时发生中断的情况下,触发对中断处理指令的执行并且存储中断返回指针,以便使得对所述内部指令块的执行能够在发生所述异常的点处恢复。
29.如前述权利要求中任一项所述的设备,其中所述再映射器和翻译缓冲器具有多个部分,这些部分被分配来存储对应于不同类型的外部指令块的内部指令块。下一权利要求也涉及再映射器,但它们可以联合。
30.如权利要求10所述的设备,其中所述再映射器存储器具有多个部分,这些部分被分配来存储对应于不同类型的外部指令块的映射数据。
31.如权利要求22所述的设备,其中在锁定存储器中所放置的内部指令块被预处理,以便减少在所述再映射器中查找。
32.如前述权利要求中任一项所述的设备,其中所述翻译缓冲器被地址映射到物理存储器区域,所述物理存储器区域可以在程序控制下加以访问。
33.如前述权利要求中任一项所述的设备,其中绕过再映射器的分支内部指令可操作来执行分支操作,所述操作绕过所述再映射器的任何动作。
34.如前述权利要求中任一项所述的设备,其中一个或多个管理再映射器的内部指令可操作来对所述再映射器执行管理操作。
35.一种处理数据的方法,所述方法包括在翻译缓冲器中存储一个或多个内部指令的多个内部指令块,所述内部指令块是一个或多个外部指令的各自外部指令块的动态翻译;响应于对处于所述外部指令块之一内的外部指令的执行请求,来识别在所述翻译缓冲器内存储的相应内部指令块;并且把来自于所述相应内部指令块的一个或多个内部指令提供给执行核心,所述执行核心可操作以执行内部指令。
36.如权利要求35所述的方法,其中所述执行请求是外部指令块内的第一外部指令,并且把来自于所述相应内部指令块的内部指令提供给所述执行核心,所述执行核心起始于来自于所述相应内部指令块的第一内部指令。
37.如权利要求35和36任一项所述的方法,其中内部指令块在功能上等效于各个相应的外部指令块。
38.如权利要求35、36和37任一项所述的方法,其中所述外部指令块的长度可变。
39.如权利要求35至38任一项所述的方法,其中所述内部指令块的长度可变。
40.如权利要求35至39任一项所述的方法,其中所述内部指令是可外部访问指令集的一部分。
41.如权利要求35至40任一项所述的方法,其中外部指令块用分支外部指令加以终止。
42.如权利要求35至41任一项所述的方法,其中内部指令块用分支内部指令加以终止。
43.如权利要求35至42任一项所述的方法,包括存储映射数据,所述映射数据用于识别外部指令块的地址和在所述翻译缓冲器内相应内部指令块的地址之间的映射。
44.如权利要求43所述的方法,其中所述映射数据被存储在所述再映射器的存储器中。
45.如权利要求44所述的方法,其中所述再映射器存储器被划分为多个再映射器存储器部分,每个再映射器存储器部分均与所述翻译缓冲器中各自翻译缓冲器部分相关联,并且其中所述再映射器之一用于接收新生成的映射数据,直到所述相关联的翻译缓冲器部分不再具有空闲空间来接受新生成的映射数据,于是另一所述重新映射存储器部分被选择并且被清空,并且把新生成的映射数据存储在其中,新生成的内部指令块存储在相关联的翻译缓冲器部分中。
46.如权利要求45所述的方法,其中使用循环算法来选择所述另一再映射器存储器部分。
47.如权利要求35至46任一项所述的方法,其中所述翻译缓冲器还存储内部指令块内每个内部指令的外部指令边界控制数据,用于规定所述内部指令是否对应于外部指令之间的边界。
48.如权利要求35至47任一项所述的方法,其中所述翻译缓冲器还存储内部指令块内每个内部指令的指令独立性控制数据,用于规定在不依赖所述内部指令块中先前指令的情况下是否执行所述内部指令。
49.如权利要求35至48任一项所述的方法,其中所述翻译缓冲器还存储内部指令块内每个内部指令的提前终止控制数据,用于规定在不破坏系统状态的情况下并在结束之前是否终止所述内部指令。
50.如权利要求35至49任一项所述的方法,其中所述翻译缓冲器还存储每个内部指令块的分支预测数据,用于规定在完成所述内部指令块的执行之时要获得的预测分支目标。
51.如权利要求35至50任一项所述的方法,其中所述翻译缓冲器还存储每个内部指令块的下一块数据,用于规定要加以执行的预测下一内部指令块的翻译缓冲器中的位置。
52.如权利要求35至51任一项所述的方法,其中所述翻译缓冲器还存储每个内部指令块的代码剖析数据,用于规定涉及所述内部指令块的执行的统计量。
53.如权利要求50、51和52任一项所述的方法,包括响应于检测到的执行行为来更新存储在所述翻译缓冲器内的数据,其中所述数据与所存储的内部指令块相关。
54.如权利要求35至53任一项所述的方法,包括将外部指令块翻译为内部指令块。
55.如权利要求54所述的方法,其中所述翻译是以下之一通过基于硬件的指令翻译器来执行;和通过基于软件的指令翻译器来执行。
56.如权利要求35至55任一项所述的方法,其中所述翻译缓冲器包括锁定区域,其中可以将内部指令块放置在锁定存储器中。
57.如权利要求35至56任一项所述的方法,其中先前存储在所述翻译缓冲器中的内部指令块至少临时被存储在挽救存储器中,并且当在所述翻译缓冲器内查找所述内部指令块时,如果发生未命中,所述挽救存储器可用来访问。
58.如权利要求35至57任一项所述的方法,其中至少某一内部指令或者内部指令块是依照不同于外部程序流程的次序被推测性地调度的。
59.如权利要求35至58任一项所述的方法,其中当将外部指令块翻译为内部指令块时,所述翻译响对关于所述外部指令块的可用的运行时间信息做出响应。
60.如权利要求59所述的方法,其中所述翻译是以下操作的一个或多个解析存储器地址;解析内联异常处理器;去除模式转变;和简化依赖于在运行时间可用的信息的计算。
61.如权利要求35至60任一项所述的方法,其中在执行内部指令块的内部指令时发生异常的情况下,触发对异常处理指令的执行并且存储异常返回指针,以便使得对所述内部指令块的执行能够在发生所述异常的点处恢复。
62.如权利要求35至61任一项所述的方法,其中在执行内部指令块的内部指令时发生中断的情况下,触发对中断处理指令的执行并且存储中断返回指针,以便使得对所述内部指令块的执行能够在发生所述中断的点处恢复。
63.如权利要求35至62任一项所述的方法,其中所述翻译缓冲器具有多个部分,这些部分被分配来存储对应于不同类型的外部指令块的内部指令块。
64.如权利要求44所述的方法,其中所述再映射器存储器具有多个部分,这些部分被分配来存储对应于不同类型的外部指令块的映射数据。
65.如权利要求56所述的方法,其中在锁定存储器中所放置的内部指令块被预处理,以便减少在所述再映射器中查找。
66.如权利要求35至65任一项所述的方法,其中所述翻译缓冲器被地址映射到物理存储器区域,所述物理存储器区域可以在程序控制下加以访问。
67.如权利要求35至66任一项所述的方法,其中绕过再映射器的分支内部指令可操作来执行分支操作,所述操作绕过所述再映射器的任何动作。
68.如权利要求35至67任一项所述的方法,其中一个或多个管理再映射器的内部指令可操作来对所述再映射器执行管理操作。
全文摘要
提供了一种系统,所述系统包括执行核心,可操作来执行内部指令;翻译缓冲器,可操作来存储一个或多个内部指令的多个内部指令块,所述内部指令块是一个或多个外部指令的各自外部指令块的动态翻译;再映射器,响应于所述外部指令块之一内的外部指令的执行请求来识别存储在所述翻译缓冲器内的相应内部指令,以便可以把来自于所述相应内部指令块的一个或多个内部指令提供给所述执行核心。
文档编号G06F9/45GK1682181SQ03822171
公开日2005年10月12日 申请日期2003年5月15日 优先权日2002年9月20日
发明者K·弗劳特纳, A·C·罗斯 申请人:Arm有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1