cache缓存器的映射机制解读

cache的初步介绍:

  1. cache存在的意义:CPU 每次直接 从内存读取数据太浪费时间了。
  2. cache的基础:局部性原理,因为代码读取在某一时间都是连续存储的,所以可以将这一小个整体放倒ache中,直接读取。
  3. cache的处理机制:CPU每次要读取一定内存地址时,首先去ache中找是否有这个地址,如果有,则不去主存;如果没有,则去主存读取,并且,把读取的数据的上下一小块都存储到ache中,供CPU的下次读取使用。

cache的实现机制:

  1. cache由一个叫 关联存储器CAM(Content Addressed Memory)来实现的。CAM中有一个 相联存储表,其中在cache中缓存的数据的对应内存地址就是存储在这里,我们直接来通过比较这个来实现的。
  2. CAM可以被认为就是存储 内存地址的块号,CPU发出访问内存的内存地址并不是直接的内存地址,而是转换成 |-块号-|-字地址-|的格式来实现。
  3. 所以,开始时,就可以将CPU请求的地址的“块地址”在CAM中与其表(相联存储表)进行比较,如果发现匹配成功,则就照着CPU提供的另外一个“字地址”来直接从cache中读取数据。cache缓存器的映射机制解读

cache计算问题:

  1. cache映射分为三类:全相联映射、直接映射、组相连映射方式。
  2. 三种映射方式相同的计算是 字地址的大小,其就是 分块的大小。
  3. 解题的策略就是记住s是块的个数,如果有行号或者组号,则标记必须减少来分享出来一部分空间给它,但总数却一直是不变的。
    1. 全相联映射:
      1. 最为直接的方法:标记s(块大小)*字地址大小(块个数) = 内存地址。
      2. 其转换为 幂运算 就是 加法。
      3. 其对应内存结构为 |标记s|字地址w|
    2. 直接映射:
      1. 对行号与组号进行对应 mod 取模运算,所以这时,一个行号可以对应多个组号,但一个组号只能唯一对应一个行号。
      2. 这时,数据结构就分为 |标记s-r|行r|字地址w|
    3. 组相连映射:
      1. 其将行号分成小组,然后内存中每个块对应的小组是一定的。
      2. 数据结构为:|标记s-d|组号d|字地址w|