首页> 中国专利> 复杂指令系统中TLBR内部例外的处理方法和处理器

复杂指令系统中TLBR内部例外的处理方法和处理器

摘要

根据本发明,提出了一种复杂指令系统中TLBR内部例外的处理方法,包括:从内存中获取复杂指令流,对指令流进行长度划分和基本译码;缓存指令流中的复杂指令及所述复杂指令的长度及部分译码信息;根据缓存的复杂指令及所述复杂指令的长度及部分译码信息,产生与复杂指令相对应的微码;以及在检测到一微码在执行时发生TLBR内部例外时,保持例外以前已经完成的部分微码的执行结果,并取消例外微码之后的所有微码,并进行TLB替换,在TLB替换成功之后,重新生成发生例外的微码及其后面的微码并从发生例外的微码处开始执行。

著录项

  • 公开/公告号CN101114216A

    专利类型发明专利

  • 公开/公告日2008-01-30

    原文格式PDF

  • 申请/专利权人 中国科学院计算技术研究所;

    申请/专利号CN200610088937.4

  • 发明设计人 龙国平;袁楠;范东睿;

    申请日2006-07-27

  • 分类号G06F9/30(20060101);G06F9/22(20060101);

  • 代理机构11021 中科专利商标代理有限责任公司;

  • 代理人朱进桂

  • 地址 100080 北京市海淀区中关村科学院南路6号

  • 入库时间 2023-12-17 19:41:21

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2009-07-29

    授权

    授权

  • 2008-03-19

    实质审查的生效

    实质审查的生效

  • 2008-01-30

    公开

    公开

说明书

技术领域

本发明涉及微处理器设计,更具体地,涉及一种复杂指令系统中TLBR内部例外的处理方法和处理器,能够对复杂指令系统中的页表进行快速高效地替换。

背景技术

实现复杂指令集(典型地,如X86指令集)的一种通常做法是将一条复杂指令译码成一条或多条微码,然后通过微码发射部件乱序发射到各个功能部件执行。微码被发射到功能部件的同时也被送到一个被称为ROQ的队列中,通过该队列维护微码的顺序提交,保证精确例外和程序的正确语义。图1给出了按照这种方式工作的CPU结构框图,本发明的后续说明均基于图1给出的处理器基本结构。

对图1中各部分简要描述如下:

取指和部分译码(101):从内存中取复杂指令流(如x86指令),对指令流进行恰当的长度划分和基本译码后送到微码生成部件产生正确的微码。为了提高处理性能,通常在这里还放置指令CACHE和指令TLB部件,由于这些部件和本发明关系不大,在图中没有示出。

微码生成部件(102):从取指和部分译码部件获得复杂指令(如x86指令)的长度及部分译码信息,并据此产生正确的微码送到后续部件发射执行。

微码乱序发射部件(103):主要完成微码的发射。具体涉及的细节包括从寄存器堆读取操作数,对寄存器进行重命名,检测后续功能部件和ROQ队列是否可以容纳待发射的微码等等。同样地,出于性能考虑,在一些具体的实施例中通常将寄存器重命名、读取寄存器堆和微码发射分别放在独立的模块中完成(图中没有具体示出)。

ROQ队列(重排序缓冲队列)(104):维护微码的正确顺序,保证程序的正确语义和精确例外。ROQ是整个处理器的控制中心,当一条复杂指令的所有微码都执行完以后,即将该复杂指令提交。

执行单元(105):典型的执行单元如访存单元、定点单元和浮点单元等。执行单元用来完成微码要求的运算,然后将运算结果通过结果总线写回到ROQ中。

访存微码在开始真正的访存之前,首先需要将程序员给出的线性地址转换成相应的物理地址。在处理器设计中为了加速这一转换过程,在硬件上提供一个快速查找表TLB,其中每个线性地址和一个物理地址对应。处理器中TLB的典型结构如图2所示,每个TLB表项包括Valid(有效位)、线性地址、物理地址和页表属性等域:

(1)Valid:如果该域为1,表示该TLB表项是有效的;反之该TLB表项是无效的;

