TLB 结构和工作方式

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与Cache的关系 TLB(Translation Lookaside Buffer)Cache都属于计算机体系结构中的高速缓存组件,旨在提升系统的整体性能。然而两者功能不同,在内存管理中扮演着不同的角色。 #### 功能差异 TLB主要负责存储最近使用的页表项副本,用于加快虚拟地址到物理地址的转换过程[^1]。每当CPU尝试访问某个特定位置的数据时,会先通过TLB查找对应的映射关系;一旦匹配成功即可迅速定位目标数据的具体位置。相比之下,Cache则是用来临时保存从主存提取出来的常用或即将被频繁访问的数据块以及指令集,从而减少对较慢速RAM资源的需求频率并缩短等待时间[^2]。 #### 访问顺序 当程序发起一次访存请求时,系统通常遵循如下流程: - 首先查询TLB以完成地址变换; - 获取到有效的物理地址之后再转向Cache层寻找所需资料; - 若上述两步均未能命中,则最终不得不向更底层、速度也相对较慢的主要储存装置发出读写命令。 这种机制确保了即使是在多级架构下也能维持较高的效率水平,因为大多数情况下都能在前端就解决问题而不必深入后续环节。 ```python def memory_access(virtual_address): physical_address = tlb_lookup(virtual_address) if not physical_address: # 如果TLB未命中, 则需查询页表获得物理地址 physical_address = page_table_lookup(virtual_address) data = cache_lookup(physical_address) if not data: # 如果Cache未命中, 则需从主存加载数据 data = main_memory_load(physical_address) return data ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值