作者:电信他爹_186 | 来源:互联网 | 2023-05-24 17:40
有个疑问,TLB是用来把虚拟地址转换成逻辑地址的缓存,在X86系统中,Cache都是以物理地址映射的,那么就是说CPU在访问Cache之前需要首先访问TLB?那这个效率是不是会很低?还是有
有个疑问,TLB是用来把虚拟地址转换成逻辑地址的缓存,在X86系统中,Cache都是以物理地址映射的,那么就是说CPU在访问Cache之前需要首先访问TLB?那这个效率是不是会很低?
还是有别的解释?
3 个解决方案
自己回答吧,并行访问,但访问cache一般需要TLB的访问结果
TLB本身也算是Cache吧,起码可以算Cache的一部分。
至于TLB带来多少CPU负担,是否降低效率,这个得从系统角度看待。
如果系统有很多Cache Miss,Memory负担很重,有TLB应该是能够提高系统效率的。
TLB 用于缓存一部分标签页表条目。TLB可介于 CPU 和 CPU缓存之间,或在 CPU 缓存和主存之间,这取决于缓存使用的是物理寻址或是虚拟寻址。如果缓存是虚拟寻址,寻址请求将会直接从 CPU 传送给缓存,然后从缓存访问所需的 TLB 条目。如果缓存使用物理寻址,CPU 会先对每一个存储器操作进行 TLB 查寻,并且将取得的物理地址传送给缓存。两种方法各有优缺点。
采用物理寻址的缓存的一种常见优化,是并行的进行 TLB 查寻和缓存的访问。所有虚拟地址的较低比特(例如,在虚拟内存系统中具有 4KB 标签页时,虚拟地址中较低的那 12 比特)代表的是所请求的地址在分页内部的地址偏移量(页内地址),且这些比特不会在虚拟地址转换到物理地址的过程中发生改变。访问CPU缓存的过程包含两步:使用一条索引去寻找CPU缓存的数据存储区中的相应条目,然后比较找到的CPU缓存条目的相应标记。如果缓存是用虚实地址转译过程中不变的页内地址来索引组织起来的,则可并行地执行TLB上虚实地址的较高比特(即分页的页间地址/页号)的转换与CPU缓存的“索引”操作。然后,从 TLB 获得的的物理地址的页号会传送给CPU缓存。CPU缓存会对页号标记进行比较,以决定此次访问是寻中或是缺失。它也有可能并行的进行 TLB 查寻和CPU缓存访问,即使CPU缓存必须使用某些可能会在地址转译后发生改变的比特;参阅缓存条目的地址转译一节,以取得关于虚拟寻址下缓存和 TLB 的进一步细节。