把常用转换放在近处

处理器访问分页虚拟地址时,需要确定物理位置。TLB保存部分近期或常用的页映射;命中时可以直接取得转换及相关访问状态,减少再次遍历页表的工作。

连续读取同一页面里的多个元素,通常能够复用同一个转换。这体现空间局部性;反复访问近期使用的页面,则可能利用时间局部性。收益取决于实际访问模式和转换缓存能够覆盖的范围。

参考:[1]

未命中不代表页面不在内存

TLB未命中时,需要从页表等结构取得转换。有些架构由硬件遍历,有些由软件处理;如果页面和权限本来合适,补齐转换以后即可继续,并不需要把页面从磁盘调入。

TLB也不同于保存程序数据的普通缓存。一个保存映射,另一个保存指令或数据内容;失效原因与成本可能不同。解释内存性能时,要把转换访问、实际数据访问和页面调入分别观察。

参考:[1] [2]

缓存正确性需要失效协议

不同进程可能把同一虚拟页号映射到不同物理位置。切换地址空间时,系统需通过清除不适用项或地址空间标识等机制,防止下一任务误用前一任务的转换。

修改页表后,已有缓存项也可能过期。Linux提供按地址空间、范围或页面执行TLB失效的接口,使处理器看见新映射;多处理器上还需覆盖相关处理器。转换缓存的性能收益以这种一致性维护为前提。

参考:[1] [3]