存储系统
复习提示(中优先级):把各类存储器放到速度、容量、成本、易失性与控制主体五个维度中比较。
存储器的概念经常在选择题中考察,需要了解常见存储器的类型和特点,在选择题中看见相关名词能够辨识选出正确答案。
存储系统的层次结构
存储系统是计算机体系结构的核心组成部分之一,用于存储程序指令和数据,以支持处理器的运算需求。为了平衡速度、容量和成本,现代计算机采用了分层存储体系结构,从最快速但容量有限的 寄存器 到容量大但速度较慢的辅助存储设备,形成了存储层次结构。
如上图所示,越靠近金字塔上层的容量越小但速度越快,越靠近金字塔下层的容量越大但速度越慢。计算机的存储系统包含以下层次:
- 寄存器 (Registers):
- 寄存器 是位于处理器内部的最快速存储单元。
- 它们提供极快的数据访问速度,但其容量非常有限。
- 一级缓存 (L1 Cache):
- L1 缓存位于处理器内部,比 寄存器 空间稍大,速度比 L2 和 L3 Cache 更快。
- 它通常分为 数据缓存 (用于存储数据)和指令缓存(用于存储指令)。
- 二级缓存 (L2 Cache):
- L2 缓存比 L1 缓存大,并且位于处理器和主内存之间。
- 它的速度比 L1 慢,但比主内存快。
- 三级缓存 (L3 Cache):
- 在某些系统中,还有 L3 缓存,这是一种更大但速度更慢的缓存。
- 它位于 L2 缓存和主内存之间,旨在进一步减少对主内存的访问。
- 主存 (RAM):
- 就是我们常说的内存,比缓存慢,但比硬盘快得多,并且容量比缓存大。
- 主存 用于存储正在运行的程序和当前使用的数据。
- 辅助存储 (如硬盘驱动器或固态驱动器):
存储器层次结构的主要思想是上一层的存储器作为低一层存储器的高速缓存。当 CPU 要从存储器中存取数据时,先访问 Cache,若不在 Cache 中,则访问 主存,若不在 主存 中,则访问磁盘,此时,操作数从磁盘读出送到 主存,然后从 主存 送到 Cache。
Cache——主存层 主要解决 CPU 和主存速度不匹配的问题,主存和 Cache 之间的数据调动是由硬件自动完成的。
主存一辅存层 主要解决存储系统的容量问题,主存和 辅存 之间的数据调动是由硬件和操作系统共同完成的,两者对于应用程序员都是透明的。
RAM
半导体随机存储器的英文为 Semiconductor Random-Access Memory ( RAM )。
首先说一下这个名词中的几个部分:
- 半导体:这种存储器使用半导体材料(如硅)制成。晶体管是构成半导体存储器的基本组成部分。
- 随机:随机的意思是随机访问,意味着可以以几乎恒定的时间访问存储器中的任意位置,它与其他存储技术(如磁盘或磁带)不同,后者需要按顺序访问数据。
随机存储器主要分为 SRAM 和 DRAM 两种。
SRAM
SRAM(Static RAM,静态随机存取存储器)使用触发器(通常由 4-6 个晶体管组成)构成存储器的基本存储单元,存储每个比特的数据,如下图所示:
只要电源持续供应,数据无需刷新即可保持稳定。
SRAM 通过将触发器组织成二维阵列构成存储器,每行连接一个字线(Word Line),控制该行所有单元的访问。 每列连接一对位线(Bit Line),用于传输数据。
SRAM 主要用于 CPU 缓存(L1/L2/L3 Cache)、寄存器、嵌入式系统中的小型高速存储。
DRAM
DRAM(Dynamic RAM,动态随机存储器)使用 1 个晶体管和 1 个电容器(1T1C 结构)构成存储器的基本存储单元,存储每个比特的数据。
- 电容器存储电荷,表示 1 比特数据(有电荷为 1,无电荷为 0)。
- 晶体管作为开关,控制电容器与外部位线(bit line)的连接,读写数据。
与触发器不同,电容器具有 动态特性,会随时间漏电,导致数据丢失,因此需要 定期刷新(通常每几毫秒)以恢复电荷。
DRAM 和 SRAM 的存储阵列在宏观上类似,都采用二维矩阵结构,通过字线和位线实现随机访问,主要区别在于基本存储单元的不同:
它以低成本和高容量著称,主要用于 计算机主内存(如系统 RAM)、显卡内存等。
行列复用
需要注意一点,绝大多数 DRAM 芯片的引脚都采用了 采用了 “行列地址复用” 的方式。
- DRAM 芯片内部存储单元是一个二维阵列:
- 行表示字线。
- 列表示位线。
- 如果直接给每个单元提供地址引脚,需要 log₂(行数) + log₂(列数) 个引脚。
- 例如:64K × 4 DRAM(64K 个字,每个字 4 bit),如果阵列是 256 行 × 256 列,就需要 16 根地址线。
- 但在 20 世纪 70、80 年代,封装引脚数量有限,无法承受那么多地址线。
于是,引入了 行列地址复用(Address Multiplexing):
DRAM 行列复用实例
假设有一个 16M × 4bit 的 DRAM 芯片:
存储单元总数:。
单元阵列:4K 行 × 4K 列(因为 )。
需要地址位数:
- 行地址:12 位()
- 列地址:12 位()
如果不复用,要 24 根地址线。
如果复用,只要 12 根地址线,行列分时复用即可。
实际上就把引脚数量减半。
- 芯片的外部只提供 log₂(max(行数, 列数)) 根地址线。
- 地址分两次送入:
- 先送行地址(RAS,Row Address Strobe 信号有效时锁存)。
- 再送列地址(CAS,Column Address Strobe 信号有效时锁存)。
但是 SRAM 一般不使用行列复用:外部地址线一次性给出完整的地址,直接解码到存储单元。因为 SRAM 容量较小且速度有限,所以引脚数量不会太多。
SRAM 和 DRAM 对比
| 特性 | DRAM | SRAM |
|---|---|---|
| 存储单元 | 1 晶体管 + 1 电容器 | 通常 6 个晶体管构成触发器 |
| 速度 | 较慢 | 更快 |
| 刷新 | 需要定期刷新 | 无需刷新 |
| 集成度与容量 | 集成度高、容量大 | 集成度较低、容量小 |
| 单位位成本 | 低 | 高 |
| 典型应用 | 主存、显存 | CPU Cache |
Flash 存储
Flash 存储器是一种 非易失性 的电子存储设备,它利用半导体技术来存储数据。通常用于长期数据存储,如 USB 闪存驱动器、固态硬盘(SSD)和移动设备的内部存储。它在读取速度上比 RAM 慢,但优于传统的硬盘驱动器(HDD)。
Flash 存储器使用电子方式来擦写和重新编程存储单元。这意味着可以通过电信号快速擦除和写入数据。数据存储在小型存储单元中,每个单元由浮动门晶体管组成。这些晶体管可以保持其充电状态,从而代表不同的数据位。
Flash 存储主要分为 NAND Flash 和 NOR Flash 这两种类型。
ROM
ROM(Read-Only Memory)是一种 非易失性 存储设备,主要用于永久性地存储数据。
ROM 主要用于读取操作。虽然早期的 ROM 在制造过程中就已经被编程,不能修改,但现代的 ROM(如 EPROM 和 Flash 存储器)可以被重新编程。
ROM 常用于存储固件,这是一种软件程序,直接嵌入在硬件设备中,用于控制设备的基本操作。例如,BIOS(基本输入输出系统)通常存储在 ROM 中。
注意一下 ROM 和 RAM 的对比如下:
| 特征 | RAM(随机存取存储器) | ROM(只读存储器) |
|---|---|---|
| 易失性 | 通常易失,断电后数据丢失 | 非易失,断电后数据保留 |
| 读写能力 | 可随机读取和写入 | 以读取为主;可否改写取决于具体类型 |
| 用途 | 存储正在运行的程序和数据 | 存储固件、启动程序等 |
| 数据持续性 | 不持久 | 持久 |
ROM 的类型中可了解 EPROM 和 CD-ROM:
EPROM
EPROM 可以通过紫外线照射来擦除数据,然后重新写入数据。写入数据和擦除数据都较为繁琐,且需要物理操作。常用作电脑的 BIOS 芯片,支持随机存取。
CD-ROM
CDROM 是一种光盘存储设备,数据在生产时一次性写入,不能被修改(只能读取)。
存储层次的取舍与器件边界
存储系统之所以分层,不是因为同一种器件被简单地按容量排队,而是要在速度、容量、单位比特成本和易失性之间折中。越靠近 CPU 的层通常越快、容量越小、每比特成本越高;越靠近外存的层通常容量更大、持久性更好,但访问延迟也更高。程序的局部性使得少量高速层能覆盖大部分近期访问,而不是要求所有数据都常驻最快的存储器。
| 层次 | 典型保存内容 | 断电后是否保留 | 访问粒度与特点 |
|---|---|---|---|
| 寄存器、Cache | 正在参与运算或近期访问的数据 | 不保留 | 由 CPU 指令直接或间接使用,容量很小 |
| 主存 DRAM | 正在运行的程序、页和数据 | 不保留 | 可按地址随机读写,需周期性刷新 |
| ROM、Flash、磁盘 | 固件或持久文件 | 通常保留 | 写入规则与擦除粒度随器件而变 |
“随机存取”只说明可按地址直接定位任一存储单元,访问时间不依赖于它在序列中的前后位置;它并不等价于“随机访问一定快”,也不等价于“内容随机”。RAM 可读写且通常易失,ROM 则强调正常运行时以读取为主;非易失性也不等于完全不能改写,Flash、EEPROM 都可以在特定规则下改写。
SRAM、DRAM 与 Flash 的动作粒度
SRAM 用双稳态电路保存一位,只要供电存在就不需刷新,速度快但一个单元所需晶体管较多,适合做 Cache。DRAM 用电容电荷表示一位,单元密度高、成本低,但电荷会泄漏,控制器必须刷新;访问 DRAM 时常先选中行再选中列,连续访问同一打开行时可复用行缓冲而较快。
Flash 的读、写、擦除粒度通常不同:可按页读取或编程,却往往需要按更大的擦除块先擦再写。由此,Flash 介质上的更新常采用“写到新位置、旧位置随后回收”的方式,控制器再通过映射和磨损均衡维持逻辑地址与物理位置的关系。做题时不能把 Flash 当成“断电不丢失的 DRAM”,也不能把它当成只能一次写入的传统 ROM。
理解器件时还应分开三件事:保存信息的物理介质、CPU 是否能直接按地址访问、以及操作系统把它作为主存还是外存管理。它们常有关联,但不是同一个概念。