天天看点

【CO101】计算机组成原理笔记7 —— Memory 与 Cache

笔者:YY同学

生命不息,代码不止。好玩的项目尽在GitHub

文章目录

    • Memory(内存) 种类
    • Memory 层级
    • Cache 预读取
    • 关于 Cache 的一些术语
    • Cache 读写数据
    • 三类 Cache
    • Write Hit & Write Miss Policy
    • Cache Miss 的三个可能原因(3C Model)
    • Virtual Memory(虚拟内存)
    • Average Memory Access Time (AMAT)

Memory(内存) 种类

一般分为两类:
  • SRAM(Static Random Access Memory,静态随机存取存储器)

    容量小,速度快,价格昂贵。例如:Cache(缓存)

  • DRAM(Dynamic Random Access Memory,动态随机存取存储器)

    容量大,速度慢,价格便宜。例如:Main Memory(主内存)

【CO101】计算机组成原理笔记7 —— Memory 与 Cache

Memory 层级

【CO101】计算机组成原理笔记7 —— Memory 与 Cache
一般距离 CPU 远近顺序为:
  1. L1 Cache(一级 Cache,最近)
  2. L2 Cache(二级 Cache)
  3. L3 Cache(三级 Cache,如有)
  4. Main Memory(主内存)
  5. Secondary Memory(二级内存,最远)

Cache 预读取

大家都知道,计算机在运行时 CPU 会不停地通过数据通路向 Memory 里拿数据,但是每一次拿数据都会消耗很多时间(因为距离比较远)。因此为了更加高效地存取数据,Memory 会在被访问的时候,将一些相关的数据提前保存进 Cache 里,因为 Cache 距离 CPU 比较近,因此从 Cache 中读取数据会比从 Memory 中读取快很多。一般 Cache 的预读取会有两种形式:
  1. Locality Temporal(时间频率):单位时间内访问频率越高的数据会被存入 Cache 中。
  2. Locality Spatial(空间频率):当读入一个数据时,考虑到与它相邻的数据会被用到,因此将这些相邻数据提前存入 Cache 中。

关于 Cache 的一些术语

【CO101】计算机组成原理笔记7 —— Memory 与 Cache
  1. Cache Hit:读取命中,指预先读取到 Cache 的数据成功被 CPU 访问
  2. Cache Miss:读取缺失,预先读取到 Cache 的数据没有成功被 CPU 访问
  3. 内存地址(简称地址):一串二进制,用于表示数据在内存中的位置,由 Index 位、Tag 位以及 Block Offset 位组成
  4. Set:集合,由 Index,Valid,Tag,Block 组成
  5. Block:又称 Cache Line,内存中一行的存储区域,用于存放数据。n 个 Block 又可以成为 n-way associative(n 路组相联)
  6. Index:集合目录,表示集合的个数,由地址 mod 2^k 求得,k为地址中 Index 的位数,可自定
  7. Tag:标签位,地址位数 - Index 位数 - Block Offset 位数
  8. Valid:内存中表示数据的有效性,1 为有效,0 为无效
  9. Block Offset:偏移量(至少为 1),一个 Block 中可能划分为多块区域,存放多个数据,Offset 用于指明具体偏移到哪个位置
  10. Byte Offset:同 Block Offset,取决于数据类型(byte or word)
  11. Dirty:表示 Memory 与 Cache 数据的一致性,0 表示数据没有修改,是一致的;1 表示数据修改,不一致

Cache 读写数据

【CO101】计算机组成原理笔记7 —— Memory 与 Cache
【CO101】计算机组成原理笔记7 —— Memory 与 Cache

三类 Cache

假设地址总长为 N bits

类型 Set 数量 Block Offset 优点 缺点 Miss Rate
Directed mapped(直接映射) 2^N 实现简单 不灵活
Full associative(全相联) 1 N 灵活 需要很多比较器,更大的硬件尺寸
Set associative(组相联) 2^(N-K) K 灵活且有更小的硬件尺寸 / 介于中间
【CO101】计算机组成原理笔记7 —— Memory 与 Cache

Write Hit & Write Miss Policy

  • 当 CPU 需要写入一个数据并且 Cache 中存有这个数据,这种情况叫 Write Hit,一般有以下几种策略:
    • Write Through:同时更新 Memory 和 Cache
    • Write Buffer:预先写入缓冲区,提高写入速度
    • Write Back:只更新 Cache 不更新 Memory
  • 当 CPU 需要写入一个数据但是 Cache 中没有这个数据,这时候需要用到 Write Miss 策略:
    • Write Allocate:先更新 Memory,然后将数据从 Memory 中读取到 Cache 中
    • Write Not Allocate:只更新 Memory

一般的组合策略为:

Write Through + Write Not Allocate,或者 Write Back + Write Allocate,这样的组合效率最高

Cache Miss 的三个可能原因(3C Model)

  1. Compulsory:冷启动,初始赋值时造成的缺失。

    解决方法:增加 block size

  2. Capacity:block size 有限,导致所有指令数据无法全部放下。

    解决方法:增加 cache 的大小

  3. Conflict:Memory 数据存入同一个 Cache 中写入位置发生冲突

    解决方法:增加 cache 的大小或者增加 cache 相联度

Cache Miss Rate 和三大因素(block size,cache size,associativity)之间的关系:

【CO101】计算机组成原理笔记7 —— Memory 与 Cache
【CO101】计算机组成原理笔记7 —— Memory 与 Cache

Virtual Memory(虚拟内存)

数据在真实内存中的存放地址往往是乱序的,而虚拟内存相当于开辟一块看上去“连在一起”的虚假地址,然后将每个地址映射到真正的物理内存中去,给人一种“相关数据在地址上相连”的假象。

使用虚拟内存的好处:

  1. Reduce Memory Conflict(减少内存冲突 )
  2. Improve Safety(增加程序安全性和保密性,虚拟内存的独立性使得别的指令无法访问虚拟内存)

虚拟内存也需要一种 Cache 来提高内存的读取效率,它的名字叫做 TLB(Translation Lookaside Buffers)

TLB 事件一览:

【CO101】计算机组成原理笔记7 —— Memory 与 Cache

Average Memory Access Time (AMAT)

【CO101】计算机组成原理笔记7 —— Memory 与 Cache
  1. The L2 hit time determines L1’s miss penalty.
  2. L2 local miss rate >> than the global miss rate

继续阅读