Cache


[toc]

1.Cache的基本结构

Cache包括:SRAM,控制逻辑(主存地址寄存器、主存——Cache地址变换机构,替换控制器件和Cache地址寄存器)

2.Cache的读写操作

2.1 读操作

当CPU发出读请求时,如果Cache命中,就直接对Cache进行读操作;

如果Cache不命中,则访问主存,并把该信息从主存调入Cache内。

如果Cache满了,则根据替换算法替换Cache中原来的某个信息

2.2 写操作

Cache保存的是主存的副本,当CPU发出写请求时

  1. 如果Cache命中,有可能会遇到Cache与主存内容不一致问题。

    造成原因通常是:

    1. CPU写Cache后,没有立即写入主存;
    2. I/O写入主存后,没有立刻将信息从主存调入Cache更新。

    处理的方法有:

    1. 写直达法:CPU把数据同时写入Cache和主存;

      1. 增加很多不必要的写主存操作,访问存储器速度会变慢
      2. 实现简单,随时保持存储数据的正确性
    2. 写回法:CPU把数据暂时只写入Cache,并用标志注明,等该块被替换时才写回主存。

      1. 减少很多不必要的写主存的操作,访问存储器的速度会提高

      2. 有可能出错,因为主存的字块有可能没有及时被修改

  2. 如果Cache不命中,直接把信息写入主存,并有两种处理方法

    1. 不按写分配法:只写入主存
    2. 按写分配法:写入主存,并将该块读入Cache

3. 地址映像

把主存地址空间映像到Cache地址空间

  1. 全相联映像:主存的任一块可以被放置到Cache中的任意一个位置

    1. 空间利用率最高
    2. 块冲突率最低
    3. 实现复杂度最大
  2. 直接映像:主存中的每一块只能被放置到Cache的唯一一个位置(循环分配),也就是主存块的位置取模Cache块的个数

    1. 空间利用率最低
    2. 冲突概率最高
    3. 实现最简单
  3. 组相联映像:主存中的每一块可以被放置到Cache中的唯一的一个组中的任意一个位置

    若主存的第i块映像到第k组,则k=i mod Cache的组数

    例如:假设Cache有8个块,而主存有16个块,我们把Cache分为4各组(0,1,2,3),每个组有两个块,对应的主存也需要4个区,所以每个区有4个块。例如第9块位于区2(8(0),9(1),10(2),11(3))的第1个块,所以对应到Cache中的第1组的任意一个位置,也就是9mod4=1