Atri Website

Back

核心考点#

  • MDR、MAR 的位数对存储器容量和寻址范围的影响
  • 存储器的层次结构
  • 存储器的性能指标:存储时间、存储周期、存储带宽

存储器分类#

按存储介质分类#

存储元件需要有两个稳定的、可区分的物理状态,用于表示 0 和 1。常用的存储元件主要有半导体介质、磁性材料和光介质。

  • 半导体元件用电荷、电压状态存储信息,构成半导体存储器(主存、cache),如 SRAM、DRAM
  • 磁性材料用磁化方向表示数据,用于磁表面存储器(硬盘、磁带)
  • 光介质以反射率等方式记录信息,构成光存储器(光盘)

1

按存取方式分类#

按存取方式来分,存储器可以分成随机存储、顺序存取、直接存取和按内容存取几类。

随机存取存储器(random access memory,RAM)的特点是按地址访问存储单元,因为每个地址译码时间相同,所以,在不考虑芯片内部缓冲的前提下,每个单元的访问时间是一个常数,与地址无关。半导体存储器属于随机存取存储器,可用作 cache 和主存储器。

顺序存取存储器(sequential access memory, SAM)的特点是信息按顺序存放和读出,其存取时间取决于信息存放位置,以记录块为单位编址。磁带存储器就是一种顺序存取存储器,其存储容量大,但存取速度慢。

直接存取存储器(direct access memory,DAM)的存取式兼有随机访问和顺序访问的特点。首先可直接选取所需信息所在区域,然后按顺序方式存取,磁盘存储器就是如此。

上述 3 类存储器都是按所需信息的地址来访问,但有些情况下可能不知道所访问信息的地址,只知道要访问信息的内容特征,此时,只能按内容检索到存储位置进行读写。这种存储器称为按内容访问存储器(content addressed memory, CAM)或相联存储器(associative memory, AM)。成本高、容量小,常用于快表(TLB)、路由表等小容量告诉场景

2

按信息的可更改性分类#

3

RAM 为可读可写存储器,而 ROM 为只读存储器,但二者都使用随机存取方式。

按信息的可保存性分类#

4

  • 易失性存储器:RAM(SRAM、DRAM、SDRAM)
  • 非易失性存储器:ROM、Flash、磁盘、光盘、CD-ROM

主存储器的组成和基本操作#

下图是主存储器(main memory,MM)的基本框图。其中由一个个存储 0 或 1 的记忆单元(cell)构成的存储阵列是存储器的核心部分。该记忆单元也称存储元、位元,它是具有两种稳态的能表示二进制 0011 的物理器件。存储阵列(bank)也被称为存储体、存储矩阵。为了存取存储体中的信息,必须对存储单元编号,所编号码就是地址。编址单位(addressing unit)是指具有相同地址的那些位元构成的一个单位,可以是一字节或一个字。

对存储单元进行编号的方式称为编址方式(addressing mode),可以按字节编址,也可以按字编址。现在大多数通用计算机都采用字节编址方式,此时,存储体内一个地址中有一字节。也有许多专用于科学计算的大型计算机采用 64 位编址,这是因为科学计算中数据大多是 64 位浮点数。

记忆单元 cell:即代表一位比特的物理器件,也成为存储元、位元。

address unit:以同一个地址编码表示的、多个 cell 组成的单位。图中为以字节编址,因此一个 unit 有 8 个位元。例如编号为 00001 的 unit,存储的 8 个位元的内容为 01101001

8

指令执行过程中需要访问主存时,

  1. CPU 首先把被访问单元的地址送到主存地址寄存器(memory address register,MAR)中
  2. 然后通过地址线将主存地址送到主存中的地址寄存器,以便地址译码器进行译码,选中相应单元
  3. 同时,CPU 将 读/写信号 通过控制线送到主存的读写控制电路。
  4. 如果是写操作,CPU 同时将要写的信息送主存数据寄存器(memory data register, MDR)中,在读写控制电路的控制下,经数据线将信息写选中的单元;
  5. 如果是读操作,则主存读出选中单元的内容送数据线,然后被送到 MDR 中。

数据线的宽度与 MDR 宽度相同,地址线宽度与 MAR 的宽度相同。图中采用 64 位数据线,所以在字节编址方式下,每次最多可以存取 8 个单元(unit)的内容。地址线的位数决定了主存地址空间的最大可寻址范围,例如,36 位地址的最大寻址范围为023610~2^{36-1},地址从 0 开始编号。

存储器的层次结构#

