The Translation Lookaside Buffer

一、参考资料

ARM Cortex-A Series Programmer’s Guide for ARMv7-A

二、Translation Lookaside Buffer

Translation Lookaside Buffer(TLB)是MMU内最近执行的页面翻译的缓存。在存储器访问时,MMU首先检查翻译是否缓存在TLB中。如果请求的翻译可用,则TLB命中,并且TLB立即提供物理地址的翻译。如果TLB没有该地址的有效转换,则表示TLB未命中,需要进行外部转换表遍历。然后,这个新加载的翻译可以被缓存在TLB中以供可能的重用。

TLB的确切结构在ARM处理器的实现方式之间有所不同。下面是一个典型系统的描述,但各个实现可能与此不同。有一个或多个微TLB位于指令和数据缓存附近。具有命中微TLB的条目的地址不需要额外的内存查找,也不需要周期惩罚。然而,微TLB只有少量映射,通常在指令端有八个,在数据端有八。这是由更大的主TLB(通常为64个条目)支持的,但可能会有一些与在微TLB中未命中但在主TLB中命中的访问相关联的惩罚。图9.3显示了每个TLB条目如何包含物理和虚拟地址,以及Address Space ID中描述的属性(如内存类型、缓存策略和访问权限)和潜在的ASID值。

TLB与其他缓存类似,因此有一个TLB行替换策略,但这对用户来说实际上是透明的。如果转换表条目是有效的条目,则将整个页面或部分的虚拟地址、物理地址和其他属性存储为TLB条目。如果转换表条目无效,则不会更新TLB。ARM体系结构要求在TLB中只缓存有效的转换表描述符。

在这里插入图片描述

三、TLB coherency

当操作系统更改翻译表条目时,TLB可能包含过时的翻译信息。操作系统必须采取措施使TLB条目无效。有几种CP15操作可用于允许TLB全局失效或删除特定条目。

由于推测性指令获取和数据读取可能会导致转换表遍历,因此当有效的转换表条目发生更改时,必须使TLB无效。无效的转换表条目不能缓存在TLB中,因此可以在不失效的情况下进行更改。

Linux内核有许多使用这些CP15操作的函数,包括flush_tlb_all()和flush_tlib_range()。设备驱动程序通常不需要这样的功能。

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值