CPU Study - TLB

参考来源:《超标量处理器设计》—— 姚永斌

TLB

对于二级页表需要访问两次物理内存才能得到虚拟内存对应的物理地址(一二级页表各一次访问)。
为加快访问速度,参考cache设计,将页表中最近使用的PTE(Page Table Entry)进行缓存,缓存PTE的部件就是TLB(Translation Lookaside Buffer) 。
不同于Cache,TLB只有时间相关性(最近访问的页面,接下来也有可能被访问),却没有空间相关性(存在程序跳转其他页的行为),因此类似于Pre-fetch的预取行为并不适用TLB。
现代处理器中大多数采用多级TLB,类似于二级TLB:第一级采用全相联哈佛结构(I-TLB & D-TLB);第二级采用组相联的指令数据共用。
与Cache类似,TLB也有valid位表示是否命中,一般TLB miss后有如下两种情况:
1、页表中PTE有效,直接返回对应的物理地址进行寻址;同时将此PTE写回到TLB。
2、页表中PTE无效,此页之前未被使用或者被换出,产生Page Fault异常,需要操作系统处理生成对应Page 页信息,将物理内存首地址存入PTE并同步到TLB。
采用全相联的TLB也有tag,保存VPN信息用来匹配。
TLB
对于TLB,映射的页面越大,对于程序来说,命中后的有效可用范围越大,越能避免频繁地替换页面信息。
但是也容易产生更多的碎片(程序用不到这么大的页面,造成未使用空间的浪费)。
并且Page Fault时,需要访问下级存储器更多的空间范围,替换更大范围地页面信息,导致替换时间增加。
因此现代处理器中开始支持大小可变的页面,由操作系统管理。
Pagemask指定页面大小

TLB Miss

TLB Miss场景:
1、物理内存中没有对应的PTE,所以TLB也没有。
2、此PTE存在物理内存中,但是还未放入TLB。
3、此PTE曾经存在过TLB,但是被替换出,目前存在物理内存中。

Page Table Walk - Software
发生TLB Miss后,硬件存储miss virtual address到一个特殊寄存器,并产生一个TLB Miss异常,flush流水线中的指令。
异常处理程序通过寄存器中的address寻找物理内存中的PTE,写回到TLB,并重新执行流水线。
这段异常处理程序通常存放在一个不需要进行地址转换的操作系统区域,避免执行中再次发生TLB Miss。
软件处理TLB Miss

Page Table Walk - Hardware
由MMU完成,TLB Miss时MMU自动寻址物理内存中的PTE,并暂停流水线,TLB填充完毕后重新恢复。
如果发现Page Fault(物理内存无此PTE),则额外产生异常由操作系统处理完成页表更新。
软硬件处理TLB对比
硬件方案无需回复流水线,在流水线较深的场景下,效率更高。

TLB替换
理论上Cache的替换算法均适用于TLB,但是LRU或者Random的替换方案设计复杂度较高。
所以目前均采用通过一个一直运转的计数器(如果TLB表项为128,则计数器width为7),替换时直接替换当前计数值即可。

TLB写入

当一个页面从磁盘移入物理内存,操作系统需要确定此页面信息是否被修改过,保持一致性。
在页面替换时,通过PTE dirty bit确认是否需要采用写回方案,还是直接覆盖。
采用TLB后,则会优先修改TLB Use/Dirty Bit,为防止出现TLB被修改后,物理内存对应的PTE却已经被替换的问题。
在操作系统中,TLB对应的物理内存PTE均不会被替换(默认都是需要一直使用的)。
因此在Page Fault产生时,如果替换的PTE dirty bit为true,则需要先写回磁盘再进行替换。
当TLB miss时,如果TLB已经满了,需要替换的TLB也是dirty,同时此物理内存存储内容也不是最新的(最新的改动存在Cache)。
就需要操作系统把D-Cache内容写回物理内存,完成Data一致性维护后再进行替换。

TLB控制

操作系统会在某些场景下抹去页表的映射关系,TLB也会受到影响:
1、一个进程结束时,指令(code)数据(data)栈(stack)所占据的页表信息会变为无效。同时,I-TLB中的指令(code)以及D-TLB中的数据(data)栈(stack)对应的PTE信息仍然存在,所以需要操作系统根据ASID(进程编号)将对应的TLB置为无效,如果没有ASID就需要将整个TLB置为无效。
2、一个进程占用物理内存过大时,操作系统会将进程中一部分不常用的Page 页信息写回硬盘,这些页PTE以及TLB均需要置为无效(一般会尽量避免TLB中内容置为无效)。
因此对于I-TLB和D-TLB的无效化操作通常可以定义为如下三类:

  • TLB所有表项置为无效
  • TLB某个ASID对应的表项均置为无效
  • TLB某个VPN对应的表项置为无效

关于TLB管理,ARM和MIPS有着不同的方案:

ARM
使用系统控制协处理器CP15配合控制TLB

  1. VPN匹配表项置为无效时,确认global bit是否有效,无效则需要ASID也相等。
    VPN Controlled

  2. ASID匹配表项置为无效时,使用如下寄存器,global bit有效表项不受影响。
    ASID Controlled

  3. TLB所有未锁定(unlock)表项置为无效,锁定(locked)表项不受影响(锁定内容不会被替换)。

MIPS
定义了专门操作TLB的指令。
Commands to control TLB

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值