Caching 直接映射缓存命中/未命中

Caching 直接映射缓存命中/未命中,caching,memory,computer-architecture,Caching,Memory,Computer Architecture,我很抱歉,如果这是错误的交换;它似乎是离计算机体系结构有帮助的地方最近的一个。关于计算机系统的作业问题,我被问到: Consider three direct mapped caches X, Y, and Z each interpreting an 8-bit address slightly differently according to the {tag:setIdx:byteOffset} format specified. For each address in the refere

我很抱歉,如果这是错误的交换;它似乎是离计算机体系结构有帮助的地方最近的一个。关于计算机系统的作业问题,我被问到:

Consider three direct mapped caches X, Y, and Z each interpreting an
8-bit address slightly differently according to the {tag:setIdx:byteOffset}
format specified. For each address in the reference stream, indicate whether the
access will hit (H) or miss (M) in each cache.

                  C1       C2     C3
Address Formats: {2:2:4} {2:3:3} {2:4:2}

Address References in Binary: 00000010, 00000100...
我应该说每个地址引用是否会导致命中或未命中,但我不知道从哪里开始

对于格式,我认为tag表示缓存块中数据的标记,setIdx表示为表示缓存中不同块而给定的比特数,而offset是块中可以选择的特定字节

我觉得我不明白什么是成功还是失败。我认为有三种类型:强制、能力和冲突。如果我不知道缓存中已经有什么,我怎么知道哪个是强制未命中?在给定标记格式的情况下,如何判断缓存的容量


感谢您的提示和提示。

以C1为例,它有2位用于setIdx,4位用于byteOffset

所以这个缓存将有2^2=4个块(00、01、10和11),每个块将有2^4=16个字节

地址引用现在可以拆分为C1格式:{00 0010}

假设缓存默认为空,则第一次查找将导致未命中。但是,缓存现在将使用标记“00”加载块“00”


下一个引用{00 00 0100}将查找块“00”,它会看到标记也是“00”,我们有一个命中。

我认为您不会有命中。即使地址00 00 0100将查找同一块,它也将在内存中查找不同的地址。在直接映射缓存中,只有在连续指令中尝试访问同一块中的相同内存地址时,才会导致命中。内存中的地址由字节地址而不是块号给出。直接映射缓存将替换块的内容,只要它不尝试访问块中的相同地址。如果00 00 0100先于另一个00 00 0100,则直接映射缓存中会有命中

在相关的高速缓存中,内存地址由块号而不是字节地址给出,因此此处将生成命中


区块编号由楼层(字节地址/每个区块的字节数)模块(区块数)给出。

那么字节偏移量是多少?字节偏移量是一个区块的大小。例如,使用与上面相同的引用,假设C1在块{00}中加载了{00 00 0010},该块包含内存{00 000}到{00 00 1111}。但是,如果您尝试查找{01 00 0010},则会出现未命中,因为标记不同。(我还假设这是一个单向集合关联映射)缓存通常会在未命中时加载整个块,而不仅仅是请求的字节。(一些缓存使用分区,每个块提供一个以上的有效位,但没有主流处理器提供每个字节或甚至每个4字节块的有效位。此外,对于当前DRAM,使用突发切块的最小突发长度为4字节,这会降低性能-,因此64位宽的接口提供最小32字节传输。)@PaulA Clayton你也能看看这个问题吗?