
所有计算的核心都是存储器,即机器存储和调用信息的能力。但是,一块简单的硅芯片是如何保存一个抽象的比特——一个“1”或一个“0”的呢?这个根本性问题揭示了设计哲学上的一大分歧,催生了两个截然不同的存储器家族:静态 RAM 和动态 RAM。本文旨在填补一个知识鸿沟:从仅仅知道何为计算机使用的 RAM,到理解这些不同类型的工作原理,以及为何它们的特性塑造了我们周围的整个技术世界。在接下来的章节中,我们将踏上一段从晶体管层面到系统层面的旅程。第一章“原理与机制”将剖析 SRAM 和 DRAM 单元的内部工作方式,探索支配其稳定性、速度和密度的物理学原理。随后,第二章“应用与跨学科联系”将拓宽我们的视野,揭示这些基础的存储器原理如何决定了一切——从你的计算机如何启动,到科学家如何解决对于任何单台机器的内存而言都过于庞大的问题。
计算机思考能力的核心是其记忆能力。但具体来说,一块无生命的硅芯片是如何保存一条信息——一个抽象的比特,一个 1 或一个 0 的呢?如果我们剥去层层复杂性,会发现自然界提供了两种截然不同的存储比特的哲学,而这种二分法催生了随机存取存储器的两大分支:静态 RAM (SRAM) 和动态 RAM (DRAM)。
想象一下,你想让一扇门保持打开状态。一种方法是在门下楔入一个沉重的门挡。只要门挡在那里,门就保持敞开。这是一种稳定、自我维持的状态。这就是 SRAM 的哲学。另一种方法是每隔几秒钟推一下门,以对抗试图关上门的弹簧。这种状态是暂时的、稍纵即逝的,需要持续的努力来维持。这就是 DRAM 的哲学。让我们来探索这两种美妙而又相互竞争的思想。
如何构建一个电子“门挡”?一个电路如何能在没有持续指令的情况下保持自身的状态?答案是一个非常优雅的概念,称为双稳态多谐振荡器。可以把它想象成两个人背靠背地相互倚靠。有两种稳定姿势:A 可以靠在 B 身上,或者 B 可以靠在 A 身上。如果其中一人开始摇晃,另一个人的重量会将其推回,恢复平衡。这个系统“倾向于”处于这两种状态之一。
在电子学中,我们用两个称为反相器的简单逻辑门来构建它。反相器的作用是翻转信号:高电压 (1) 变成低电压 (0),反之亦然。一个 SRAM 单元由两个这样的反相器连接成一个环路构成,第一个反相器的输出馈送到第二个反相器的输入,而第二个反相器的输出又反馈到第一个反相器的输入。
让我们来追踪一下逻辑。如果第一个反相器的输出是 1,它会迫使第二个反相器的输入为 1。第二个反相器尽其职责,输出一个 0。这个 0 被反馈到第一个反相器的输入,然后第一个反相器尽职地输出一个 1。看到了吗?这个环路自我增强!状态(第一个输出为 1,第二个输出为 0)是完全稳定的。相反的状态(第一个输出为 0,第二个输出为 1)也同样稳定。这两种自我维持的状态就是单元的 1 和 0。只要供电,电路就会像岩石一样坚守其比特,因此得名“静态”。
这种稳定性是有代价的。标准的 SRAM 单元,被称为 6T 单元,需要六个晶体管来创建这个交叉耦合反相器锁存器,并提供读写访问。对于仅存储一个比特来说,这是一个相对复杂的结构。虽然它速度快得惊人且可靠,但它占用了大量宝贵的硅片面积。此外,虽然我们称之为“静态”,但它并非没有能量需求。就像相互倚靠的人一样,需要持续微小的努力来维持姿势。这体现在流经晶体管的漏电流上,导致了持续但微小的静态功耗。
现在,让我们转向另一种哲学:那扇需要周期性推动的门。这就是 DRAM 的世界,它是极简主义工程的杰作。一个 DRAM 单元不是由六晶体管锁存器构成,而仅由一个晶体管和一个电容器组成——这是一个设计用来存储电荷的微小元件。其原理简单得令人惊叹:一个充电的电容器代表 1,一个放电的电容器代表 0。
晶体管充当守门人或开关。要写入 1,系统会沿着一条称为字线的导线发送一个“选择”信号,从而打开晶体管。这将电容器连接到另一条导线——位线上,位线此时保持高电压。电荷从位线流入电容器,将其充满。要写入 0,过程相同,但位线保持低电压,从而将电容器放电。要读取该比特,再次打开晶体管,将电容器连接到位线,使其存储的电荷溢出。然后,一个灵敏的放大器测量这次微小的电荷溢出是使位线电压轻微上升还是下降,从而揭示存储的状态。
这里有一个深刻的观点:我们构建的数字世界是建立在模拟基础之上的。电容器中的电荷量不是离散的 1 或 0;它是一个连续的模拟量。一个“充满”的电容器并非完美充满,更重要的是,它不会一直保持充满状态。每个电容器都不可避免地会漏电。这种漏电可以建模为电容器通过一个非常大的并联电阻 放电。电容器两端的电压 最初充电至 以表示 1,它会根据经典的 电路方程随时间指数衰减:
存储系统必须在电压衰减到无法可靠地与 0 区分之前读取该比特。如果区分 1 和 0 的阈值是供电电压的一半(即 ),那么系统可以等待的最长时间就是当 时。解出这个方程可以得到一个优美且意义深远的结果:
这个方程告诉我们,一个存储比特的最大寿命与漏电电阻和电容成正比——也就是与电容器的质量和尺寸成正比。因为这个时间通常只有几十毫秒,所以内存控制器必须进行一个持续而紧张的过程,称为刷新:读取每个比特并立即将其写回,在它消失于模糊状态之前恢复其电荷。这就是为什么这种存储器被称为“动态”的。它的状态在不断变化。
因此,我们有两种相互冲突的设计:坚固、快速但体积庞大的 SRAM,以及极简、密集但会漏电的 DRAM。这不是一个谁比谁“更好”的故事;这是一个经典的工程权衡,它塑造了每一台计算机的体系结构。
最显著的区别在于密度和成本。因为一个 DRAM 单元(1个晶体管,1个电容器)比一个 SRAM 单元(6个晶体管)简单得多,所以你可以在单个芯片上集成更多的 DRAM 单元。即使考虑到电容器所需的面积,使用相同技术制造的 DRAM 阵列的密度也可以比 SRAM 阵列高出三倍以上。这种密度上的惊人差异直接转化为更低的单位比特成本。这也是你的电脑或手机中数 GB 的主存都由 DRAM 构成的一个最重要原因。如果用 SRAM 构建,我们根本无法负担得起那么大的内存。
DRAM 密度的代价是速度和复杂性。读取一个 DRAM 单元的过程——预充电位线、共享电荷、放大一个微小的电压变化——本质上比读取 SRAM 锁存器强大而稳定的状态要慢。这就是为什么计算机中最快、最宝贵的存储器,即紧邻处理器核心的 CPU 缓存,是由 SRAM 构成的。
此外,还有刷新周期的开销。这种持续的“家务管理”消耗功率,并且至关重要的是,消耗时间。对于一个典型的 DRAM 芯片,内存大约有 3.3% 的时间被刷新操作占用。在这些短暂的时刻,CPU 无法访问内存。虽然这看起来很小,但在一个每秒执行数十亿次操作的系统中,这是工程师必须考虑的性能损失。这种刷新功耗是 DRAM 静态功耗的主要来源,与 SRAM 稳定、低水平的漏电流形成鲜明对比。
故事并未因这些物理限制而结束。工程学的美妙之处在于它如何设计出巧妙的系统来减轻自然的约束。DRAM 的刷新惩罚就是一个完美的例子。
一个现代内存模块不是一个巨大的、单一的阵列。相反,它被组织成多个独立的存储体 (bank)。可以把它想象成一个有几个独立阅览室的图书馆。刷新命令不必一次性封锁整个图书馆。一个智能的内存控制器可以采用一种称为交错刷新或“隐藏刷新”的策略。
控制器可以向存储体1发出一个刷新命令,使其暂时繁忙。但在存储体1“整理”期间,CPU 仍然可以向存储体2、存储体3或任何其他可用的存储体发出读或写请求。通过巧妙地在所有不同的存储体之间调度必要的刷新命令,并将它们与活跃的内存请求交错进行,控制器可以有效地“隐藏”大部分刷新延迟。系统继续工作,一个存储体的短暂不可用被其他存储体的活动所掩盖。
这就是现代计算之舞:对漏电电容器基本物理学()的深刻理解,导致了一个严苛的工程问题(需要刷新),这反过来又激发了一个优雅的算法解决方案(交错刷新),从而使我们强大的计算机成为可能。从单个电子被储存在电容器上,到你屏幕上的无缝体验,这段旅程是物理学与人类智慧精妙互动的最好证明。
在我们游览了存储器的微观机制——SRAM 锁存器的不懈翻转和 DRAM 电容器中电荷的精巧舞蹈之后,人们可能会倾向于将这些知识归档为纯粹的工程细节。但这样做将完全错失其要点。随机存取存储器的原理不仅仅是关于制造计算机芯片;它们是基本的约束和推动力,塑造了整个计算领域,从打开手机这个简单的动作到模拟宇宙的宏伟挑战。RAM 不仅仅是一个组件;它是整个计算戏剧上演的舞台。这个舞台的大小、速度和特性决定了可以上演什么样的剧目。
每次你打开电脑,你都会见证一场涉及不同种类存储器的、优美的两幕剧。演出不能在空无一物的舞台上开始。首先,必须读取存储在非易失性存储器(如 ROM 或闪存)中的一小段不可更改的脚本。这就是“引导加载程序”。它唯一的工作就是进行快速的系统检查,然后,最重要的是,布置舞台。它通过将其永久库(硬盘或固态硬盘)中的主要演出——整个操作系统——加载到 RAM 这个广阔而空旷的舞台上。只有当操作系统完全加载到 RAM 中,真正的演出才能开始,CPU 从现在位于这个活动工作区中的代码获取指令。RAM 是易失性的,每次开机都是一块白板,这正是为什么这个加载序列是任何数字设备的第一个仪式。
但当演出暂停时会发生什么?想想你的智能手机。为了节省宝贵的电池寿命,它大部分时间都处于“睡眠”状态。在这种休眠期间,让主内存控制器——主处理器中一个耗电的部件——保持唤醒状态,仅仅为了监督 DRAM 持续的刷新需求,将是极其低效的。取而代之的是,系统使用了一个聪明的技巧。它告诉 DRAM 模块:“接下来一段时间你得靠自己了!”DRAM 进入“自刷新”模式,使用其自身的内部低功耗电路来维持其基于电容器的存储内容。这使得主处理器及其内存控制器可以进入深度睡眠,从而节省了大量的系统级功耗。这是一个分布式责任的完美例子,让设备在不失忆的情况下得以休息。
如果 RAM 是一个舞台,我们如何为现代软件的宏大制作搭建一个足够大的舞台呢?我们很少能得到一个尺寸完美的单一内存芯片。相反,我们像石匠一样,用标准尺寸的小砖块砌成一堵大墙。为了获得所需的字宽(例如,从 4 位宽的芯片扩展到 8 位系统),我们将芯片并排并行放置。为了获得所需的深度或地址数量,我们堆叠这些并行存储体,并使用巧妙的寻址逻辑来选择与哪个存储体通信。通过在这两个维度——宽度和深度——上组合芯片,工程师可以用一批相同的小型组件构建出任何所需大小的存储系统。
现在来看一个更深层次的想法。如果舞台本身不是固定的呢?如果内存可以定义剧院的结构本身呢?这就是现场可编程门阵列 (FPGA) 令人脑洞大开的现实。许多 FPGA 是“基于 SRAM 的”,这意味着它们的内部配置——是什么让一块硅片充当加法器、乘法器或复杂状态机——是由存储在数百万个微小 SRAM 单元中的数据定义的。FPGA 的“比特流”不是要处理的数据;它是硬件本身的蓝图。因为这种 SRAM 是易失性的,所以 FPGA 在上电时是一块白板。就像计算机加载其操作系统一样,FPGA 必须首先从外部非易失性存储芯片加载其配置蓝图,然后才能执行其功能。在这里,RAM 从一个单纯的数据持有者提升为逻辑的组织结构本身,一种可编程的现实。
在某些演出中,时机就是一切。想象一个用于监控摄像头的实时视频处理系统。它不能错过任何一帧。然而,它的 DRAM 存储器必须被刷新。如果内存控制器使用“突发刷新”——暂停所有操作以一次性刷新所有内存行——它将造成一个长时间的、周期性的“停电”。对于视频处理器来说,这将是一场灾难性的、不可预测的延迟,导致卡顿和数据丢失。更优雅的解决方案是“分布式刷新”,即控制器在正常操作之间的微小间隙中一次刷新一行。虽然花在刷新上的总时间相同,但这种策略将一个长的、干扰性的暂停分解成数千个难以察觉的微暂停。它确保了舞台始终可用,提供了实时系统所要求的平滑、可预测的延迟。
现在,让我们把我们的舞台带到可以想象的最恶劣的环境中:外太空。一颗卫星的控制系统,可能是在一个基于 SRAM 的 FPGA 上实现的,不断受到高能粒子的轰击。如果其中一个粒子,即一次“单粒子翻转” (SEU),击中了一个保存 FPGA 配置的 SRAM 比特,会发生什么?结果是可怕的:硬件蓝图被悄无声息地改写了。控制推进器或调整太阳能电池板方向的逻辑可能会被瞬间且不可预测地改变。这是在太空中使用可重编程、基于 SRAM 的技术所面临的一个独特而重大的风险。RAM 的易失性和比特可寻址性,在地球上对于可重构性非常有用,此时却成了一个弱点。因此,关键的太空任务通常依赖于一次性可编程的“反熔丝”FPGA,其配置被物理性地烧录进去,不受此类配置改变事件的影响。
当你想解决的问题对于你的 RAM 来说实在太大了,会发生什么?当地质学家想要模拟地壳中的应力,或者生物信息学家想要比较数千个物种的基因组时,所需的数据量可以轻易超过太字节,远超可用的吉字节 RAM。这就是“外存”计算的世界,算法设计者必须将 RAM 不视为无限资源,而是一个小巧而宝贵的工作空间。
此时的游戏不再仅仅是最小化计算量,而是要最小化 RAM 与磁盘之间极其缓慢的流量。在计算地质学和生物信息学等截然不同的领域中开发的解决方案,在概念上是相同且优美的。算法被重新设计,以能在 RAM 中容纳的数据“瓦片”或“块”上工作。它在一个瓦片上执行尽可能多的工作,然后将其换出以处理下一个瓦片。对于地质学中的一个巨型矩阵问题,这可能涉及一种“分块 Cholesky 分解”算法。对于比对数千个 DNA 序列,这涉及对问题进行分区,将中间结果流式传输到磁盘,并使用巧妙的“外部归并排序”来组织数据以进行最终分析。
在这个领域,算法的性能不仅是问题大小 的函数,还是 RAM 大小 的函数。许多此类问题的 I/O 主导成本被发现与 之类的表达式成正比,其中 是磁盘块大小。这个信息清晰而深刻:如果你将超级计算机的可用 RAM 增加一倍,你不仅仅是让问题解决得快一点;你从根本上减少了数据移动的瓶颈,从而显著提高了性能。RAM 大小成为算法设计本身的核心角色。
最后,让我们再退后一步,思考 RAM 最根本的角色。想象一个与外部世界隔离的、简单的、确定性的计算机程序。在任何给定时刻,这个计算宇宙的完整“状态”——预测其整个未来所需的一切——都被其 RAM(以及少数几个 CPU 寄存器)中保存的精确的 1 和 0 的模式所捕获。程序的执行无非是在一个巨大但有限的可能状态图中穿行。系统时钟滴答作响,CPU 遵循其确定性规则,从 RAM 中读取当前状态并写入下一个状态。这是一个完美的离散时间、离散状态的确定性系统的例子。时间的流动是离散的(时钟周期),可能状态的数量是有限的(例如,对于 位 RAM 有 种状态),并且通过这个状态空间的路径是完全确定的。
从这个角度看,RAM 的终极角色得以揭示。它不仅仅是一个舞台,也不仅仅是一个蓝图。它正是数字世界的本质,是在时钟的每一次滴答声中承载我们计算宇宙状态的媒介。它的物理特性和逻辑组织不仅仅是技术琐事;它们是这些宇宙的物理定律,塑造着从一个操作系统的诞生到最宏伟的科学模拟的一切。