TLB 设计
- [加入 TLB 和 Cache](#加入 TLB 和 Cache)
-
- [TLB 的设计](#TLB 的设计)
-
- [TLB 缺失](#TLB 缺失)
-
- [软件实现 Page Table Walk](#软件实现 Page Table Walk)
- [硬件实现 Page Table Walk](#硬件实现 Page Table Walk)
- 二者对比
- [TLB 替换](#TLB 替换)
-
- [香山的 TLB 替换策略](#香山的 TLB 替换策略)
- [TLB 写入](#TLB 写入)
- [对 TLB 的控制](#对 TLB 的控制)
-
- [Arm 风格的 tlb 管理](#Arm 风格的 tlb 管理)
- [MIPS 风格的 tlb 管理](#MIPS 风格的 tlb 管理)
加入 TLB 和 Cache
TLB 的设计
#问题
书中说:TLB 利用的是时间相关性,空间相关性没有明显的规律
揣测原因:
- 跨 4KB 页的连续数据访问不多
- Cache 的空间相关性是 cache line 之间,block 之间,block 之内
现代处理器经常采用二级 TLB
- 第一级 TLB 采用哈佛结构,I-TLB 和 D-TLB
- 第二级 TLB 采用全组连,指令和数据共用的方式
TLB 只会修改 Dirty (Store 指令) 和 Use (访问过) 位
注:TLB 访问和 Cache 访问的区别
- Cache 是组相联,TLB 是全相连,需要和所有项比较 Tag(所以 TLB 的大小小,否则访问延迟很大)
- TLB 访问是索引 tag,找到对应的 PFN
- Cache 访问是索引 index,拿出 Tag 去比对,再找到对应的数据
页面大小修改
如果采用 1MB 大小的页时,只需要比较 VA[31:20]作为 Tag 索引即可,VA[19:0]寻址页的内部
TLB 缺失
软件实现 Page Table Walk
发生 TLB 缺失时,将 TLB 缺失的虚拟地址保存到特殊寄存器中,产生 TLB 缺失类型异常。
异常处理程序利用虚拟地址去寻址物理内存的页表,如果再缺失,则报 page fault 异常
为了避免异常处理程序再出现 TLB 缺失时,会将该段程序放在不需要地址转换的区域(操作系统地址范围)
硬件实现 Page Table Walk
当发现 MMU 缺失时,MMU 利用 VA 去寻址物理内存的页表
二者对比
软件处理 TLB miss 时,需要将流水线中的全部指令清空,适合深度不深的处理器
如果 TLB 缺失
- 所需要的 PTE 在页表中,TLB 缺失处理大概需要十几个周期
- 发生 Page fault 时,TLB 缺失处理大概需要成百上千周期,和页面的替换算法、被替换的页面是否是 dirty ,此时软件和硬件差别不大
TLB 替换
随机替换算法:时钟计数器每拍+1,需要替换时则访问该计数器
香山的 TLB 替换策略
TLB 写入
页面从物理内存中替换到硬盘时,需要考虑其 dirty 位
该页面有以下几种情况
- 不在 dcache 中,不在 tlb 中
- 直接写回到硬盘即可
- 在 dcache 中,不在 tlb 中
- 需要核对 dcache 是否发生变化
- 在 dcache 中, 在 tlb 中
- 假定放入到 TLB 的 PTE 都需要被使用的,TLB 中记录的页不允许从物理内存里取出
这种设计大大降低 page fault 时替换难度
对 TLB 的控制
有时候出现下述情况,物理内存中页表的项被强制移出,但该页依然在 tlb 内
- 当一个进程结束时,释放指令、数据、堆栈
- 如果有 ASID,则可以将该进程对应内容在 tlb 内置为无效
- 没有则把所有的 I-tlb 和 D-tlb 都置为无效
- 当进程占用物理空间过大,会将不常使用的页写回硬盘中,这些页可以置为无效(比较少这么实现)
- 将某个 VPN 对应的表现置为无效
Arm 风格的 tlb 管理
硬件来实现
管理 TLB 的控制寄存器(通常使用协处理器 CP15 来实现)
- 将 TLB 中 VPN 匹配的 entry 项置为无效的控制寄存器,除了满足 VPN 相等,还需要
- Global 位无效,需要 ASID 也相等
- Global 位有效,不需要 ASID 比较
- 图片
- 将 TLB 中 ASID 匹配的所有表项置为无效的控制寄存器,但是 TLB 中 Global 位有效的表项不会受到影响
- 当一个进程退出时,则把该 ASID 所有内容都置为无效
- 图片
- 将 TLB 中所有未锁定 (unlocked) 状态的表项 (entry) 置为无效,那些锁定 (locked) 状态的表项则不会受到影响。
- 为了加快处理器中某些关键程序的执行时间, 可以 TLB 中的某些表项设为锁定状态, 这些内容将不会被替换掉, 这样保证了快速的地址转换。
MIPS 风格的 tlb 管理
TLB 缺失过程使用软件来实现