(2)线性地址:程序员编程时使用的地址空间的地址。在访存时用线性地址域索引TLB找到匹配的表项,然后从匹配的表项中取出物理地址域,形成实际内存访问使用的物理地址;

(3)物理地址:物理内存页的基地址,访问TLB时先用线性地址索引出物理内存页的基地址,然后和页内偏移相加形成最后访存的物理地址。

在进行虚实地址变换的时候,由于TLB中保存的页表数目有限,当在TLB中查询页表不命中的时候,需要进行TLB页表替换。现有的实现复杂指令集,典型的如x86指令集的处理器中,实现TLB页表替换的的方法如下:当一条复杂指令的某条需要访存的微码在访存功能部件中发现TLB MISS时,这一事件被功能部件作为一个特殊的内部例外记录下来,然后随着这条访存微码通过结果总线被送到ROQ中。ROQ发现这一条复杂指令发生了TLB MISS,于是往例外总线上送出刷流水线的控制信号,这样流水线被刷空。微码生成部件开始发送针对TLB MISS的TLB Refill例外处理的微码,待TLB MISS这一例外事件处理完成时再重新对引起该内部例外的复杂指令取指、译码、发射和执行。

上述处理方法在某些情况下会引起较高的性能损失。假定一条复杂指令被翻译成图3所示的微码序列,图中的省略号表示略去了一些和本发明无关的微码。如果在执行前n-1个load操作的时候都TLB命中,而在执行Load regn,addrn的时候引起TLB Refill内部例外(例如addrn的对应的物理地址和addrl-addrn对应的物理地址不在同一内存页面,而且是第一次访问addrn对应的物理页面,此时必定会引起TLBMiss),那么原来的处理方法将前面顺利做完的n-1条load微码取消,待处理完load regn,addrn引起的TLB Refill内部例外以后重新取指并执行该复杂指令。事实上既然前n-1个load已经能够顺利做完,只需要在TLB Refill以后重新执行第n个load微码就可以了。更坏的情况是,如果在执行一条复杂指令时发生多次TLB Miss,那么则会将该指令取消并重新尝试执行多次。

本发明提供的方法和处理器能基本解决上面的问题。

发明内容

本发明的目的是提出一种复杂指令系统中TLBR内部例外的处理方法和处理器,能够对复杂指令系统中的页表进行快速高效地替换。

为了实现上述目的,根据本发明,提出了一种复杂指令系统中TLBR内部例外的处理方法,包括:从内存中获取复杂指令流,对指令流进行长度划分和基本译码;缓存指令流中的复杂指令及所述复杂指令的长度及部分译码信息;根据缓存的复杂指令及所述复杂指令的长度及部分译码信息,产生与复杂指令相对应的微码;以及在检测到一微码在执行时发生TLBR内部例外时,保持例外以前已经完成的部分微码的执行结果,并取消例外微码之后的所有微码,并进行TLB替换,在TLB替换成功之后,重新生成发生例外的微码及其后面的微码并从发生例外的微码处开始执行。

优选地,所述进行TLB替换的步骤包括:生成并执行用于TLB替换的微码序列;如果用于TLB替换的微码序列中的微码发生TLBR内部例外而形成嵌套时,先处理内层的TLBR内部例外。

优选地,如果TLB替换不成功,则触发外部例外以便由系统程序员处理。

优选地,所述TLBR内部例外包括TLB MISS。

根据本发明,还提出了一种复杂指令系统中TLBR内部例外的处理器,包括:取指和部分译码模块,用于从内存中获取复杂指令流,对指令流进行长度划分和基本译码并传送到指令队列;指令队列,用于缓存取指和部分译码模块传送来的已经取指和部分译码的复杂指令及所述复杂指令的长度及部分译码信息;微码生成部件,根据从指令队列获取的复杂指令及所述复杂指令的长度及部分译码信息,产生与复杂指令相对应的微码并发送到微码执行单元;微码执行单元,在ROQ队列的控制下,执行微码生成部件发送来的微码,以及ROQ队列,在检测到一微码在微码执行单元中执行时发生TLBR内部例外时,保持例外以前已经完成的部分微码的执行结果,并取消例外微码之后的所有微码,并控制微码生成部件进行TLB替换,并在TLB替换成功之后,由微码生成部件重新生成发生例外的微码及其后面的微码并发送到微码执行单元执行。

