Carrawayang  

Cache和主存的映射·替换算法·写策略

映射

Cache行中的信息是主存某个块的副本
地址映射:将主存地址空间映射到Cache地址空间,按某种规则将主存的信息装入Cache
Cache的行数比主存块少的多,只有一部分主存块的信息可以装入Cache中,因此在Cache中需要为每块加一个标记,指明它是主存的哪一块的副本,此标记相当于主存块的编号。为了说明Cache行中的信息是否有效还需要一个有效位,地址映射以下3种:

  • 直接映射
  • 全相联映射
  • 组相联映射

直接映射

Cache 行号 = 主存块号 mod Cache 总行数
假设 Cache : \(2^c\)行 主存 : \(2^m\)
\(0,2^c,2^{c+1},\dots\)块映射到第0行
\(1,2^c+1,2^{c+1}+1\)块映射到第1行
低c位为装入的Cache行号,给每行设置一个长为t=m-c的标记,当某个主存块调入Cache后,将主存块号的高t位设置为对应Cache行中的标记

t c b
标记 Cache行号 块内地址

CPU访存过程:

  • 根据访存地址中间的c位找到对应Cache行
  • Cache行标记与主存地址高t位标记比较,确定是否有效
  • 相等且有效位为1,访问Cache命中,根据主存地址低b位的块内地址,在对应Cache行中存取信息
  • 不相等或有效位为0,不命中,CPU将主存读出该地址所在的一块信息送到相应的Cache行中,置有效位1,并将标记设置为地址高t位,同时将地址中的内容送CPU

全相联映射

主存的每一块可以装入Cache中的任何位置,每行标记用于指出该行取自主存的哪一块,CPU访存时需要与所有Cache行的标记进行对比

t b
标记 块内地址

组相联映射

将Cache分为Q个大小相等的组,每个主存块可以装入固定组的任意一行,即组间采用直接映射,而组内采用全相联映射,Q=1变为全相联映射,Q=Cache行数变为直接映射
假设r个Cache行,则称之为r路组相联映射
Cache组号=主存块号 mod Cache组数(Q)

t g b
标记 组号 块内地址

CPU访存:

  • 根据访存地址中间的g位组号找到对应的Cache组
  • 将对应的Cache组的每个行标记与主存的高t位标记进行比较
  • 相等且有效位为1,命中,根据主存地址中的低b位块内地址,在对应的Cache行中存取信息
  • 不相等或有效位为0,未命中,CPU从主存读出该地址所在的一块信息送到对应的Cache组的任意一个空行,有效位置1,设置标记,同时将地址中的内容送CPU

替换算法

在采用全相联映射或组相联映射方式时,主存向Cache传送一个新块,Cache或Cache组空间已满替换的策略

  • RAND
  • FIFO
  • LRU

写策略

因为Cache中的内容是主存块副本,当对Cache中的内容进行更新时,就需选用写操作策略,使Cache内容和主存保持一致
对于Cache写命中:

  • 全写法:当CPU对Cache写命中时,必须八数据同时写入Cache和内存。当某一块需要替换时,不必把这一块写回主存,用新调入的块直接覆盖。
  • 回写法:当CPU对Cache写命中时,只把数据写入Cache,而不立即写入主存,只有当此块被换出时,才写入主存。每个Cache行设置一个修改位(脏位),若修改位为1,Cache行被修改过,替换时需要写回主存,若为0,则说明Cache行中的块未被命中,替换时无需写回

对于Cache写不命中:

  • 写分配法:加载主存中的块到Cache中,然后更新这个Cache块
  • 非写分配法:只写入主存,不进行调块
posted on 2024-03-02 22:01  Carraway  阅读(16)  评论(0编辑  收藏  举报