我在 Internet 上访问的一些资源对集合关联缓存的工作方式存在分歧。
例如,硬件机密似乎相信它是这样工作的:
然后主 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 路集关联缓存的 url 吗?
另见: http ://www.cs.umd.edu/class/sum2003/cmsc311/Notes/Memory/set.html