TLB 结构和工作方式

本文深入解析了TLB(Translation Lookaside Buffer)的工作原理及其在虚拟存储系统中的作用。TLB作为硬件缓存,用于加速虚拟地址到物理地址的转换过程,避免了频繁访问内存的开销。文章详细介绍了TLB的结构,包括虚页框号、物理页框号、页掩码等关键字段,以及有效位、脏位和缓存控制位等属性。同时,阐述了TLB的检索机制,当处理器遇到虚拟地址时,如何通过TLB快速查找对应的物理地址。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

TLB:

  • TLB 即 Translation Lookaside Buffer ,根据功能可以译为快表,直译可以翻译为旁路转换缓冲,也可以把它理解成页表缓冲。
  • 其中每一行都保存着一个由单个PTE(Page Table Entry,页表项)组成的块。
  • TLB里面存放的是一些页表文件(虚拟地址到物理地址的转换表),如果没有TLB,则每次取数据都需要两次访问内存,即查页表获得物理地址和取数据。
  • TLB 是一个阵列结构,是为虚拟地址 (VA) 到物理地址 (PA) 转换的硬件机构,其为虚拟存储的硬件基础。
  • 快表是单独的寄存器,页表是存在于主存。

TLB结构:

VPN2虚页框号始终为偶数
ASID 

证某 TLB 项仅供某进程使用

处理器检索 TLB 时,会以CPU0->Entry_Hi->ASID[7:0] 域为当前进程的 ASID 与 TLB 项中的相比较

PageMaks页掩码为支持可变页大小而设
PFN物理页框号=VPN2
FLags VDC物理页属性

每个物理页,还有一些控制 Flags

V: Valid,1 位,置 1 说明该页是有效的。
D: Dirty,1 位,置 1 表明该页中的数据被修改过
C: Cache,3 位,指示对该页所用的缓存算法,可以设置之,而让处理器不将该页数据缓
存于 Cache

G 

Globle 位

如置该位为 1 ,则说明该 TLB 项是全局的,可供任何进程使用,TLB 检索时处理器将忽略 ASID 的检查。

PFN物理页框号=VPN2+1
Flags VDC物理页属性

每个物理页,还有一些控制 Flags

V: Valid,1 位,置 1 说明该页是有效的。
D: Dirty,1 位,置 1 表明该页中的数据被修改过
C: Cache,3 位,指示对该页所用的缓存算法,可以设置之,而让处理器不将该页数据缓
存于 Cache

 

工作方式:

  1. 处理器取虚址的高位作 VPN ,直接将其与 TLB 的所有项同时比较
  2. 有匹配的项且该项有效 (V 为 1) 则直接输出 PFN ,
  3. 否则抛出 TLB Refill 异常,后则由 OS 负责在该异常处理里将位于内存的页表读出,并以随机方式写入 TLB,
  4. 尔后异常返回,重新执行一次访存指令,因此会重走一次 TLB。

 

相关的CPU0寄存器

  • EntryHi 寄存器
  • EntryLo0寄存器
  • EntryLo1寄存器
  • PageMask寄存器
  • Index寄存器
  • Random寄存器
  • Wired寄存器
  • Contex寄存器

相关指令:

tlbrTLB 读指令直接读取 Index 所指示的 TLB 项,并将其内容分别
置入 PageMask,EntryHi,EntryLo0 和 EntryLo1
tlbwi/tlbwr索引方式写 TLB/随机方式写 TLB输入的 TLB 数据,亦置于EntryHi,EntryLo0 和 EntryLo1。入口项由 Index 寄存器/Random 寄存器指定。
tlbpTLB 查询指令以 EntryHi[VPN2] 检索整个 TLB ,有匹配的项则继续检查该项之 ASID 是否与
EntryHi[ASID] 相等,若满足,则将该项的索引值(标号)写入 Index 。若无满足条件
的项,则将 Index 的 31 位置为 1

 

### TLB与TTW的区别及其在虚拟地址到物理地址转换中的作用 #### TLB(Translation Lookaside Buffer) TLB 是一种高速缓存,位于内存管理单元(MMU)中,专门用来加速虚拟地址到物理地址的转换过程。每当 CPU 需要访问内存时,都会先查询 TLB 是否已经保存了最近使用的虚拟地址到物理地址映射关系。如果命中(即找到了匹配的条目),则可以直接使用已缓存的结果而无需再次查找页表[^3]。这种机制显著减少了因多次访问慢速 DRAM 所带来的延迟问题。 #### TTW(Translate Through Walk) 相比之下,当 TLB 缓存未命中时,则触发所谓的 "page walk", 即 Translate Through Walk (TTW),这是指由硬件自动沿着多级页表结构逐步定位所需的实际物理帧号的过程。在此期间,系统必须依次读取各个级别上的页目录项直到抵达底层具体的页表入口为止,这通常涉及到若干次连续性的存储器请求操作因而相对耗时较长[^2][^3]。 因此可以总结如下几点主要差异: - 性能表现上来看,得益于提前加载常用映射信息的优势,借助有效配置后的TLBs能够极大程度缩短每次单独寻址所需要耗费的时间周期;然而一旦遇到缺失情况就得退回到较缓慢的传统方式也就是执行TTWs来获取未知的新配对资料。 - 使用频率方面,在正常工作负载条件下大部分情况下都可以依靠少量预设好的快速通道完成任务处理而不必频繁调用复杂低效手段重新计算每一个实例下的确切关联数值。 - 实现成本角度考虑,构建更大容量更高性能水平版本类型的TLB装置无疑增加了制造难度同时也抬高了整体设备售价预算门槛;与此同时维持现有基础框架不变单纯依赖软件算法优化调整或许不失为另一种折衷解决方案之一。 ```python def tlb_lookup(virtual_address): """模拟TLB查找功能""" # 假定这里存在一个字典表示我们的简单TLB内容模型 tlb_cache = {0x1000: 0xA000, 0x2000: 0xB000} if virtual_address in tlb_cache: return f"HIT! Physical address is {tlb_cache[virtual_address]}" else: return "MISS!" def ttw_process(virtual_address): """演示如何通过逐层遍历页表进行地址解析(假设仅有两级)""" pd_base_addr = 0xFFFFF000 # 初始设定顶级页目录基址 # 提取出相应的索引字段组成组合键值用于后续检索动作 pde_index = (virtual_address >> 22) & 0x3FF pte_index = (virtual_address >> 12) & 0x3FF # 开始按照既定规则沿链路向下深入探索直至终点处获得最终成果物 pde_content = read_physical_memory(pd_base_addr + pde_index*4) pfn_value = extract_page_frame_number(pde_content) real_paddr = (pfn_value << 12) | (virtual_address & 0xFFF) return f"Physical address after walking:{real_paddr}" ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值