存储器:存储器简介

如何理解寄存器、内存、外存在计算机中扮演的角色?

打个比方,我们在学生时代经常与大量书籍打交道,我们是如何管理这些书籍的呢?首先,我们的房间里有一个书柜,这就是外存;然后,我们每天上学会背一个书包,这就是内存;最后每上一门课,我们都会从书包中取出几本书放在书桌上,书桌就好比寄存器。如此一来,书柜、书包、书桌就配合完成了存取书籍的任务。

(好了,读到这你已经知晓了本篇文章的所有内容,可以划走了。但如果想要仔细理解计算机的存储系统,则建议继续往下读)

存储器的种类

1945年,冯·诺依曼(Von Neumann)在开发EDVAC(最早的一批计算机之一)时撰写了一篇综述报告——First Draft of a Report on the EDVAC。在这篇报告中,他阐明了一台计算机应有的结构,后世称为“冯·诺依曼架构(Von Neumann Architecture)”。

image-20240417155422959

经典的冯诺依曼架构由五大部分组成:控制器(Control unit)、运算器(Arithmetic/logic unit)、存储器(Memory Unit)以及输入输出设备(Input-Output (I/O) devices)。有些学者认为还应加上系统总线(System Bus)。其中,控制器和运算器合称中央处理器(Central Processing Unit, CPU);而存储器又分为内存(Memory)和外存(External Storage)。今天我们主要介绍存储器的分类和存储器的层级结构。

  • 内存(Memory):又名主存(Main/Primary Memory),主要由半导体器件组成,包含随机访问存储器(Random-Access Memory, RAM)、只读存储器(Read-Only Memory, ROM)和缓存(Cache)等。

  • 外存(External Storage):又名辅存(Secondary Memory),除闪存(Flash)以外,都由非半导体器件组成,主要为磁盘。磁盘包括硬盘(Disk)、光盘(Optical Disk)等。而我们常用的硬盘又有固态硬盘(SSD)和机械硬盘(HDD)。

  • 此外,在CPU内部还有一类存储器,称为寄存器(Register),也是由半导体器件制成,放置在运算单元附近,用于存放运算过程中的数据。但是由于其往往只是暂时性地存储一个字(word),且不存在寻址机制(addressing mechanism),我们一般不将其视作内存的一部分。

内存辨析

此处的“内存”和简体中文互联网上的手机“内存”不是一个东西,后者指的其实是手机的外存,属于误用。相比之下,香港和台湾的媒体工作者则严谨许多,它们会使用“记忆体“、”RAM“来指代手机的memory,而使用“存储容量”来指代手机的storage。

半导体存储器

内存中的RAM、ROM、Cache均由半导体存储器制成。其中RAM包括静态随机访问存储器(Static Random-Access Memory, SRAM), 动态随机访问存储器(Dynamic Random-Access Memory, DRAM)等。下图是半导体存储器的分类表:

image-20240417162633600

存储器层级结构(Memory Hierarchy)

简介

前文提到一台计算机内部有多种存储器,为什么需要那么多种?它们又是如何在一起配合工作的呢?

在经典的冯诺依曼架构(von Neumann architecture)下,对于软件设计者来说,内存总是越多越好,访存总是越快越好。然而现实是很残酷的,自从摩尔定律提出以来,处理器(processor)的发展速度就远远高于存储器。

以下是1980年以来processor与DRAM(常用的memory之一)的性能改善图(非专业读者可以略过这一段)。其中,processor的性能以访存间隔(the latency between memory references)的倒数来衡量,即单位时间内的访存数(memory requests per second);而DRAM的性能以访存延时(DRAM access latency)的倒数来衡量。注意,纵轴是对数坐标。

可以看到,与处理器性能的突飞猛进相比,缓慢改善的DRAM性能显得越来越拖后腿。这意味着在一个计算机系统中,采用单一的DRAM会导致整个系统的进程都堵在和存储器的交互上,造成性能的急剧下降。