优选地,所述指令队列为先入先出队列,并由三个指针head_dec、head_cmt和tail_dec来维护,其中,指针head_dec指向正在译码的复杂指令;指针head_cmt指向正在执行中但是还没有提交的复杂指令;以及指针tail_dec指向队列中的第一个空项。

附图说明

通过参考以下结合图对所采用的优选实施例的详细描述,本发明的上述目的、优点和特征将变得显而易见,其中:

图1是示出了能够应用本发明的微处理器基本框图;

图2是示出了TLB的典型结构示例的示意图;

图3是示出了作为示例的某条复杂指令翻译后的微码序列的示意图;

图4是用于说明内部例外和外部例外执行路径的区别的示意图;

图5是示出了根据本发明实施例的复杂指令系统中页表替换的微处理器的方框图;

图6是示出了在图5的系统中指令队列的状态图示的示意图;

图7是示出了根据本发明实施例的用内部例外机制处理TLB页面替换的流程图;

图8是示出了可能引起TLBR内部例外的复杂指令的执行的流程图;以及

图9是示出了访存部件的基本结构的示意图。

具体实施方式

下面将参考附图来描述本发明的优选实施例。

一条复杂指令在执行的过程中可能引起多种例外,本发明中所有这些例外被定义为2类:(1)外部例外,即在执行一条复杂指令的过程中发生的例外导致程序执行路径的改变。例如如果一条复杂指令在访存时,对应的内存页表项为空,那么将触发page fault外部例外。在这种情况下,操作系统执行一个page fault外部例外处理程序,将要访问的内存页表项设置好,然后重新执行引起例外的复杂指令;(2)内部例外,即在执行一条复杂指令的过程中发生的例外事件不会引起程序执行路径的改变。比如一条复杂指令在访存时发生了TLB MISS,但是对应的内存页表项是有效的,这个时候可能引起一个TLBR内部例外。在内部例外发生时,ROQ通过例外总线信号告诉微码生成部件发送内部例外处理微码,将内存页表中的有效页表项调入TLB翻译后援缓冲器中,这样在重新执行引起TLB Refill例外的复杂访存指令时就能正常访存。这里,通常的内部例外包括内存页脏、内存依赖预测错误以及TLB重填等。

内部例外和外部例外的图示如图4所示,从图中可以更加清楚地看到它们的区别。外部例外引起了复杂指令(如x86指令)执行路径的改变,而内部例外则不会改变复杂代码(如x86代码)的执行路径。

基于内部例外机制的页表替换,其基本工作机制如图5所示。可以看出,图5和图1的主要区别在于取指和部分译码部件与微码产生部件之间插入了一个先入先出指令队列,增加这个队列是为了能缓存前端已经取指和部分译码完成的复杂指令。队列中每条复杂指令的生命周期从该复杂指令从取指和部分译码部件送入指令队列开始,到这条复杂指令的所有微码在功能部件中执行完毕并已经在ROQ中提交为止。这样,如果某条复杂指令在功能部件中发生了TLB MISS,在TLB MISS内部例外以前已经完成的部分微码的执行结果可以保留,只在完成了TLB替换后,继续做未完成的工作。这样就不需要因为发生TLB MISS内部例外而重新取该复杂指令,但依然可以知道该指令所需提供的译码信息。

该指令队列可以按照典型的先入先出循环队列组织,其基本工作方式如下:微码产生部件中的队列控制逻辑维护2个队列头指针(head_dec,head_cmt)和一个队列尾指针tail_dec。其中head_dec指向第一条等待译码的复杂指令,head_cmt指向正在功能部件中运算但是还没有提交的第一条复杂指令,该复杂指令已经被译码完毕,但是可能会因为内部例外而重新译码。微码产生部件每译码一条复杂指令就将head_dec指针移向下一条复杂指令;ROQ每提交一条复杂指令就将head_cmt指针移向队列中的下一条复杂指令。如果head_cmt指向的复杂指令在执行过程中发生内部例外(如TLB MISS),则ROQ通过例外总线通知微码产生部件重新对head_cmt指向的复杂指令译码,同时修改head_dec指针为head_cmt指针。如果队列中还有空项,tail_dec指针指向队列尾的第一个空项。取指和部分译码部件每处理完一条复杂指令,就将该部分译码的复杂指令放入指令队列尾,当队列满时则停止往指令队列中送复杂指令。运行过程中队列的典型状态如图6所示。

