[发明专利]复杂指令系统中TLBR内部例外的处理方法和处理器有效
申请号: | 200610088937.4 | 申请日: | 2006-07-27 |
公开(公告)号: | CN101114216A | 公开(公告)日: | 2008-01-30 |
发明(设计)人: | 龙国平;袁楠;范东睿 | 申请(专利权)人: | 中国科学院计算技术研究所 |
主分类号: | G06F9/30 | 分类号: | G06F9/30;G06F9/22 |
代理公司: | 中科专利商标代理有限责任公司 | 代理人: | 朱进桂 |
地址: | 100080北京*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 复杂 指令系统 tlbr 内部 例外 处理 方法 处理器 | ||
技术领域
本发明涉及微处理器设计,更具体地,涉及一种复杂指令系统中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,那么则会将该指令取消并重新尝试执行多次。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于中国科学院计算技术研究所,未经中国科学院计算技术研究所许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/200610088937.4/2.html,转载请声明来源钻瓜专利网。
- 上一篇:磁套筒喷砂后去尖点工艺
- 下一篇:基底与其布局的方法