0

我正在以一种简单的方式阅读 TLB 是如何工作的,但我不明白:

TLB 引用其表中的物理内存地址。它可能位于 CPU 和 CPU 缓存之间、CPU 缓存和主存储内存之间,或者位于多级缓存的各个级别之间。位置决定了缓存是使用物理寻址还是虚拟寻址。如果高速缓存被虚拟寻址,请求会直接从 CPU 发送到高速缓存,并且仅在高速缓存未命中时访问 TLB。如果缓存是物理寻址的,CPU 会对每个内存操作进行 TLB 查找,并将得到的物理地址发送到缓存。

摘要:当 TLB 位于 CPU 和 CPU 缓存之间时,它使用物理寻址,CPU 对每个内存操作进行 TLB 查找,然后将生成的物理地址发送到缓存。

我的问题:既然 CPU 处理虚拟地址,那么这个查询是如何执行的?

我不明白:CPU遇到一个虚拟地址-> CPU联系TLB,它是用物理地址寻址的-> ?? -> TLB 吐出另一个物理地址

TLB:

| Physical Address | Another Physical Address |

这对我来说完全没有意义

取自维基百科

4

3 回答 3

1

它在哪里说 TLB 是物理寻址的?
TLB当然是从虚拟到物理的,当缓存被物理寻址时,你会得到这个流程:内存单元在虚拟地址空间中运行(除了pagewalks和TLB维护)--> TLB翻译V->P-->缓存查找是使用物理地址完成的。

TLB:

| virt Address | Physical Address |

缓存:

| Physical Address |        Data           |

上面的部分只是说如果缓存是在这里物理寻址的,您需要在每次访问时进行 TLB 查找(甚至在您知道是否命中/未命中之前),而如果缓存是虚拟寻址的,您可以在翻译之前查找缓存,并且仅在您错过并需要转到内存/较低(物理寻址)缓存时才转到 TLB

于 2013-07-20T07:19:21.237 回答
0

根据我的说法,当缓存未命中时,CPU 将始终查找 TLB ... CPU 不会自己知道该地址是虚拟地址还是物理地址。因此 CPU ---> CPU 缓存 --->(如果缓存未命中)TLB--->(如果 TLB 未命中)--->辅助存储器

在获取页面时.. TLB 条目,CPU 缓存将使用这个最近的条目更新..

于 2013-03-14T11:23:35.417 回答
0

TLB 从 CPU 获取虚拟地址。该地址的位可以分为虚拟页号和虚拟页偏移量。

虚拟页面偏移量对应于物理页面偏移量。虚拟页码分为标签和索引。基于标签和索引,TLB 在它自己的缓存中检查它是什么物理页号,并假设它已经在 TLB 缓存中并标记为有效,它以物理页号作为缓存标签返回给缓存,并且物理页偏移量分为缓存索引和缓存偏移量。然后用于检查是否已经在该缓存中(如果没有,则从磁盘加载)并最终返回值。

我希望这是正确的并回答了您的问题,我目前也在学习 TLB 的主题,所以请不要将此答案视为完全正确。但是,它应该为您提供一个很好的概述。

于 2017-01-27T10:05:21.640 回答