转译后备缓冲区
转译后备缓冲区(英语:Translation Lookaside Buffer,首字母缩略字:TLB),在中国大陆被翻译为页表缓存、转址旁路缓存,为CPU的一种缓存,由内存管理单元用于改进虚拟位址到实体位址的转译速度。目前所有的桌上型及伺服器型处理器(如 x86)皆使用TLB。TLB具有固定数目的空间槽,用于存放将虚拟地址映射至物理地址的分页表条目。为典型的结合存储(content-addressable memory,首字母缩略字:CAM)。其搜寻键码为虚拟记忆体位址,其搜寻结果为实体位址。如果请求的虚拟位址在TLB中存在,CAM 将给出一个非常快速的匹配结果,之后就可以使用得到的物理地址存取记忆体。如果请求的虚拟位址不在 TLB 中,就会使用分页表进行虚实地址转换,而分页表的存取速度比TLB慢很多。有些系统允许分页表被交换到次级存储器,那么虚实地址转换可能要花非常长的时间。
概观
[编辑]TLB 用于缓存一部分分页表条目。TLB可介于CPU和 CPU缓存之间,或在CPU、缓存和主记忆体之间,这取决于缓存使用的是物理寻址或是虚拟寻址。如果缓存是虚拟定址,定址请求将会直接从 CPU 传送给缓存,然后从缓存访问所需的 TLB 条目。如果缓存使用物理定址,CPU 会先对每一个记忆体操作进行TLB查寻,并且将取得的物理地址传送给缓存。两种方法各有优缺点。
采用物理寻址的缓存的一种常见优化,是并行的进行 TLB 查寻和缓存的存取。所有虚拟位址的较低位元(例如,在虚拟内存系统中具有 4KB 分页时,虚拟位址中较低的那 12 位元)代表的是所请求的位址在分页内部的地址偏移量(页内地址),且这些位元不会在虚拟地址转换到物理地址的过程中发生改变。访问CPU缓存的过程包含两步:使用一条索引去寻找CPU缓存的资料储存区中的相应条目,然后比较找到的CPU缓存条目的相应标记。如果缓存是用虚实地址转译过程中不变的页内地址来索引组织起来的,则可并行地执行TLB上虚实地址的较高位元(即分页的页间地址/页号)的转换与CPU缓存的“索引”操作。然后,从 TLB 获得的的物理地址的页号会传送给CPU缓存。CPU缓存会对页号标记进行比较,以决定此次存取是寻中或是缺失。它也有可能并行的进行 TLB 查寻和CPU缓存存取,即使CPU缓存必须使用某些可能会在位址转译后发生改变的位元;参阅缓存条目的地址翻译一节,以取得关于虚拟定址下缓存和 TLB 的进一步细节。
TLB 不命中
[编辑]两种在现代体系结构中常用的解决 TLB 不命中的方案:
- 硬体式 TLB 管理,CPU 自行遍历分页表,查看是否存在包含指定的虚拟位址的有效分页表条目。如果存在这样的分页表条目,就把此分页表条目存入 TLB ,并重新执行 TLB 访问,而此次访问肯定会寻中,程式可正常执行。如果 CPU 在分页表中不能找到包含指定的虚拟位址有效条目,就会发生分页错误异常,作业系统必须处理这个异常。处理分页错误通常是把被请求的数据载入物理记忆体中,并在分页表中建立将出错的虚拟位址映射到正确的物理位址的相应条目,并重新启动程式(详见分页错误)。
- 软体管理式 TLB,TLB 不命中时会产生“TLB 失误”异常,且作业系统遍历分页表,以软体方式进行虚实地址转译。然后作业系统将分页表中响应的条目载入 TLB 中,然后从引起 TLB 失误的指令处重新启动程式。如同硬体式 TLB 管理,如果作业系统在分页表中不能找到有效的虚实地址转译条目,就会发生分页错误,作业系统必须进行相应的处理。
典型的 TLB
[编辑]- 容量:12 - 4,096 分页表条目
- 寻中时间:0.5 - 1 时脉周期
- 不命中代价:10 - 30 时脉周期
- 不命中率: 0.01% - 3%
假如在TLB 寻找需要 1 个时脉周期,而若在TLB找不到(miss hit)需要额外花 30 个时脉周期去寻找,而且miss hit的机率是 1%,则有效的记忆体访问周期的平均值是 个时脉周期/每一记忆体存取。
指令与数据可以分别使用不同的TLB ,即Instruction TLB (ITLB)与 Data TLB (DTLB),或者指令与数据使用统一的TLB,即Unified TLB (UTLB),再或者使用分块的TLB (BTLB)。
上下文切换
[编辑]在上下文切换(context switch)部分 TLB 条目可能会失效,例如先前执行的进程已访问过一个页面,但是将要执行的进程尚未访问此页面。最简单的策略是清出整个 TLB。较新的 CPU 已有更多有效的策略;例如在 Alpha EV6 中,每一个 TLB 条目会有一个“位址空间号码”(address space number,ASN)的标记,而且只有符合目前工作的 ASN 的 TLB 条目才会被视为有效。
AMD Phenom
[编辑]AMD Phenom CPU的B2版本存在一个TLB问题。如果改以软体方式解决这个问题(如BIOS更新),这将会损失10-30%的效能。为此,AMD另外推出B3版本的Phenom处理器,在硬体电路上修正此问题,克服了B2版本Phenom处理器效能减少的问题。
参考
[编辑]- Virtual Memory in the IA-64 Kernel > Translation Lookaside Buffer (页面存档备份,存于互联网档案馆)
- Virtual Translation Lookaside Buffer[永久失效链接]
外部链接
[编辑]- 记忆体管理/分页架构 (页面存档备份,存于互联网档案馆)
- 处理器的存储子系统(三)-- 页表和TLB (页面存档备份,存于互联网档案馆)
- 处理器的存储子系统(一)--概述 (页面存档备份,存于互联网档案馆)
参阅
[编辑]