用内部例外机制进行页面替换的基本流程如图7所示。当用一个线性地址在TLB中索引时找不到与之对应的物理地址时,即表明发生了TLB MISS(翻译后援缓冲器不命中)(702)。此时,访存部件将该微码置上TLBR(翻译后援缓冲器重填)内部例外(即需要替换TLB表项),并通过结果总线将这一例外信息送入到ROQ中(703)。ROQ检测到该微码引起了TLB MISS,需要重新发射微码将内存中的页表项填回TLB后才能重新执行,于是将队列中发生例外的微码后面的所有微码取消(704)。之所以要取消,是因为后续的微码可能依赖于前面发生TLB MISS的微码的访存结果。随后,ROQ部件通过例外总线通知微码生成部件发送进行TLB表项替换操作的微码序列(705),该微码序列随后被发射部件送到各个功能部件执行(706)。需要注意的是,由于进行TLB表项替换的微码序列也需要访存,因此可能再度引发TLB MISS(707),因此会在TLBR内部例外中嵌套新的TLBR内部例外。当发生TLBR内部例外嵌套时,先处理最内层的TLBR内部例外,然后再处理往外一级的TLBR内部例外,最后直到最外层的TLBR内部例外得到处理。这样当处理TLBR内部例外的过程中发生TLBR内部例外时,需要回到步骤705,先处理最近发生的TLBR内部例外,当最里层的TLBR内部例外处理完以后,继续处理外层的TLBR内部例外。进行TLB表项替换的微码序列的主要功能,是查询和MISS的线性地址对应的内存页表中的页表项(709)。如果该页表项有效,就将其填入处理器的TLB中;反之,如果该页表项在内存页表中不存在或无效,则触发Page Fault外部例外(710),由系统程序员处理。如果发生Page Fault外部例外,则需要改变程序的执行路径,即跳转到Page Fault外部例外的处理程序去执行,这种情况下ROQ通知前端刷空指令队列中的所有指令,转到外部例外的处理程序入口取指执行(711)。如果在内存页表中找到了和MISS的线性地址对应的页表项,那么就将该页表项装入到处理器的TLB中,完成此次TLB表项替换。在TLB页面替换完成后,前端指令队列中的head_cmt指针仍然指向因TLBR内部例外而停顿的复杂指令,此时调整head_dec指针使之指向head_cmt所指向的复杂指令,重新译码、执行该队列中后续的所有指令。微码生成部件每成功译码一条复杂指令就修改head_dec指针使之指向未译码的下一条复杂指令;而head_cmt指针只有当其指向的复杂指令在ROQ中被提交时(即该复杂指令的所有微码都已经成功完成)才能指向下一条未提交的复杂指令,head_cmt先前指向的复杂指令所在队列项被释放,以用来存放新入队的复杂指令。当指令队列因为外部例外(如PageFault外部例外)被刷空时,head_dec指针和head_cmt指针复位。

图8给出了可能发生例外的复杂指令在使用了本发明的处理器中的执行流程。首先译码并第一次尝试执行该复杂指令(801),如果该复杂指令的微码在执行过程中没有任何例外(803),则所有微码正确完成并通过结果总线提交到ROQ中,ROQ随后删除已经顺利完成的复杂指令的所有微码,并通知前端指令队列控制逻辑修改head_cmt指针使之指向下一条未提交的复杂指令。但是如果该复杂指令的微码在功能部件中发生例外,那么需要分TLBR内部例外和其它例外两种情况处理。如果是其它例外(806),则很可能引起程序执行路径的改变,因此在处理完例外以后需要清除指令队列中的所有队列项,复位head_cmt、head_dec和tail_dec指针,重新取指并执行下一条复杂指令(809);如果发生了TLBR内部例外(807),那么在完成TLB表项的替换后需要修正head_dec指针使之指向发生内部例外的复杂指令(即head_cmt指针指向的复杂指令),微码生成逻辑随后尝试重新译码并执行该复杂指令(808),需要注意,在重新执行的过程中仍然可能发生例外。

