什么是TLB,为什么需要TLB

由于页表保存在内存中,MMU每次地址翻译都需要访存查表。这样带来了时间开销。

为了加速地址翻译,MMU内引进了转址旁路缓存(Translation Lookaside Buffer, TLB,也叫快表)用来缓存虚拟地址到物理地址的映射。

之所以可以用TLB加速翻译,是因为局部性原理。其实每个缓存能起作用都是因为局部性原理。

TLB原理

TLB中缓存了虚拟页号到物理页号的映射。

TLB内部也采用了分层的架构,分为L1、L2两层。L1分为数据、指令TLB,L2不区分数据和指令。

TLB的容量是非常有限的。AArch64 Cortex-A72 CPU每个核心只有约1000条缓存项。

一致性问题

TLB的一致性问题在于,进程的虚拟地址空间是独立的,如果A和B两个进程使用了相同的虚拟地址(偏移量),则在相互切换时会翻译错误。因此在切换进程时需要刷新TLB,或者采用给进程打标签等办法。