cpu-cache-主存

cache-主存:

直接映射 将主存按照cache的大小分成若干个块进行映射,在这种情况下主存中的块可以变成——【区地址tag | 行索引index】 而这个整体叫做“主存块地址”

什么叫做 cache 的块?cache 中存放主存数据副本的区域。

内存地址:

  1. 行索引(index):位数决定了主存一个区中块的数量。比如上面这个例子中行索引有 3 位,则
    主存一个区中的块就有 8 块。
  2. 区地址((tag):主存中区的编号,上图的例子中便是 2 位,表示了 00、01、10、11 共 4 个主
    存区。

cache地址:

  1. 行号(index):cache 的行编号,有时也叫做槽号,或者索引。
  2. 标记(tag):缓存中的 标记(tag)——表示了主存的块和 cache 的块的对应关系,如果一个主存的块被调入到 cache 中,那么,我们就把主存的块号写入这个 标记 里。

    比如:CPU 给出一个内存地址,CPU 希望能在 cache 中访问到这个地址的话,那么 CPU 首先要确定这个地址所在的块是否已经被送到了 cache 之中,于是,CPU 就拿主存的块号和 标记 进行比较,如果和某一个标记正好相等,并且这个 cache 块是有效的,这就说明,cache 里就保存了 CPU 准备在内存中要访问的信息,于是,CPU 便直接从 cache 中获取这些信息,这样 CPU 取得数据的速度就得到了很大的提高。

  3. 有效位:标识一个行是否含有有效地址。(没有设置,或者设置为 0)。
  4. 数据:通常对 cache 的容量计算只考虑数据的大小,而不会考虑以上①②③所占用的大小。

命中(hit)和数据缺失(miss)

cpu访问主存时,如果要访问的块已经在cache中,称为“**数据命中(hit)”,命中时数据的访问时间称为 “命中访问时间(tc)”,这个时间包括 查找时间 和 cache访问时间 。如果块没在cache中,cpu就需要去主存里获取数据、指令,称为 “数据缺失(miss)**”

如果命中 就建立映射关系,如果数据缺失 就不建立

值得注意的是,cpu在找数据的时候,先从cache找(命中的),再从主存找(没命中的)。但是实际上这两个操作是并行进行的,也就是说时间是 【①在cache中找命中的时间+②在主存中找未命中的时间】,而不是【①在cache中找hit的时间+②在cache中找miss的时间+③在主存中找miss的时间】

cache地址映射变化机构:

负责 1.主存中的块映射到cache中哪个块 2.把主存(块)地址转换为cache(块)地址

cache替换机构:

检测cache中是否还有位置装入主存的块。如果没有位置了,就从cache中退回部分块到主存中,或者直接废弃。再把目标主存块装入cache

cpu-cache-主存流程图

写操作的一致性问题:

读操作不对数据进行修改,但是在写操作时,由于cache中数据其实是主存中某块数据的副本,所以我们应该保持cache块和主存块的一致性。这里有两种方法。

  1. 写直达法(Write-through):在写操作时,同时修改cache块和主存块。写操作时间是访问主存的时间,因为是并行操作,所以写操作时间是访问主存的时间。写直达法的性能主要取决于访问主存的时间。
  2. 写回法(Write-back):允许在一段时间内,cache和主存写入数据不一致。CPU对某个内存单元进行写操作时,如果这个内存单元所在的块已经被取入到内存中,这时只写入cache不写入主存,直到这个cache块退出cache,再对主存进行写操作。 所以这种方法无法保证实时性。但是写回法的性能主要取决于访问cache的时间。因为只有最后一次才会对主存进行操作。
Donate
  • Copyright: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.

扫一扫,分享到微信

微信分享二维码
  • Copyrights © 2015-2024 buynonsense
  • Visitors: | Views:

请我喝杯咖啡吧~

支付宝
微信