Cache存储系统的地址映象及变换方法精讲

写在前面

本文内容参考MOOC平台华中科技大学计算机原理课程

Cache存储系统的地址映象及变换方法

CPU工作时给出的是主存的地址,要从Cache存储器中读写信息,就要将主存地址转换为Cache存储器的地址,这种地址转换称之为地址映像。

Cache的数据结构:有效位 + 标志位 + 偏移量(块内地址)

一个cache地址对应一个字的数据

相联存储器

快速判断主存对应的地址是否在cache中

步骤如下:

  1. 把拿到的主存地址通过不同的映射方式拿到标志key

  2. 使用多路并发比较线路进行在cache中查找符合的

    1. 在有效位为1的块中进行查找(提高效率)
    2. 并发比较标记字
    3. 找到则使用块内地址找到精准的唯一地址
    4. 拿到该地址的数据
  3. 找到就放进符合寄存器取出命中行的数据

img

img

全相联映射

工作原理

img

主存地址的标记放进比较器寻找是否命中,命中则取出对应cache的数据

案例理解

假设cpu需要的访问序列如下,

  1. 1F对应000011111 在cache中找不到,去主存中取整个块,在cache中随机找一个空的块放入,不仅放块数据,还有放标志位,有效位变为1 ,然后在cache中取出对应块内地址的数据(11对应1C)
  2. 找20 24 (同1F)
  3. 找到1E000011110 cache命中 直接拿出1D数据

img

特点

  • 主存地址 = 主存块号 + 块内地址
  • cache利用率高
  • 块冲突率低
  • 淘汰算法复杂(要一一检索所有cache块)
  • 适用于小容量cache

直接映射

工作原理

img

img

案例理解

img

img

  1. 1F 0000 111 10 从主存中拿到后放到第7cache块
  2. 20 24 miss 同1F
  3. 1E 0000 11110 hit 直接拿到1D数据
  4. 44 0010 001 00 先找到第1个cache块 比较标志tag 不一致 miss 从主存中取出覆盖

特点(与全相联完全相反)

  • 主存地址 = 主存区号 + 区内块号 +块内地址
  • cache利用率低
  • 块冲突率高
  • 淘汰算法简单(只比较一个)
  • 适用于大容量cache

组相联映射

工作原理

img

img

案例理解

  1. 1F 00001 11 11 11对应第三组 miss 从主存取出 随机放入组内块
  2. 20 24都miss 同上
  3. 1E 00001 11 10 11对应第三组 存在标志00001 hit 直接取出块内10对应的1D数据
  4. 48 54 都miss
  5. 107时 10000 01 11 对应第一组 没有对应标志块,进行替换

img

img

特点(折中)

  • 主存地址 = 主存组号 + 组内块号 +块内地址
  • 折中
  • k路组相联的k表示一组内多少行 所以8路就是全相连 1路就是直接映射

例题1 直接映射

img

\1) 直接映射 主存地址 = 区号 + 区内块号 + 块内偏移量

  • 块内偏移量 cache块大小 16B 所以4位表示
  • 区内块号就是cache行数 64KB/16B 2^12bit 12位
  • 区号: 32-4-12 = 16位

2)数据字长32位 16B 可以知道有4个字 因此块内偏移量的4位:2位字偏移 2位字节偏移

img

3)容量 = cache行数 * 每行的位数 = 2^12行 * (1+16+128)

img

例题2 组相联映射

img

\1) 组相联映射 主存地址 = 组号 + 组内块号 + 块内偏移量

  • 块内偏移量 cache块大小 8*32bit=32B 所以5位表示
  • 组内块号就是cache组数 cache行数16KB/32B 2^9bit 所以组数2^9bit/4 = 2^7bit 7位
  • 组号: 总位数(16MB = 2^24位)组号24-7-5 =12位

2)100个字 在主存中占100%8 = 13块<2^7组 所以都在主存的第0组

不命中的字是0 8 16…

img

3)加速比由第二问得出

img

猜你喜欢

转载自blog.csdn.net/weixin_51712663/article/details/125038916