前面已经提到前端引进的指令队列的基本操作以及基于内部例外机制的TLB页面替换流程。下面说明本发明如何使得引起TLBR内部例外的复杂指令在触发TLBR之前完成的工作可以保留,只在TLBR内部例外处理之后继续做该指令未完成的工作。首先需要提及,前端的微码生成部件对于操作复杂程度不同的复杂指令其生成微码的方法不同:对于简单的复杂指令只需要通过组合逻辑就能直接生成微码输出;而对于操作复杂的复杂指令,微码产生部件需要查询一个uRom来获得翻译后的微码输出。根据这一差别,下面分成操作简单的复杂指令和操作复杂的复杂指令两种情况进行讨论:

(1)对于操作简单的复杂指令(例如x86中MOV访存指令),微码生成部件直接生成对应于该复杂指令的微码。如果head_cmt指向的是一条简单复杂指令而且该指令在执行过程中发生了内部例外(如TLBMiss),那么微码生成部件重新译码head_cmt指针指向的复杂指令,然后送到后续的功能部件重新执行。这样一来,在再次执行的时候就不需要重新取指和进行部分译码,从而避免了因为重新取指而引起的较大访存延迟。虽然在发生TLBR内部例外以后仍然需要微码生成部件重新产生该复杂指令的微码,但是由于这种复杂指令操作简单,译码(直接通过组合逻辑完成)能以很高的效率完成,和取指时的访存延迟相比,重新译码的开销可以忽略不计。

(2)对于操作复杂的复杂指令,微码生成部件从uRom中查找该复杂指令的微码,将其取出后送到后续的发射模块。如果head_cmt指向的是一条操作复杂的复杂指令而且该指令在执行过程中发生了内部例外(如TLB Miss),则首先保存ROQ中该复杂指令引起例外的微码前面所有已经正确做完的微码状态,然后通过例外总线将发生例外的微码的uRomPC送到微码产生部件。微码产生部件在送完内部例外处理微码后,不需要重新译码head_cmt指向的复杂复杂指令,而是用uRomPC从uRom中索引,从引起内部例外的微码处送后续的微码。

本发明可以用在使用了TLB的实现复杂指令集的处理器中。具体实施可以参考图5实现,但是需要进一步作如下方面的考虑:

(1)需要在前端取指和译码部件与微码生成部件之间设置一个指令队列,用来存放尚未成功提交的复杂指令,对该队列的操作方式在发明内容部分已经进行过详细说明;

(2)需要对访存部件的结构进行恰当设计以便充分利用本专利中提出的内部例外机制。本发明中一种推荐的访存部件基本结构如图9所示,此结构可以作为基本功能部件集成到图1所示的处理器结构中。当访存微码,典型的如加载/存储从发射部件送到访存部件时,首先需要经过一级流水计算线性地址(901);然后用计算的线性地址索引数据cache(902),与此同时查DTLB,实现虚实地址变换(903);cache tag比较用来选择正确cacheline中的数据(904),同时可以进行一些必要的访存权限检查;最后,访存微码进入到访存队列开始访存调度(905)。如果在访问DTLB时发现TLB MISS,此时记录一个TLBR内部例外,待微码进入到访存队列后,通过结果总线送到ROQ中,由ROQ通知微码生成部件发送TLBR内部例外的处理微码。

尽管以上已经结合本发明的优选实施例示出了本发明,但是本领域的技术人员将会理解,在不脱离本发明的精神和范围的情况下,可以对本发明进行各种修改、替换和改变。因此,本发明不应由上述实施例来限定,而应由所附权利要求及其等价物来限定。

去获取专利,查看全文>

相似文献

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

客服邮箱:kefu@zhangqiaokeyan.com

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

  • 服务号