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

笔者:YY同学

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



Memory(内存) 种类

一般分为两类:

  • SRAM(Static Random Access Memory,静态随机存取存储器)
    容量小,速度快,价格昂贵。例如:Cache(缓存)
  • DRAM(Dynamic Random Access Memory,动态随机存取存储器)
    容量大,速度慢,价格便宜。例如:Main Memory(主内存)

在这里插入图片描述


Memory 层级

在这里插入图片描述

一般距离 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 的一些术语

在这里插入图片描述

  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 读写数据

在这里插入图片描述
在这里插入图片描述


三类 Cache

假设地址总长为 N bits

类型Set 数量Block Offset优点缺点Miss Rate
Directed mapped(直接映射)2^N0实现简单不灵活
Full associative(全相联)1N灵活需要很多比较器,更大的硬件尺寸
Set associative(组相联)2^(N-K)K灵活且有更小的硬件尺寸/介于中间

在这里插入图片描述


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)之间的关系:
在这里插入图片描述
在这里插入图片描述


Virtual Memory(虚拟内存)

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

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

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

TLB 事件一览:
在这里插入图片描述


Average Memory Access Time (AMAT)

在这里插入图片描述

  1. The L2 hit time determines L1’s miss penalty.
  2. L2 local miss rate >> than the global miss rate
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值