TLB是否在指令获取流水线中使用

Is TLB used at all in the instruction fetching pipeline

指令获取流水线中是否使用了TLB?

此架构/微架构是否依赖?

通常,支持分页的处理器(通常包括排除执行权限的机制,即使不与读取权限分开)将访问 TLB 作为指令获取的一部分。

虚拟标记的指令缓存甚至不需要权限检查,只要在将块插入指令缓存时检查权限(这通常会涉及 TLB 访问,尽管权限缓存可以与虚拟标记的 L2 高速缓存;这包括预取到指令高速缓存中),权限域包含在虚拟标记中(通常与地址 space 标识符相同,这无论如何都有助于避免高速缓存刷新),以及系统软件确保在撤销执行权限时删除块(或者权限 domain/address space 标识符被重新用于不同的权限 domain/address space)。

(一般来说,虚拟标记的缓存不需要 翻译 后备缓冲区;权限映射的缓存就足够了,或者权限可以与标签一起缓存,并指示权限域。在访问内存之前,将使用 TLB,但缓存命中不需要翻译。权限缓存比翻译缓存更便宜,因为粒度可以更大,并且因为需要更少的位来表达权限信息。)

物理标记的指令缓存需要地址转换来确定命中,但是通过推测访问是命中(可能使用方式预测),这可能会大大延迟。命中确定甚至可以延迟到指令 commit/result 写回时,尽管早期处理通常更好。

由于指令访问通常具有很大的空间局部性,因此非常小的 TLB 可以提供不错的命中率,而相当快、较大的 back-up TLB 可以降低未命中成本。这样的 microTLB 可以通过过滤掉大多数指令访问来促进数据和指令访问之间共享 TLB。

显然,不支持分页的体系结构不会使用 TLB(尽管它可能使用内存保护单元来检查是否允许访问或使用不同的转换机制,例如添加可能带有边界的偏移量查看)。面向单地址的体系结构 space 操作系统可能会使用虚拟标记的缓存,因此仅在缓存未命中时访问 TLB。