img alt="" data-attachment-key="P6LYW5G8" data-annotation="%7B%22attachmentURI%22%3A%22http%3A%2F%2Fzotero.org%2Fusers%2F13823770%2Fitems%2FJW7V2YSP%22%2C%22annotationKey%22%3A%22PFXH4J2X%22%2C%22color%22%3A%22%23ffd400%22%2C%22pageLabel%22%3A%2280%22%2C%22position%22%3A%7B%22pageIndex%22%3A111%2C%22rects%22%3A%5B%5B132.692%2C269.049%2C485.769%2C603.087%5D%5D%7D%2C%22citationItem%22%3A%7B%22uris%22%3A%5B%22http%3A%2F%2Fzotero.org%2Fusers%2F13823770%2Fitems%2FIDRI9CZZ%22%5D%2C%22locator%22%3A%2280%22%7D%7D" width="588" height="556" src="attachments/P6LYW5G8.png" ztype="zimage">

在访问速度上,寄存器>SRAM>DRAM>Disk and Flash;但在面积和价格上,差不多也是寄存器>SRAM>DRAM>Disk and Flash。这意味着我们需要在性能与成本之间权衡。每种存储器都有适合它的应用场景,就像我们不能背着书柜去上学,也不能使用书桌来装所有书籍一样。

为解决上述问题,存储器层级结构(Memory Hierarchy)应运而生。它的诞生主要基于两点考量:

  • 区域性原理(locality)(非专业读者可以略过这一点):在空间上,一个程序通常与存储器的特定区域交互(spatial locality);在时间上,一个程序在一段时间内通常访存同一区域的数据(temporal locality)。
  • 内存技术性价比的权衡(trade-offs in the cost-performance of memory technologies):目前我们有很多种存储技术,比如SRAM、DRAM、Flash等等,每种存储器都各有优劣。为了博采众长,我们可以设计一个含有不同存储器的存储系统,在不同的层级结构部署不同的存储器。

下图是不同设备上的Memory Hierarchy。随着技术的发展,高端处理器有望采用基于embedded or stacked DRAM技术的L4 Cache。

img alt="" data-attachment-key="GSACG2JP" data-annotation="%7B%22attachmentURI%22%3A%22http%3A%2F%2Fzotero.org%2Fusers%2F13823770%2Fitems%2FJW7V2YSP%22%2C%22annotationKey%22%3A%2292QMJEF8%22%2C%22color%22%3A%22%23ffd400%22%2C%22pageLabel%22%3A%2279%22%2C%22position%22%3A%7B%22pageIndex%22%3A110%2C%22rects%22%3A%5B%5B68.25%2C147.722%2C497.25%2C599.972%5D%5D%7D%2C%22citationItem%22%3A%7B%22uris%22%3A%5B%22http%3A%2F%2Fzotero.org%2Fusers%2F13823770%2Fitems%2FIDRI9CZZ%22%5D%2C%22locator%22%3A%2279%22%7D%7D" width="715" height="754" src="attachments/GSACG2JP.png" ztype="zimage">

特点

我们在习惯上认为,越靠近CPU的存储器,其层级越高。

  • 高层级的存储器往往比低层级的存储器更小(总体面积而非存储单元)、更快、更贵。举个例子,L2 cache的访问速度是L3 cache的2~8倍,L3 cache比DRAM快至少5倍,而DRAM的访问速度又是disk的3000倍。
  • 高层级的存储器所存储的数据往往包含于低层级的存储器中。最低一级的存储器(disk, flash等)存有几乎全部的数据。这个性质被称为inclusion property。

设计目标

总的来说,存储器层级结构设计的目标是:

“provide a memory system with a cost per byte that is almost as low as the cheapest level of memory and a speed almost as fast as the fastest level.”

Computer Architecture: A Quantitative Approach

具体而言,传统优化目标是平均访存延时(average memory access time),然而近年来,功耗成为了优化的焦点。

参考

Computer Architecture, Sixth Edition: A Quantitative Approach, John L. Hennessy, David A. Patterson