TLB和数据缓存如何工作?


15

我正在尝试考试,但我意识到我对TLB和数据缓存的工作方式感到困惑。

我知道TLB本质上是最近使用的物理地址的缓存。但是,我正在看教科书中的一个图表(如下所示),但我不知道其中发生了什么。我猜它突然分裂了物理地址,并用它来索引缓存。但是为什么它分别显示缓存和数据?为什么字节偏移量只是浮动?我很确定缓存也应该存储数据。我认为它的唯一目的不是确定其内部是否有命中或失误。

我为我的无知事先表示歉意,但是这本书几乎没有涵盖TLB的内容(只不过是一页纸),并且在解释TLB和缓存之间的关系方面做得不好。

数字


这个问题太长了。您可以从中提取一个狭窄的特定问题,然后编辑您的问题以将其缩小为单个特定问题吗?提出一个好问题的一部分涉及仔细考虑什么是您需要了解的最低限度的本质,并且仅包括与该问题相关且必不可少的内容。例如,如果您对TLB的工作方式有一个特定的问题,而不是抛弃所有这些问题,那么如何尝试对有关TLB的一个狭craft的问题构架呢?
DW

好吧,我的意图是表明我对这个问题已经了解了,因为大多数在堆栈交换中的人不喜欢在提问者不花力气的情况下回答问题(可以理解)。我想我不能让所有人开心。也许我只是用粗体之类的问题来编辑它。
audiFanatic

@DW更好吗?
audiFanatic 2013年

audiFanatic,您可能误解或误解了我的评论以及“付出努力”的心态。我的建议是,您确定一个狭窄的问题-例如“ TLB是如何工作的?我不太理解”-然后仅将注意力集中在该问题上。是的,您需要做出认真的努力来回答该问题,并且应该展示您为回答该特定问题所做的努力,但是在不相关的主题上所做的努力并不重要(例如,您努力做出的事实作业问题的进展,这使您想到了这个问题)。
DW

让我帮助您了解其背后的背景。我们希望建立高质量的问题和答案档案库,这对其他人(不仅对您)有帮助。您可以做的最好的事情就是提取一个特定的,狭窄的,恰当的问题,并将您的问题集中在一个问题上。一个范围广泛,开放式,不太集中的问题不太可能对其他可能会迷惑的人有所帮助(而且读者也很难直截了当地理解问题的核心是什么,所以您不太可能得到一个好的答案)。
DW

Answers:


23

我想我看到你的困惑。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用户的预期研究工作。研究技能-在整个职业生涯中对您来说都是很有价值的。)


1
谢谢!这几乎清除了所有东西。我确实花了很多时间进行研究(几天),我只是找不到一条清晰,简洁的信息将这些信息绑在一起(再加上我的困惑可能对我的搜索没有帮助)。打个比方,我觉得我在一家药店里寻找治愈某些无法诊断的疾病的方法。仅以症状为指导。
audiFanatic 2013年

话虽如此,我还有一个问题。如果它们是缓存,那本书为什么要分开缓存的数据和标签部分(地狱,数据部分甚至比标签和有效位部分还要高)?这使得高速缓存似乎除了检查标签外别无选择(好像它不存储数据一样)。该数据块位于缓存图片右下角的一部分,还是主存储器的一部分?
audiFanatic 2013年

1
(1)“标签”是正在翻译的地址的一部分。我做了一些简化:它不是将单个虚拟地址转换为单个物理地址,而是转换整个页面粒度的价值。如果页面长为4096字节,则虚拟到物理查找仅查看虚拟地址的高20位;否则,将仅查看虚拟地址的高20位。如果虚拟地址转换为物理地址(并且它们是页面对齐的),则转换为,为,...,为。VPV+1P+1V+2P+2V+4095P+4095
DW

(2)数据缓存是图片的整个底部(左下块+右下块)。从概念上讲,的数据缓存个入口由左下块加的第i行一世一世一世

好,很好。谢谢。我想这是最让我困惑的分离。
audiFanatic 2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.