快表原理

TLB - translation lookaside buffer

快表,直译为旁路快表缓冲,也可以理解为页表缓冲,地址变换高速缓存。

由于页表存放在主存中,因此程序每次访存至少需要两次:一次访存获取物理地址,第二次访存才获得数据。提高访存性能的关键在于依靠页表的访问局部性。当一个转换的虚拟页号被使用时,它可能在不久的将来再次被使用到,。

TLB是一种高速缓存,内存管理硬件使用它来改善虚拟地址到物理地址的转换速度。当前所有的个人桌面,笔记本和服务器处理器都使用TLB来进行虚拟地址到物理地址的映射。使用TLB内核可以快速的找到虚拟地址指向物理地址,而不需要请求RAM内存获取虚拟地址到物理地址的映射关系。这与data cache和instruction caches有很大的相似之处。


TLB原理

当cpu要访问一个虚拟地址/线性地址时,CPU会首先根据虚拟地址的高20位(20是x86特定的,不同架构有不同的值)在TLB中查找。如果是表中没有相应的表项,称为TLB miss,需要通过访问慢速RAM中的页表计算出相应的物理地址。同时,物理地址被存放在一个TLB表项中,以后对同一线性地址的访问,直接从TLB表项中获取物理地址即可,称为TLB hit。

想像一下x86_32架构下没有TLB的存在时的情况,对线性地址的访问,首先从PGD中获取PTE(第一次内存访问),在PTE中获取页框地址(第二次内存访问),最后访问物理地址,总共需要3次RAM的访问。如果有TLB存在,并且TLB hit,那么只需要一次RAM访问即可。


TLB表项

TLB内部存放的基本单位是页表条目,对应着RAM中存放的页表条目。页表条目的大小固定不变的,所以TLB容量越大,所能存放的页表条目越多,TLB hit的几率也越大。但是TLB容量毕竟是有限的,因此RAM页表和TLB页表条目无法做到一一对应。因此CPU收到一个线性地址,那么必须快速做两个判断:

1 所需的也表示否已经缓存在TLB内部(TLB miss或者TLB hit)

2 所需的页表在TLB的哪个条目内

为了尽量减少CPU做出这些判断所需的时间,那么就必须在TLB页表条目和内存页表条目之间的对应方式做足功夫


全相连 - full associative

在这种组织方式下,TLB cache中的表项和线性地址之间没有任何关系,也就是说,一个TLB表项可以和任意线性地址的页表项关联。这种关联方式使得TLB表项空间的利用率最大。但是延迟也可能相当的大,因为每次CPU请求,TLB硬件都把线性地址和TLB的表项逐一比较,直到TLB hit或者所有TLB表项比较完成。特别是随着CPU缓存越来越大,需要比较大量的TLB表项,所以这种组织方式只适合小容量TLB

直接匹配

每一个线性地址块都可通过模运算对应到唯一的TLB表项,这样只需进行一次比较,降低了TLB内比较的延迟。但是这个方式产生冲突的几率非常高,导致TLB miss的发生,降低了命中率。

比如,我们假定TLB cache共包含16个表项,CPU顺序访问以下线性地址块:1, 17 , 1, 33。当CPU访问地址块1时,1 mod 16 = 1,TLB查看它的第一个页表项是否包含指定的线性地址块1,包含则命中,否则从RAM装入;然后CPU方位地址块17,17 mod 16 = 1,TLB发现它的第一个页表项对应的不是线性地址块17,TLB miss发生,TLB访问RAM把地址块17的页表项装入TLB;CPU接下来访问地址块1,此时又发生了miss,TLB只好访问RAM重新装入地址块1对应的页表项。因此在某些特定访问模式下,直接匹配的性能差到了极点

组相连 - set-associative

为了解决全相连内部比较效率低和直接匹配的冲突,引入了组相连。这种方式把所有的TLB表项分成多个组,每个线性地址块对应的不再是一个TLB表项,而是一个TLB表项组。CPU做地址转换时,首先计算线性地址块对应哪个TLB表项组,然后在这个TLB表项组顺序比对。按照组长度,我们可以称之为2路,4路,8路。

