有关N路组关联缓存的信息

Eth*_*man 5 caching operating-system memory-management systems-programming

我在互联网上使用的一些资源在集合关联缓存的工作方式上存在分歧.

例如硬件机密似乎相信它的工作原理如下:

然后,主RAM存储器被划分为存储器高速缓存中可用的相同数量的块.保持512 KB 4路组关联示例,主RAM将被分成2,048个块,内存缓存中可用的块数相同.每个内存块都链接到缓存中的一组行,就像在直接映射缓存中一样.

http://www.hardwaresecrets.com/printpage/481/8

他们似乎在说每个缓存块(4个缓存行)映射到特定的连续RAM块.他们说不连续的系统内存块(RAM)无法映射到同一个缓存块.

这是有关hardwaresecrets认为它如何工作的图片 http://www.hardwaresecrets.com/fullimage.php?image=7864

与维基百科的关联缓存图片对比 http://upload.wikimedia.org/wikipedia/commons/9/93/Cache%2Cassociative-fill-both.png.

布朗不同意硬件机密

考虑如果每个高速缓存行具有两组字段可能发生的情况:两个有效位,两个脏位,两个标记字段和两个数据字段.一组字段可以缓存主存储器的一个区域的数据,另一组字段可以缓存到恰好映射到同一缓存线的另一个区域.

http://www.spsu.edu/cs/faculty/bbrown/web_lectures/cache/

也就是说,非连续的系统存储器块可以映射到相同的高速缓存块.

如何创建系统内存和缓存块上的非连续块之间的关系.我在某处读到这些关系是基于缓存步幅的,但除了它们存在之外,我找不到有关缓存步幅的任何信息.

谁是对的?如果实际使用了跨步,那么跨步工作如何?我是否拥有正确的技术名称?如何找到特定系统的步幅?它是基于寻呼系统?有人能指出一个能够详细解释N路组关联缓存的网址吗?

另见:http: //www.cs.umd.edu/class/sum2003/cmsc311/Notes/Memory/set.html

syb*_*eon 7

当我向学生讲授缓存内存架构时,我开始使用直接映射缓存.理解之后,您可以将N路组关联缓存视为直接映射缓存的并行块.要理解这两个数字可能都是正确的,您需要首先了解set-assoc缓存的目的.

它们旨在解决直接映射缓存中的"别名"问题,其中多个内存位置可以映射到特定的缓存条目.这在维基百科图中有所说明.因此,我们可以使用N路缓存来存储其他"别名"内存位置,而不是逐出缓存条目.

实际上,硬件机密图是正确的,假设替换顺序是这样的,即主存储器的第一块被映射到Way-1,然后第二块被映射到Way-2,依此类推.但是,同样可以让第一块主存储器分布在多种方式上.

希望这个解释有帮助!

PS:仅使用单个高速缓存行需要连续的内存位置,利用空间局部性.至于你问题的后半部分,我相信你可能会混淆几个不同的概念.