在计组原理的Cache部分题目中关于地址和位数的求解为大多数(如下,P131 t22),这里总结一下。


针对所有有关Cache的题目,解题思路总要回归到地址和主存与Cache的对应关系上

即以下四方面:两者的行/块数。(映射方式题目会给出)

image-20221111092731416


此类题目通常会问位数、地址、字块大小、组号、Tag(标记字段)等字样,而题干通常都繁琐无比,所以首先我们要先阅读题目所求解的是什么(即最后一句),抓住重点后与上图相联系。

Cache容量 = 2的m次方 B主存容量 = 2的n次方 B

——->此处应为”KB”等转换为”B”后

(以下称 m n 为xxx次方数)

  1. 主存地址在直接映射到Cache后,地址取Cache次方数,即取主存地址的后m为当做Cache地址

  2. 主存地址等于 = 主存组位;标记位、脏位、有效位等标记字段;末尾Cache地址

    主存组位可以被精简 —-> Tag字段,即用主存块的大小 - m(偏移量) - 映射至Cache中的组数

    直接映射 ——>几个Cache行即为几组,有偏移量

    全相连映射 ——> 没有偏移量,因为实际上不分组

    组映射 ——> 几路组映射几组,有偏移量


看在Cache中第几组的问题一律将地址中与Cache无关的排除,在Cache位数中寻找。



eg:计组原理P142

(2015真题)假定主存地址为32位,按字节编址,主存和Cache之间采用直接映射方式,主存块大小为4个字,每字32位,采用写回(Write Back)法,则能存放4K字数据的Cache的总容量的位数至少是C.
A. 146K B. 147K C.148K D.158K

ans:

直接映射方式地址映象规则: 主存储器中一块只能映象到Cache的一个特定的块中。(1) 主存与缓存分成相同大小的数据块。(2) 主存容量应是缓存容量的整数倍,将主存空间按缓存的容量分成区,主存中每一区的块数与缓存的总块数相等。(3) 主存中某区的一块存入缓存时只能存入缓存中块号相同的位置。

cache总容量 = cache容量+标记容量+有效位容量

cache总位数也应为32位,因一共有4K字数据,而块大小为4字,所以有4K/4 = 2^10 = 1K行

块内地址需要4位

or

Cache数据有4K字,就是4K⋅32bits = 4K⋅4B = 16KB = 2^14B
共有1K行。

所以行号+行内索引=10+4=14位

又因总位数为32位

所以 主存地址位数(标识位)= 32-(10+4)= 18位,

加上1位脏位(写回法),1位有效位为 20位

所以20bits⋅1K(标记位(含有效位))+4K⋅32bits(cache容量) = 148Kbits