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

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

【技术实现步骤摘要】

本专利技术涉及微处理器设计,更具体地,涉及一种复杂指令系统中 TLBR内部例外的处理方法和处理器,能够对复杂指令系统中的页表进 行快速高效地替换。
技术介绍
实现复杂指令集(典型地,如X86指令集)的一种通常做法是将一 条复杂指令译码成一条或多条微码,然后通过微码发射部件乱序发射 到各个功能部件执行。微码被发射到功能部件的同时也被送到一个被 称为ROQ的队列中,通过该队列维护微码的顺序提交,保证精确例外和 程序的正确语义。图1给出了按照这种方式工作的CPU结构框图,本发 明的后续说明均基于图l给出的处理器基本结构。对图l中各部分简要描述如下取指和部分译码(101):从内存中取复杂指令流(如x86指令),对指令流进行恰当的长度划分和基本译码后送到微码生成部件产生正确的微码。为了提高处理性能,通常在这里还放置指令CACHE和指令TLB 部件,由于这些部件和本专利技术关系不大,在图中没有示出。微码生成部件(102):从取指和部分译码部件获得复杂指令(如 x86指令)的长度及部分译码信息,并据此产生正确的微码送到后续部 件发射执行。微码乱序发射部件(103):主要完成微码的发射。具体涉及的细 节包括从寄存器堆读取操作数,对寄存器进行重命名,检测后续功能 部件和ROQ队列是否可以容纳待发射的微码等等。同样地,出于性能考虑,在一些具体的实施例中通常将寄存器重命名、读取寄存器堆和微 码发射分别放在独立的模块中完成(图中没有具体示出)。ROQ队列(重排序缓冲队列)(104):维护微码的正确顺序,保证程序的正确语义和精确例外。ROQ是整个处理器的控制中心,当一条复杂指令的所有微码都执行完以后,即将该复杂指令提交。执行单元(105):典型的执行单元如访存单元、定点单元和浮点 单元等。执行单元用来完成微码要求的运算,然后将运算结果通过结果总线写回到ROQ中。访存微码在开始真正的访存之前,首先需要将程序员给出的线性 地址转换成相应的物理地址。在处理器设计中为了加速这一转换过程, 在硬件上提供一个快速查找表TLB,其中每个线性地址和一个物理地址 对应。处理器中TLB的典型结构如图2所示,每个TLB表项包括Valid(有 效位)、线性地址、物理地址和页表属性等域(1) Valid:如果该域为l,表示该TLB表项是有效的;反之该TLB 表项是无效的;(2) 线性地址程序员编程时使用的地址空间的地址。在访存时 用线性地址域索弓ITLB找到匹配的表项,然后从匹配的表项中取出物理 地址域,形成实际内存访问使用的物理地址;(3) 物理地址物理内存页的基地址,访问TLB时先用线性地址 索引出物理内存页的基地址,然后和页内偏移相加形成最后访存的物 理地址。在进行虚实地址变换的时候,由于TLB中保存的页表数目有限, 当在TLB中査询页表不命中的时候,需要进行TLB页表替换。现有的实 现复杂指令集,典型的如x86指令集的处理器中,实现TLB页表替换的 的方法如下当一条复杂指令的某条需要访存的微码在访存功能部件 中发现TLB MISS时,这一事件被功能部件作为一个特殊的内部例外记 录下来,然后随着这条访存微码通过结果总线被送到ROQ中。ROQ发现 这一条复杂指令发生了TLB MISS,于是往例外总线上送出刷流水线的 控制信号,这样流水线被刷空。微码生成部件开始发送针对TLB MISS 的TLB Refill例外处理的微码,待TLB MISS这一例外事件处理完成时 再重新对引起该内部例外的复杂指令取指、译码、发射和执行。上述处理方法在某些情况下会引起较高的性能损失。假定一条复 杂指令被翻译成图3所示的微码序列,图中的省略号表示略去了一些和本专利技术无关的微码。如果在执行前n-l个load操作的时候都TLB命中, 而在执行Load regn, addrn的时候引起TLB Ref ill内部例外(例如 addrn的对应的物理地址和addrl-addrn对应的物理地址不在同一内存 页面,而且是第一次访问addrn对应的物理页面,此时必定会引起TLB Miss),那么原来的处理方法将前面顺利做完的n-l条load微码取消, 待处理完load regn, addrn引起的TLB Ref ill内部例外以后重新取指 并执行该复杂指令。事实上既然前n-l个load己经能够顺利做完,只需 要在TLB Refill以后重新执行第n个load微码就可以了。更坏的情况 是,如果在执行一条复杂指令时发生多次TLB Miss,那么则会将该指 令取消并重新尝试执行多次。本专利技术提供的方法和处理器能基本解决上面的问题。
技术实现思路
本专利技术的目的是提出一种复杂指令系统中TLBR内部例外的处理 方法和处理器,能够对复杂指令系统中的页表进行快速高效地替换。为了实现上述目的,根据本专利技术,提出了一种复杂指令系统中 TLBR内部例外的处理方法,包括从内存中获取复杂指令流,对指令 流进行长度划分和基本译码;缓存指令流中的复杂指令及所述复杂指 令的长度及部分译码信息;根据缓存的复杂指令及所述复杂指令的长 度及部分译码信息,产生与复杂指令相对应的微码;以及在检测到一 微码在执行时发生TLBR内部例外时,保持例外以前己经完成的部分微 码的执行结果,并取消例外微码之后的所有微码,并进行TLB替换,在 TLB替换成功之后,重新生成发生例外的微码及其后面的微码并从发生 例外的微码处开始执行。优选地,所述进行TLB替换的步骤包括生成并执行用于TLB替换 的微码序列;如果用于TLB替换的微码序列中的微码发生TLBR内部例外 而形成嵌套时,先处理内层的TLBR内部例外。优选地,如果TLB替换不成功,则触发外部例外以便由系统程序 员处理。优选地,所述TLBR内部例外包括TLB MISS。根据本专利技术,还提出了一种复杂指令系统中TLBR内部例外的处理 器,包括取指和部分译码模块,用于从内存中获取复杂指令流,对 指令流进行长度划分和基本译码并传送到指令队列;指令队列,用于 缓存取指和部分译码模块传送来的己经取指和部分译码的复杂指令及 所述复杂指令的长度及部分译码信息;微码生成部件,根据从指令队 列获取的复杂指令及所述复杂指令的长度及部分译码信息,产生与复 杂指令相对应的微码并发送到微码执行单元;微码执行单元,在R0Q 队列的控制下,执行微码生成部件发送来的微码,以及R0Q队列,在检 测到一微码在微码执行单元中执行时发生TLBR内部例外时,保持例外 以前已经完成的部分微码的执行结果,并取消例外微码之后的所有微 码,并控制微码生成部件进行TLB替换,并在TLB替换成功之后,由微 码生成部件重新生成发生例外的微码及其后面的微码并发送到微码执 行单元执行。优选地,所述指令队列为先入先出队列,并由三个指针head—dec、 head—cmt和tai1—dec来维护,其中,指针head—dec指向正在译码的 复杂指令;指针head—cmt指向正在执行中但是还没有提交的复杂指 令;以及指针tail—dec指向队列中的第一个空项。附图说明通过参考以下结合图对所采用的优选实施例的详细描述,本专利技术的上述目的、优点和特征将变得显而易见,其中图l是示出了能够应用本专利技术的微处理器基本框图2是示出了TLB的典型结构示例的示意图3是示出了作为示例的本文档来自技高网
...

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