经过长期的工程实践,发现8路组相连是一个性能分界点。8路组相连的命中率几乎和全相连命中率几乎一样,超过8路,组内对比延迟带来的缺点就超过命中率提高带来的好处了。


这三种方式各有优缺点,组相连是个折衷的选择,适合大部分应用环境。当然针对不同的领域,也可以采用其他的cache组织形式。


TLB表项更新

TLB表项更新可以有TLB硬件自动发起,也可以有软件主动更新

1. TLB miss发生后,CPU从RAM获取页表项,会自动更新TLB表项

2. TLB中的表项在某些情况下是无效的,比如进程切换,更改内核页表等,此时CPU硬件不知道哪些TLB表项是无效的,只能由软件在这些场景下,刷新TLB。


在linux kernel软件层,提供了丰富的TLB表项刷新方法,但是不同的体系结构提供的硬件接口不同。比如x86_32仅提供了两种硬件接口来刷新TLB表项:

1. 向cr3寄存器写入值时,会导致处理器自动刷新非全局页的TLB表项

2. 在Pentium Pro以后,invlpg汇编指令用来无效指定线性地址的单个TLB表项无效
  • 9
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 万用表是一种常用的电子测量仪器,可以测量电压、电流、电阻等电学参数。它是由多个功能单元组成的,包括放大器、模数转换器、数字信号处理器等。这些单元通过一组复杂的电路板连接起来,并通过屏蔽和隔离处理来减少噪声和其他干扰。 PCB原理图是万用表电路板的设计图,它展示了各个电路元件的布局和连接方式。电路板通常由多层薄片制成,每一层都有许多金属线路来完成电路元件的布局和连接。这些金属线路通过孔洞连接在一起,形成一个完整的电路板。 万用表PCB原理图中的放大器单元负责放大信号,而模数转换器单元负责将模拟信号转换为数字信号。这些数字信号由数字信号处理器单元处理和解码,并最终显示在仪表面板上。除此之外,电路板上还包括电源单元和保护电路,用于确保万用表的安全运行。 总之,万用表是一款功能强大的电子测量仪器,其PCB原理图揭示了它复杂的内部设计和电路连接方式,使得仪器能够准确、快速地测量各种电学参数。 ### 回答2: 万用表(Multimeter)是一种广泛用于电路检测和测量的电子仪器,其运行原理基于欧姆定律和基尔霍夫定律。它可以在不同的测量范围内测量电压、电流和电阻,并且在检测到故障时会发出警告信号。 PCB原理图则是指电子电路板的设计图纸。它是一种通过符号和图表形式表示电子元件和连接方式的技术文件,为电子工程师提供设计、制造和维修电路板的准确指导。其中,电子元件被表示为符号,它们的连接则是通过线路链接。 万用表和PCB原理图之间存在互动关系。在电路板设计阶段,工程师需要测量电子元件的特性和性能以确认原理设计的准确性。同时,在生产流程中,使用万用表检查电路板中电子元件的连接情况,以确认其制造质量是否良好。 总之,万用表和PCB原理图都是电子工程师日常工作中必不可少的工具,它们协同工作可以为我们建造更可靠的电子设备提供重要的帮助。 ### 回答3: 万用表是一种测量电参数的通用仪器,可以用于测量电压、电流、电阻、电容、电感等电学量。它的工作原理是利用测电桥原理,利用电桥平衡时电流和电压的关系来测量电学参数。 PCB原理图是一种电路板的设计图纸,它展示了电路板上不同元件之间的连接方式和电路路径。对于设计一个包含万用表的电路板,需要先在PCB原理图上规划好万用表与其他元器件之间的连接方式和电路路径。设计完PCB原理图后,再将其转化为实际的电路板,并将万用表焊接在电路板上。 对于万用表的PCB原理图设计,需要考虑电路板的大小、元器件的布局、信号传输的稳定性等因素,以确保设计出的电路板能够稳定可靠地工作。设计时还需要按照万用表的工作特点和电路要求,选择合适的电容、电阻、电感等元器件,确保电路的正常运行。 总之,万用表PCB原理图的设计需要综合考虑电路要求、元器件选用、电路路径等各种因素,以确保设计出的电路板能够满足要求并稳定可靠地工作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值