如何直接映射缓存的工作?(How does direct mapped cache work?)

2019-08-21 13:41发布

我正在一个系统架构课程,我听不太懂直接映射缓存是如何工作的。

我已经看过好几个地方,他们以不同的方式这让我更糊涂了解释。

我不明白是什么是标签和索引,以及他们如何选择?

从我的演讲的解释是:“地址划分是分为两名部分的索引用于寻址(32K)的RAM地址直接的休息时,标签被存储,并与输入标签进行比较(例如,15个比特)。”

在这情况下标签是从哪里来的? 因为它呈现直接映射缓存无用的(当与全关联缓存相比),它不能在RAM内存位置的完整地址。

非常感谢你。

Answer 1:

好的。 因此,让我们先了解CPU和缓存交互。

有存储器三层(广义地说) - cache (通常由SRAM芯片), main memory (通常由DRAM芯片),并storage (通常磁性,如硬盘)。 每当CPU从某个特定位置需要的任何数据,它首先搜索缓存,看看它的存在。 高速缓存位于最靠近CPU在内存中层次结构方面,因此,它的访问时间是最少的(和成本是最高的),所以如果数据CPU正在寻找能在那里找到,它构成了一个“重灾区”,而数据从那里通过CPU使用获得。 如果它不存在,则该数据必须从主存储器到高速缓冲移动之前它可以由CPU来访问(CPU一般仅与高速缓存进行交互),即招致时间损失。

因此,找出数据是否存在或不在缓存中,各种算法被应用。 一个是这个直接映射高速缓存方法。 为简单起见,我们假设一个存储器系统,其中有可用的可用的(编号为0〜9)10点的高速缓冲存储器的位置,和40个的主存储器位置(编号0到39)。 这幅画总结说:

有40个的主存储器位置,但是仅提供高达10可容纳在缓存中。 所以,现在,通过一些手段,需要被重定向到一个缓存位置从CPU传入的请求。 这有两个问题:

  1. 如何重定向? 具体而言,如何做到这一点的,不会随时间而改变可预测的方式?

  2. 如果缓存位置已经与一些数据填充,从CPU传入请求必须确定从它要求数据的地址是否相同,其数据存储在该位置的地址。

在我们的简单的例子,我们可以通过一个简单的逻辑重定向。 鉴于我们已映射从0顺序编号39〜10的高速缓存单元40个的主存储器位置编号为0到9,用于存储器位置的缓存位置n可以是n%10 。 所以21个对应于如图1所示,37对应于图7,等。即成为索引

但37,17,7都对应于7所以他们之间的区别,自带的标签 。 所以就像指数为n%10 ,标签是int(n/10) 所以,现在37,17,7将具有相同的索引7,但不同的标签,如3,1,0,等。即,该映射可以完全由两个数据所指定 - 标签和索引。

所以,现在如果一个请求进来的地址位置29 9.指数对应的缓存位置数将转化为2的标签和索引,因此缓存位置没有。 9将被查询,看它是否包含任何数据,如果是这样,如果相关标签2.如果有,它是一个CPU命中和数据将从该位置立即取出。 如果是空的,或者标签不为2,这意味着它包含对应于一些其它存储器地址,而不是29的数据(虽然会具有相同的索引,这意味着它包含来自地址等9,19数据, 39,等等)。 所以这是一个CPU小姐,从位置数据没有。 在主存储器29将必须被加载到位置29(和变更为2的标签,和删除这是有之前的任何数据),之后它将由CPU要获取的缓存。



Answer 2:

允许用一个例子。 64千字节的高速缓存,具有16字节高速缓存行具有4096个不同的高速缓存行。

你需要打破地址分为三个不同的部分。

  1. 最低位被用来告诉你,当你把它找回来的缓存行内的字节,这部分是不能直接在高速缓存中查找使用。 (在该例子位0-3)
  2. 接下来的比特用于索引缓存。 如果你觉得缓存中的高速缓存行大列,指数位告诉你,你需要注意你的数据哪一行。 (在该例子位4-15)
  3. 所有其他位是标记位。 这些位存储在标签存储件已存储在缓存中的数据,我们比较缓存请求,我们已经存储了什么的相应位弄清楚我们是否cacheing的数据是被请求的数据。

