Per*_*age 47 caching system cpu-architecture
我正在参加系统架构课程,我无法理解直接映射缓存的工作原理.
我看了几个地方,他们用不同的方式解释它让我更加困惑.
我无法理解的是标签和索引是什么,它们是如何被选中的?
从我的演讲的解释是:"地址划分是分为两名部分的索引用于寻址(32K)的RAM地址直接的休息时,标签被存储,并与输入标签进行比较(例如,15个比特)."
那个标签来自哪里?它不能是RAM中内存位置的完整地址,因为它使直接映射缓存无用(与完全关联缓存相比).
非常感谢你.
Sex*_*ast 88
好的.因此,让我们首先了解CPU如何与缓存进行交互.
存在三层存储器(广义上讲) - cache(通常由SRAM芯片制成),main memory(通常由DRAM芯片制成),和storage(通常是磁性的,如硬盘).每当CPU需要来自某个特定位置的任何数据时,它首先搜索缓存以查看它是否存在.高速缓冲存储器在存储器层次结构方面最接近CPU,因此其访问时间最短(成本最高),因此如果可以在那里找到数据CPU,它就构成了"命中"和数据从那里获得供CPU使用.如果它不存在,那么在CPU可以访问数据之前必须将数据从主存储器移动到高速缓存(CPU通常仅与高速缓存交互),这会导致时间损失.
因此,为了确定缓存中是否存在数据,应用了各种算法.一种是这种直接映射的缓存方法.为简单起见,我们假设一个存储器系统,其中有10个可用的高速缓存存储器位置(编号为0到9),以及40个可用的主存储器位置(编号为0到39).这张图总结了一下:
有40个主存储器位置可用,但缓存中只能容纳10个.所以现在,通过某种方式,来自CPU的传入请求需要重定向到缓存位置.这有两个问题:
如何重定向?具体来说,如何以可预测的方式进行,不会随时间变化?
如果缓存位置已经填满了某些数据,则来自CPU的传入请求必须识别它需要数据的地址是否与其数据存储在该位置的地址相同.
在我们的简单示例中,我们可以通过简单的逻辑重定向.鉴于我们必须将从0到39连续编号的40个主存储器位置映射到编号为0到9的10个高速缓存位置,因此存储器位置的高速缓存位置n可以是n%10.因此21对应于1,37对应于7等.这成为索引.
但是37,17,7都对应于7.所以为了区分它们,标签就出现了.就像索引一样n%10,标签是int(n/10).所以现在37,17,7将具有相同的索引7,但不同的标签如3,1,0等.也就是说,映射可以完全由两个数据 - 标签和索引指定.
所以现在,如果请求来自地址位置29,那将转换为标记2和索引9.索引对应于缓存位置编号,因此缓存位置为.将查询9以查看它是否包含任何数据,如果是,则相关标记是否为2.如果是,则为CPU命中,并且将立即从该位置获取数据.如果它是空的,或者标记不是2,则表示它包含与某个其他内存地址相对应的数据而不是29(尽管它将具有相同的索引,这意味着它包含来自地址的数据,如9,19, 39等).所以这是一个CPU未命中,而来自位置的数据没有.主存储器中的29必须被加载到位置29的高速缓存中(并且标签变为2,并删除之前存在的任何数据),之后它将被CPU取出.
Dan*_*nny 12
让我们举个例子.一个64千字节的缓存,16字节缓存行有4096个不同的缓存行.
您需要将地址分成三个不同的部分.
您用于索引的位数是log_base_2(number_of_cache_lines)[它实际上是集合的数量,但在直接映射的缓存中,有相同数量的行和集合]