存储系统知识

1 存储系统


1.1 Cache(高速缓存)

Cache 就是CPU 与内存之间的超级高速小仓库

因为 CPU 极快、内存较慢,所以用 Cache 缓冲,让 CPU 不用每次都等内存。


1.1.1 Cache 原理、命中率、失效率

1)Cache 工作原理

计算机有局部性原理

  • 刚用过的数据,很可能马上再用(时间局部性)
  • 用到一个数据,附近的数据也很可能马上用(空间局部性)

所以 Cache 做的事很简单:
把内存中最近常用的数据复制一份放到 Cache 里,CPU 优先找 Cache。

流程:

  1. CPU 要读数据
  2. 先看 Cache 里有没有
    • 有 → 命中,直接用,极快
    • 没有 → 失效,去内存读,同时把这块数据放进 Cache

2)命中率

在 Cache 中找到数据的概率。

公式:

命中率 = \\frac{命中次数}{总访问次数}

命中率越高,系统越快。

好的 Cache 命中率通常在 90%~99%


3)失效率

失效率 = 1 - 命中率

失效时,CPU 必须等内存,速度会大幅下降。


1.1.2 Cache 映射机制

内存很大,Cache 很小。
映射机制 = 规定"内存块放到 Cache 哪个位置"的规则。

内存和 Cache 都被分成大小相同的小块,叫页 / 块(Block)


(1)直接映射

一个内存块,只能固定放到 Cache 的一个位置。

公式:

Cache行号 = 内存块号 \\mod Cache总行数

比喻:

每个人只能坐自己固定编号的座位,不能乱坐。

优点:

  • 最简单、硬件最便宜
  • 查找快

缺点:

  • 冲突严重:多个内存块抢同一个位置
  • 命中率低

(2)全相联映射

内存块可以放到 Cache 任意一个位置。

比喻:

随便坐空位。

优点:

  • 冲突最少
  • 命中率最高

缺点:

  • 要对比所有 Cache 行,电路复杂、成本高、慢

(3)组相联映射(最常用、考试最爱考)

结合前两者优点:

  1. 把 Cache 分成若干
  2. 一个内存块,只能放到固定组
  3. 在组内,可以随便放任意行

结构:

  • 直接映射 = 每组 1 行
  • 全相联 = 只有 1 组
  • 组相联 = 多组、每组多行(常见 2 路、4 路、8 路)

优点:

  • 冲突少
  • 速度快
  • 成本适中

现代 CPU 几乎都用 组相联


1.1.3 Cache 淘汰算法

当 Cache 满了,新数据要进来,必须踢掉一个旧的。

1)FIFO(先进先出)

最早进来的先被淘汰。

简单,但不实用,容易把常用数据踢走。

2)LRU(最近最少使用)

最久没被访问的淘汰。

最常用、效果最好,符合局部性原理。

3)LFU(最不经常使用)

访问次数最少的淘汰。

效果好,但硬件复杂。

4)随机淘汰

随便踢一个。

简单,但命中率不稳定。


1.1.4 Cache 的写操作

CPU 改数据时,Cache 和内存可能不一致,需要策略。

1)写直达(Write Through)

  • 同时写 Cache + 内存
  • 数据永远一致
  • 缺点:慢,每次都要等内存

2)写回(Write Back)

  • 只先写 Cache
  • 只有这块要被替换时,才写回内存
  • 速度快,现代 CPU 主流

3)写分配 / 不写分配

  • 写失效时,把内存块调入 Cache → 写分配
  • 不调入,直接写内存 → 不写分配

1.2 主存(内存)

主存就是我们常说的 RAM、内存条

特点:

  • 速度快
  • 断电数据丢失
  • CPU 能直接访问

1.2.1 主存储器的种类

1)随机存取存储器 RAM

  • DRAM(动态 RAM)
    常用内存条,需要不断刷新,容量大、便宜。
  • SRAM(静态 RAM)
    不用刷新,速度极快,贵,用来做 Cache。

2)只读存储器 ROM

  • 只能读,不能随便写
  • 断电不丢失
  • 存放 BIOS、启动程序

延伸:

  • PROM:一次性写入
  • EPROM:可擦除
  • EEPROM:电可擦除
  • Flash:U盘、SSD 用的闪存

1.2.2 主存储器的组成

内存由三部分构成:

  1. 存储体

    真正存 0/1 的单元矩阵。

  2. 地址译码器

    接收地址信号,选中某一个存储单元。

  3. 读写控制电路

    控制:读、写、片选、刷新等。

简单理解:

  • 地址线:找哪个单元
  • 数据线:传 0/1
  • 控制线:命令读还是写

1.2.3 主存储器的地址编码

用地址线数量,计算内存最大容量。

核心公式

若有 n 根地址线

总单元数 = (2^n)

若每个单元是 1 字节(8位)

容量 = (2^n) 字节

例子:

  • 10 根地址线 → (2^{10}) = 1K
  • 20 根地址线 → (2^{20}) = 1M
  • 32 根地址线 → (2^{32}) = 4G

片选与扩展

当一个芯片容量不够时:

  • 位扩展:多个芯片并联,增加位数(如 4位 → 8位)
  • 字扩展:增加地址线,增加总容量
  • 字位同时扩展:既加位数又加容量

相关推荐
bestblueheart4 小时前
C语言怎么学?系统学习路线图分享
c语言·指针·计算机基础·学习路线·编程思想
Rotion_深7 小时前
计算机硬件基础知识
计算机基础
Rotion_深12 小时前
计算机系统的组成与体系结构
计算机基础
书到用时方恨少!2 天前
计算机键盘各个按键功能及常用组合键详解
计算机外设·计算机基础·键盘按键·组合键
番茄灭世神2 个月前
Linux从入门到进阶 第四章
linux·操作系统·计算机基础
剪一朵云爱着2 个月前
计算机组成原理 (四)计算机性能
408·计算机组成原理·计算机基础
剪一朵云爱着2 个月前
计算机组成原理(一)计算机概述
408·计算机组成原理·计算机基础·四大件
不凉帅2 个月前
NO.2计算机基础
网络·嵌入式·硬件·软件·计算机基础
SomeBottle3 个月前
【小记】解决校园网中不同单播互通子网间 LocalSend 的发现问题
计算机网络·go·网络编程·学习笔记·计算机基础