【技术特征摘要】
1、一种复杂指令系统中TLBR内部例外的处理方法,包括从内存中获取复杂指令流,对指令流进行长度划分和基本译码;缓存指令流中的复杂指令及所述复杂指令的长度及部分译码信息;根据缓存的复杂指令及所述复杂指令的长度及部分译码信息,产生与复杂指令相对应的微码;以及在检测到一微码在执行时发生TLBR内部例外时,保持例外以前已经完成的部分微码的执行结果,并取消例外微码之后的所有微码,并进行TLB替换,在TLB替换成功之后,重新生成发生例外的微码及其后面的微码并从发生例外的微码处开始执行。2、 根据权利要求l所述的方法,其特征在于所述进行TLB替换的步骤包括生成并执行用于TLB替换的微码序列;如果用于TLB替换的微码序列中的微码发生TLBR内部例外而形成 嵌套时,先处理内层的TLBR内部例外。3、 根据权利要求l所述的方法,其特征在于如果TLB替换不成功, 则触发外部例外以便由系统程序员处理。4、 根据权利要求l所述的方法,其特征在于所述TLBR内部例外包 括TLB MISS。5、 一种复杂指令系统中TLBR内部例外的处理器,包括 取指和部分译码模块,用于从内存中获取复杂指令流,对指令流进行长度划分和基本译码并传送到指令队列;指令队列,用于缓存取指和部分译码模块传送来的已经取指和部 分译码的复杂指令及所述复杂指令的长度及部分译码信息;微码生成部件,根...

【专利技术属性】
技术研发人员:龙国平袁楠范东睿
申请(专利权)人:中国科学院计算技术研究所
类型:发明
国别省市:11[中国|北京]

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1
相关领域技术
  • 暂无相关专利