存储系统知识

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位)
  • 字扩展:增加地址线,增加总容量
  • 字位同时扩展:既加位数又加容量

相关推荐
Rotion_深20 天前
可靠性与系统性能评测
计算机基础
bestblueheart20 天前
C语言怎么学?系统学习路线图分享
c语言·指针·计算机基础·学习路线·编程思想
Rotion_深21 天前
计算机硬件基础知识
计算机基础
Rotion_深21 天前
计算机系统的组成与体系结构
计算机基础
书到用时方恨少!22 天前
计算机键盘各个按键功能及常用组合键详解
计算机外设·计算机基础·键盘按键·组合键
番茄灭世神2 个月前
Linux从入门到进阶 第四章
linux·操作系统·计算机基础
剪一朵云爱着3 个月前
计算机组成原理 (四)计算机性能
408·计算机组成原理·计算机基础
剪一朵云爱着3 个月前
计算机组成原理(一)计算机概述
408·计算机组成原理·计算机基础·四大件
不凉帅3 个月前
NO.2计算机基础
网络·嵌入式·硬件·软件·计算机基础