您使用的指数位的数量是log_base_2(number_of_cache_lines)它是真正的集数,但在直接映射高速缓存,也有相同的行数和集]



Answer 3:

直接映射高速缓存就是这样具有的行也被称为高速缓存行和至少2个列一个用于数据和另一个用于标签的表。

下面是它如何工作的:对缓存的读取访问需要被称为指数,并用它作为行数的地址的中间部分。 该数据和标签在同一时间都抬起头来。 接着,标签需要与地址的上部进行比较,以决定是否该行是从相同的地址范围在存储器中并且是有效的。 与此同时,该地址的下部可以用来选择来自高速缓存行的请求的数据(我假设一个高速缓存行可以容纳几个话数据)。

我强调了数据访问和标签访问一点点+比较发生在同一时间,因为这是关键,以减少等待时间(缓存的目的)。 数据路径RAM存取不需要有两个步骤。

其优点在于读基本上是一个简单的表查找和比较。

但它是直接映射,这意味着,每读地址恰好有在这个数据可以被缓存缓存一个地方。 因此,缺点是很多其他地址将被映射到同一个地方,这个高速缓存行可以竞争。



Answer 4:

我发现,在已经给我提供我所需要的明确的解释图书馆一本好书,我现在碰到这个线程在这里分享的情况下,其他一些学生跌倒,而搜索关于缓存。

本书是“计算机体系结构-一种定量方法”第三版由轩尼诗和帕特森,第390页。

首先,请记住,主存储器划分成块的高速缓存。 如果我们有一个64个字节的高速缓存和1 GB的RAM,该RAM将被分成128个块KB(1 GB RAM / 64B缓存= 128 KB块大小的)。

从书:

在哪里能块放置在缓存?

  • 如果每块只有一个可以出现在高速缓存的地方,高速缓存被认为是直接映射 。 目的地块使用此公式计算: <RAM Block Address> MOD <Number of Blocks in the Cache>

所以,让我们假设有内存32块和高速缓存的8块。

如果我们想从RAM块12存储到缓存中,RAM块12将被存储到缓存块4,为什么? 因为8分之12= 1其余4.其余是目标块。

  • 如果一个块可以在任何地方在缓存中放置,缓存被认为是完全相关的

  • 如果一个块可以在任何地方在受限制的组的高速缓存中的地方放置,缓存关联设置

基本上,一个集是一组在高速缓存块。 一个块首先被映射到一组,然后将块可以被放置在任何地方所设置的内侧。

的公式为: <RAM Block Address> MOD <Number of Sets in the Cache>

这样,让我们​​假设我们有RAM 32个块,并分成4组的高速缓存(具有两个块的每组,共意8块)。 这样设置0将有块0和1,设置1将有块2和3,等等...

如果我们想RAM块12存储到缓存中,RAM块将被保存在高速缓存块0或1。为什么呢? 因为12/4 = 3余数为0。因此设定0被选择,并且块可以放在任何地方内设定为0(意味着块0和1)。

现在,我将回到我原来的问题与地址。

块是如何发现,如果它是在缓存中?

在高速缓存中的每个块帧都​​有一个地址。 只是要清楚,一个块具有地址和数据。

块地址被划分为多个部分:标签,索引及偏移。

该标记被用于找到所述高速缓存内的块,索引仅示出了其中块位于(使它相当冗余)和用于选择所述数据的偏移量的设定。

通过“选择数据”我的意思是,在一个高速缓存块有明显会超过一个存储单元,用于它们之间进行选择的偏移。

所以,如果你要想象一个表,这些将是列:

TAG | INDEX | OFFSET | DATA 1 | DATA 2 | ... | DATA N

标签将被用来寻找块,指数将显示在其中设置的块,偏移会选择字段在其右侧的一个。

我希望我的这种理解是正确的,如果不是请让我知道。



文章来源: How does direct mapped cache work?