某一种元件制造的存储器很难同时满足大容量、高速度和低成本的要求。比如双极型半导体存储器的存取速度快,但是难以构成大容量存储器。而大容量、低成本的磁表面存储器的存取速度又远低于半导体存储器,并且难以实现随机存取。因此,计算机把各种不同容量和不同存取速度的存储器按一定的结构有机地组织在一起,形成层次化的存储器体系结构。程序和数据按不同的层次存放在各级存储器中,整个存储系统在速度、容量和价格等方面具有较好的综合性能指标。图 7.2 是存储系统层次结构意图。

9

虽然图中给出的典型存取时间和存储容量会随时间变化,但这些数据反映了速度和容量之间的关系,以及层次化结构存储器的构成思想。速度越快,则容量越小、越靠近 CPU。CPU 可以直接访问内部存储器,而外部存储器的信息则要先取到主存,然后才能被 CPU 访问。

数据一般只在相邻两层之间复制传送,而且总是从慢速存储器复制到快速存储器才能被使用。传送的单位是一个定长块,因此需要确定定长块的大小,并在相邻两层间建立块映射关系。(缓存映射)

CPU 执行指令时,需要的操作数大部分都来自寄存器。如果需要从存储器中取(存)数据时,先访问 cache,如果不在 cache 中,则访问主存,如果不在主存中,则访问硬盘,此时,操作数从硬盘中读出送到主存,然后从主存送到 cache。

5

为了平衡存储系统在成本与容量、速度之间的矛盾,采用上图的存储体系。从上到下,存储设备的容量增大,运行速度下降,成本下降,CPU 访问频率下降。

该层次结构可分为两个层级:CPU \to 主存层 和 主存 \to 辅存层。其中,cache 和 主存直接与 CPU 交互,辅存需要通过主存才能和 CPU 交互(避免辅存极慢的存取速度导致 CPU 拥塞)。

以手机启动微信程序为例:微信的二进制数据开始存储在辅存里,

  1. 当启动微信(微信弹出地球和火柴人的启动 UI)后的 2~3 秒内,手机会把存储在辅存里的微信程序“拷贝”到主存上,然后 CPU 开始执行微信的代码,此时微信已经在运行。
  2. 当你和一个好友频繁聊天,那么你的输入、该微信窗口会大概率被从主存拷贝到 cache 里,供 CPU 以最快速度处理该通信请求。

从上面例子可以看出:

  1. 上层存储器作为下一层的缓存,即上层存储器的数据都是下层数据的拷贝(下层数据的子集副本)。
  2. 当 CPU 查找数据,优先从 cache 查找,按照“cache \to 主存 \to 辅存”的顺序逐层查找,所以启动微信时比较慢,但启动后与好友发消息时几乎是瞬时处理

按存取速度来说,寄存器 >> cache >> 主存 >> 辅存

两个层级不同的作用

CPU \to 主存层:由于 CPU 速度 >>>> 主存,因此引入一层缓存 cache,以期望提高存储的存取速度来匹配 CPU 的计算速度,即用于缓解 CPU 与主存速度不匹配的问题。在这一层,存取速度接近 cache,而容量和成本接近主存,因为 cache 存取速度较快,而 CPU 优先读取 cache 的内容,但主存的容量远大于 cache,cache 存储的数据又来源于主存,因此成本和容量接近主存。由硬件自动执行,对所有程序员透明。

主存 \to 辅存层:用于缓解容量不足的问题。虽然主存容量足够大了,但显然在辅存这里是小巫见大巫。以手机为例,常见的配置是主存 8G8G 加上辅存 256G256G,显然辅存容量 >>>> 主存。更何况并不是所有的程序都需要同时执行的,对于那些不需要执行的程序,没有必要为了将其存储在主存上浪费金钱。同理,该层的存取速度接近主存,容量和成本接近辅存。随着主存 -- 辅存体系的完善,形成了虚拟存储系统,程序员可调用的地址空间远大于实际硬件的容量。由硬件+操作系统完成,对应用程序员透明,因为做应用开发的不需要知道底层地址空间长啥样,使劲造虚拟内存就完了。

性能指标#

6

存取周期大于存取时间。每次读/写后,存储器需要一定时间 TbT_b 恢复内部状态。因此有以下关系:

Ta<Tm2TaT_a < T_m \leq 2T_a

MDR、MAR 的位数对存储器容量和寻址范围的影响:

MDR 位数是数据线宽度,MAR 位数是地址线位数。MDR 位数决定了一次存取可操作多少位数据,也是存储单元 cell 的数据位数(存储字长)。地址线位数代表了可寻址的范围。

64K×864K \times 8 位为例,MDR 位数是 8,MAR 位数是 16,因此可寻址范围是 022610 \sim 2^{26}-1 ,一共 216 Byte2^{16}\ Byte

64K=64×1024=26×21064K=64\times1024=2^6\times2^{10}

总结#

7

计算机组成原理:存储器概述
Author Juyao Huang
Published at March 23, 2026
Comment seems to stuck. Try to refresh?✨