我正在尝试考试,但我意识到我对TLB和数据缓存的工作方式感到困惑。
我知道TLB本质上是最近使用的物理地址的缓存。但是,我正在看教科书中的一个图表(如下所示),但我不知道其中发生了什么。我猜它突然分裂了物理地址,并用它来索引缓存。但是为什么它分别显示缓存和数据?为什么字节偏移量只是浮动?我很确定缓存也应该存储数据。我认为它的唯一目的不是确定其内部是否有命中或失误。
我为我的无知事先表示歉意,但是这本书几乎没有涵盖TLB的内容(只不过是一页纸),并且在解释TLB和缓存之间的关系方面做得不好。
我正在尝试考试,但我意识到我对TLB和数据缓存的工作方式感到困惑。
我知道TLB本质上是最近使用的物理地址的缓存。但是,我正在看教科书中的一个图表(如下所示),但我不知道其中发生了什么。我猜它突然分裂了物理地址,并用它来索引缓存。但是为什么它分别显示缓存和数据?为什么字节偏移量只是浮动?我很确定缓存也应该存储数据。我认为它的唯一目的不是确定其内部是否有命中或失误。
我为我的无知事先表示歉意,但是这本书几乎没有涵盖TLB的内容(只不过是一页纸),并且在解释TLB和缓存之间的关系方面做得不好。
Answers:
我想我看到你的困惑。TLB和数据缓存是两个单独的机制。它们都是某种类型的缓存,但是它们缓存不同的东西:
TLB是虚拟地址到物理地址查找的缓存。通过在页表中查找虚拟地址,页表提供了一种映射虚拟地址物理地址的方法。但是,在页表中进行查找的速度很慢(涉及2-3个内存负载)。如果处理器每次有任何指令访问内存时都必须执行此查找,则将导致速度显着下降。
因此,TLB充当此查找的专用缓存。TLB有几个TLB条目,其中每个TLB条目都包含一个虚拟地址及其对应的物理地址。
TLB使处理器可以非常快速地将虚拟地址转换为物理地址。如果一条指令要求处理器对(虚拟)地址进行某些内存操作,则处理器首先检查以查看TLB是否包含该虚拟地址的条目。如果是这样,那么这将称为TLB查找的“缓存命中”,并且由于TLB条目还包含转换后的物理地址,因此处理器立即知道要使用的物理地址。如果没有,那将是TLB查找的高速缓存未命中,并且处理器必须通过遍历页面表来费力地进行虚拟到物理的转换。(一旦完成该转换,它将在TLB中添加一个条目,以便该虚拟地址的未来转换将更快地进行。)
数据缓存是内存内容的缓存。主存储器使您可以指定一个物理地址并读取该物理地址上的值。但是,主内存很慢。如果每次都要进行任何内存操作时都必须转至主内存,那么处理器将非常慢。
因此,数据缓存充当内存读取的专用缓存。数据高速缓存具有一些高速缓存条目,其中每个高速缓存条目都包含一个物理地址和该地址处的内存值。
数据缓存使处理器可以非常快速地从内存中读取数据。当处理器想要读取某个(物理)地址的内存时,它首先检查数据缓存,以查看其是否包含该地址的缓存条目。如果是这样,这称为“高速缓存命中”(在数据高速缓存中),并且处理器可以立即使用存储在该高速缓存条目中的数据值,而无需联系主内存。如果不是,则为“高速缓存未命中”(用于数据高速缓存),并且处理器需要进入主存储器。(处理器从主内存接收到该地址处的值后,它将向数据高速缓存中添加一个高速缓存条目,以便尝试读取该地址的尝试将在数据高速缓存中命中。)
它们都是高速缓存,但是它们具有不同的用途。处理器对每个内存操作都使用这两种方法:首先使用TLB将虚拟地址转换为物理地址,然后检查数据缓存以加快读取该地址存储在内存中的值的过程。
有关更多详细信息,您可以阅读有关TLB的Wikipedia文章。如果您进行搜索,则在TLB和数据缓存上还有很多其他信息。我建议搜索“ TLB”和“ L1缓存”或“ L2缓存”(后两种是数据缓存)。
(供以后参考:我们希望您在问这里之前先对问题进行一些研究,并检查标准的Internet来源。如果可以在Wikipedia中找到答案,则您自己还没有做足够的研究。您可能已经做了如果您在提出问题之前先检查了Internet来源以了解有关TLB的信息,那么情况会更好。请参阅Stack Overflow用户的预期研究工作。研究技能-在整个职业生涯中对您来说都是很有价值的。)