续 > 存储器这个小话题(1)
前言
在上篇博文中我们将存储器分为了内部存储器(内存)和外部存储器(外存), 并将其进行了简单的分类。 在本文中我们主要讨论内部存储器, 外部存储器会在《存储器这个小话题(3)》一文中讲解。
内部存储器分为主存、 高速缓存和寄存器。 寄存器在 CPU 内部, 虽然它也是存储器, 但是这里不深入研究它, 不然就会牵涉出 CPU 这个大话题了。 所以本篇我们只讨论主存和高速缓存的部分。
RAM和ROM是什么
先来说主存, 为什么叫主存(Main Memory)? 很简单, 它是计算机存储系统中最主要的部分, 计算机系统的所有的软件都依赖它来运行。 主存分为 RAM 和 部分 ROM:
- RAM 即 Random Access Memory(随机存取存储器)。 随机存取是指当存储器中的数据被存储或读取时, 所需要的时间与这段信息所在的位置或所写入的位置无关, 简单的来说就是可以随存随取。 与之相对的是顺序存取存储器(Sequential Access Memory: SAM)。 顺序存储器在存取信息时, 只能按存储单元的位置, 顺序地一个接一个地进行存取, 最典型的顺序存储器就是磁带了。 RAM 还有一个特性, 它在掉电时无法保存数据,是一种易失性存储器(Volatile Memory)。
- 计算机系统主存系统还有一种能够在掉电后也能长期保存信息的存储器。 这种存储器就是非易失性存储器(Non-Volatile Memory)。 ROM 就是一种非易失性存储器, ROM 即 Read Only Access(只读存储器),ROM 内部信息(通常 ROM 内部放程序指令)在程序运行时无法写入, 只能读取, 这能有效地保护内部的信息。 早期的 ROM 是在出厂时就写入数据, 用户无法更改, 我们可以用纸带存储器类比这种ROM, 后来这种只能一次写入的 ROM 基本就被淘汰了, 现在的 ROM 基本都是可擦除的, 它的擦除需要借助擦除电路。 可能有人可能会觉得奇怪, 都可擦除了,为什么还叫 ROM? 其实只读的意思是在程序运行时, 程序只能读取ROM内部的信息,而不能更改它。 另外 ROM 这个词在生活中指向也比较混乱, 一些手机厂商会把手机中上的 Flash 存储器命名为手机 ROM, 这种说法其实并不准确, 在下一篇博文中会提到。 另外 ROM 这个词常常会和固件(Firmware)联系在一起, 这是有一定的道理的。 固件是「固化的软件」, 比如 BIOS。 厂商在出厂时就会把固件写入到 ROM 或者 Flash 中, 用户一般无需更改它。 固件一般是一些低级的控制程序, 它靠近硬件底层, 最常见的就是在嵌入式是系统当中。 所以我不怎么认同把手机刷机称为给手机刷固件包, 刷机一般刷的是操作系统, 操作系统是最大的系统软件, 它靠近应用层, 与固件并不是同一个东西。
RAM和ROM的种类
RAM
RAM 主要可以分为 DRAM 和 SRAM 两大类,其他还有 FRAM(Ferroelectric Random Access Memory, 铁电体存储器)、 DPRM(Dual Port Random Access Memory, 双端口随机存储器)等这些不是很常见的RAM, 这里不作详解, 有兴趣的读者可以查阅参考资料 [1]。
- DRAM(Dynamic Random Access Memory, 动态随机存取存储器)是最为常见的RAM。 DRAM 只能将数据保持很短的时间。 为了保持数据, DRAM使用电容存储, 所以必须隔一段时间刷新(Refresh)一次, 如果存储单元没有被刷新, 存储的信息就会丢失, 所以称之为动态。 SDRAM(Synchronous Dynamic Random Access Memory, 同步动态随机存取存储器)是DRAM中最常见的一种, 它的工作需要同步时钟, 内部命令的发送与数据的传输都以时钟为基准。 我们 PC 机中所使用的内存条就是 SDRAM, 不过单纯的 SDRAM 作为内存条很早就被淘汰了, 现在使用的都是基于老式 SDRAM 发展而来的 DDR SDRAM(Double Date Rate SDRAM, 双信道同步动态随机存取存储器), 我们生活中一般简称其为DDR。 老式 SDRAM 的特性是在一个同步时钟周期中, 在一个方波上升沿时进行一次操作(读或写)。 而 DDR 则引用了一种新的设计, 即在一个同步时钟周期中, 在方波上升沿时进行一次操作, 在方波的下降沿时也做一次操作。 所以在一个时钟周期中, DDR 则可以完成 SDRAM 两个周期才能完成的任务, 理论上同速率的 DDR 与 SDRAM 相比, 性能要超出一倍。 现在的 DDR 技术已经发展到第四代了, 容量也可以做到很大, 4 GB、 8 GB 的内存条很常见, 16 GB 的也可以买到。
- SRAM(Static Random Access Memory, 静态随机存取存储器) 虽然不如 DRAM 那样被人熟知, 但它的作用还是比较大的。 SRAM 是一种具有静止存取功能的内部存储器, 不需要通过刷新电路就能保存它内部存储的数据, 在快速读取和刷新时能够保持数据完整性, 这意味着它不需要软件初始化就能工作。 SRAM 内部采用的是双稳态电路的形式来存储数据, 所以 SRAM 的电路结构非常复杂。 制造相同容量的 SRAM 比 DRAM 的成本高的多。 正因为如此, 其发展受到了限制。 因此目前 SRAM 基本上用于 SoC 内部的缓存。
ROM
- 最早期的 ROM 是 Mask ROM(掩膜ROM), 这种 ROM 出厂前利用掩膜工艺对 ROM 进行一次烧录, 烧录完成后就无法进行任何更改。 后来发明了 PROM(Programmable Read-Only Memory,可编程只读存储器), 这种 ROM 可以支持用户使用专用的编程器进行一次编程, 但依旧无法擦除。 针对时代的需求, 出现了EPROM(Erasable Programmable Read-Only Memory, 可擦除可编程只读存储器)。 这种 ROM 使用了紫外线对其进行擦除, 在擦写次数上有了不错的进步, 但对于用户来说这种擦除方式依旧不是很方便。 最佳的方式就是电擦除, 所以 EEPROM(Electrically Erasable Programmable Read-Only Memory, 电可擦除可编程只读存储器, 也叫 E2PROM )出现了, 在很长的一段时间里, 这种 ROM 在非易失性存储器里处于主导地位。
PS:在某些嵌入式 SoC 中会有内部(Internal) RAM 和 ROM,即 iRAM(是一种SRAM) 和 iROM,这两种存储器主要用于系统的启动。
高速缓存(Cache)
高速缓存从功能上分为 I-Cache(Instructions Cache, 指令缓存)和 D-Cache(Data Cache)。 从层次上分为 L1 Cache、 L2 Cache 和 L3 Cache,L4 Cache 并不常见。缓存一般由 SRAM 制造, 可以有较快的读写速度。 关于缓存的分类大致说这些, 想了解工作原理的读者可以查阅参考资料 [2]。
2017 年 1 月 25 日
Kilento
参考资料
[2] CPU Cache:
https://en.wikipedia.org/wiki/CPU_cache