存储器层次结构

存储器概述

基本术语:

  • 记忆单元/存储基元/存储元/位元(Cell)
    • 具有两种稳态的能够表示二进制数码 0 和 1 的物理器件
  • 存储单元/编址单位(Addressing Unit)
    • 具有相同地址的位构成一个存储单元,也称为一个编址单位
  • 存储体/ 存储矩阵/存储阵列(Bank)
    • 所有存储单元构成一个存储阵列
  • 编址方式(Addressing Mode)
    • 按字节编址、按字编址
  • 存储器地址寄存器(Memory Address Register, MAR)
    • 用于存放主存单元地址的寄存器
  • 存储器数据寄存器(Memory Data Register, MDR/MBR)
    • 用于存放主存单元中的数据的寄存器

按工作性质/存取方式分类:

  • 随机存取存储器 Random Access Memory (RAM)
    • 按地址访问,每个单元读写时间一样,且与各单元所在位置无关。如:内存
    • 原意主要强调地址译码时间相同。现在的 DRAM 芯片采用行缓冲,因而可能因为位置不同而使访问时间有所差别。
  • 顺序存取存储器 Sequential Access Memory (SAM)
    • 数据按顺序从存储载体的始端读出或写入,因而存取时间的长短与信息所在位置有关。例如:磁带
  • 直接存取存储器 Direct Access Memory (DAM)
    • 直接定位到读写数据块,在读写数据块时按顺序进行。如磁盘。
  • 相联存储器 Associate Memory (AM),Content Addressed Memory (CAM)
    • 按内容检索到存储位置进行读写。例如:快表。

按存储介质分类:

  • 半导体存储器:双极型,静态 MOS 型,动态 MOS 型
  • 磁表面存储器:磁盘(Disk)、磁带 (Tape)
  • 光存储器:CD,CD-ROM,DVD

按信息的可更改性分类:

  • 读写存储器(Read/Write Memory):可读可写
  • 只读存储器(Read Only Memory):只能读不能写

按断电后信息的可保存性分类:

  • 非易失(不挥发)性存储器(Nonvolatile Memory)
    • 信息可一直保留, 不需电源维持。
    • 如 :ROM、磁表面存储器、光存储器等
  • 易失(挥发)性存储器(Volatile Memory)
    • 电源关闭时信息自动丢失。(如:RAM、Cache 等)

按功能/容量/速度/所在位置分类:

  • 寄存器(Register)
    • 封装在 CPU 内,用于存放当前正在执行的指令和使用的数据
    • 用触发器实现,速度快,容量小(几 ~ 几十个)
  • 高速缓存(Cache)
    • 位于 CPU 内部或附近,用来存放当前要执行的局部程序段和数据
    • 用 SRAM 实现,速度可与 CPU 匹配,容量小(几 MB)
  • 主存储器 MM(Main (Primary) Memory)
    • 位于 CPU 之外,用来存放已被启动的程序及所用的数据
    • 用 DRAM 实现,速度较快,容量较大(几 GB)
  • 外存储器 AM (辅助存储器 Auxiliary / Secondary Storage)
    • 位于主机之外,用来存放暂不运行的程序、数据或存档文件
    • 用磁表面或光存储器实现,容量大而速度慢

内存与外存的关系及其比较:

  • 外存储器(外存/辅存)
    • 存取速度慢
    • 成本低、容量很大
    • 不与 CPU 直接连接,先传送到内存,然后才能被 CPU 使用。
    • 属于非易失性存储器,用于长久存放系统中几乎所有的信息
  • 内存储器(内存/主存)
    内存储器(简称内存或主存)
    • 存取速度快
    • 成本高、容量相对较小
    • 直接与 CPU 连接,CPU 对内存中可直接进行读、写操作
    • 属于易失性存储器(volatile),用于临时存放正在运行的程序和数据

主存的结构:

主存的主要性能指标:

  • 按字节连续编址,每个存储单元为 1 个字节(8 个二进位)
  • 存储容量:所包含的存储单元的总数(单位:MB 或 GB)
  • 存取时间 TAT_{\mathrm{A}}:从 CPU 送出内存单元的地址码开始,到主存读出数据并送到 CPU(或者是把 CPU 数据写入主存)所需要的时间(单位:ns)
    • 分读取时间和写入时间
  • 存储周期 TMCT_{\mathrm{MC}}:连读两次访问存储器所需的最小时间间隔,它应等于存取时间加上下一次存取开始前所要求的附加时间
    • 因此,TMCT_{\mathrm{MC}}TAT_{\mathrm{A}}
    • 因为存储器由于读出放大器、驱动电路等都有一段稳定恢复时间,所以读出后不能立即进行下一次访问。
    • 就像一趟火车运行时间和发车周期是两个不同概念一样。

为了缩小存储器和处理器两者之间在性能方面的差距,通常在计算机内部采用层次化的存储器体系结构:

  • 速度越快,容量越小,越靠近 CPU。
  • CPU 可以直接访问内部存储器;而外部存储器信息要先被取到主存,再被 CPU 访问。
  • 数据一般只在相邻层之间复制传输,而且总是从慢速存储器复制到快速存储器。

半导体随机存取存储器

六管静态 MOS 管存储元件

非破坏性读出。

信息存储原理:看作带时钟的 RS 触发器。

  • 保持时:
    • 字线为 0(低电平)
  • 写入时:
    • 位线上是被写入的二进位信息 0 或 1
    • 置字线为 1
    • 存储单元(触发器)按位线的状态设置成 0 或 1
  • 读出时:
    • 置 2 个位线为高电平
    • 置字线为 1
    • 存储单元状态不同,位线的输出不同

单管动态 MOS 存储元件

读写原理:字线上加高电平,使 T 管导通。

  • 写「0」时,数据线加低电平,使 CS\mathrm{C_S} 上电荷对数据线放电;
  • 写「1」时,数据线加高电平,使数据线对 CS\mathrm{C_S} 充电;
  • 读出时,数据线上有一读出电压。它与 CS\mathrm{C_S} 上电荷量成正比。

优缺点:

  • 优点:电路元件少,功耗小,集成度高,用于构建主存储器
  • 缺点:速度慢、是破坏性读出(需读后再生)、需定时刷新

刷新:DRAM 的一个重要特点是,数据以电荷的形式保存在电容中,电容的放电使得电荷通常只能维持几十个毫秒左右,相当于 1M 个时钟周期左右,因此要定期进行刷新(读出后重新写回),按行进行(所有芯片中的同一行一起进行),刷新操作所需时间通常只占 1% ~ 2% 左右。

静态存储元件与动态存储元件比较

  • 静态存储元件:
    • MOS 管多,功耗大,集成度低;
    • 可保持记忆状态,无须刷新;
    • 读写速度快;
    • 价格昂贵。
  • 动态存储元件:
    • MOS 管少,功耗小,集成度高;
    • 必须定时刷新;
    • 读写速度慢;
    • 价格较低。

SRAM 芯片和 DRAM 芯片

存储器芯片由存储体、I/O 读写电路、地址译码和控制电路等组成。

  • 存储体/存储矩阵:存储单元的集合;
  • 地址译码器:将地址转换为译码输出线上的高电平;
  • 驱动器:X 选择线负载大,所以加驱动器;
  • I/O 控制电路:控制被选中单元的读/写,有放大信息的作用;
  • 片选信号:选中某个芯片
  • 读/写控制信号:控制被选中单元进行读或写。

存储体阵列组织*

字片式存储体阵列组织

位片式存储体阵列组织

CPU 与存储器之间的通讯方式

  • 异步方式(读操作)过程(需握手信号)
    • CPU 送地址到地址线,主存进行地址译码
    • CPU 发读命令,然后等待存储器发回「完成」信号
    • 主存收到读命令后开始读数,完成后发「完成」信号给 CPU
    • CPU 接收到「完成」信号,从数据线取数
    • 写操作过程类似
  • 同步方式的特点
    • CPU 和主存由统一时钟信号控制,无需应答信号(如「完成」)
    • 主存总是在确定的时间内准备好数据
    • CPU 送出地址和读命令后,总是在确定的时间取数据
    • 存储器芯片必须支持同步方式

SDRAM 芯片技术

SDRAM 是同步存储芯片,每步操作都在系统时钟控制下进行,有确定的等待时间。

同步方式:

  • DDR SDRAM:双倍数据速率同步动态随机存取存储器,每个时钟内传送两个数据
  • DDR2 SDRAM:双倍数据速率第二代同步动态随机存取存储器,每个时钟内传送四个数据
  • DDR3 SDRAM:双倍数据速率第三代同步动态随机存取存储器,每个时钟内传送八个数据

内存条和内存条插槽

  • 内存条:把若干片 DRAM 芯片焊装在一小条印制电路板上制成
  • 内存条插槽:存储器总线

内存条必须插在主板上的内存条插槽中才能使用(相同颜色插槽可以并行传输)。

存储器控制器、存储器总线、内存条、DRAM 芯片之前的连接:

存储器芯片的扩展

  • 字扩展(位数不变、扩充容量)
    • 用 16Kx8 位芯片扩成 64Kx8 位存储器需几个芯片?地址范围各为什么?
      • 字方向扩展 4 倍,即 4 个芯片。0000-3FFFH, 4000-7FFFH, 8000-BFFFH, C000-FFFFH,地址共 16 位,高两位由外部译码器译码生成 4 个输出,分别连到 4 个片选信号,片内地址有 14 位
    • 地址线、读/写控制线等对应相接,片选信号连译码输出
  • 位扩展(字数不变,位数扩展)
    • 用 4096x1 位芯片构成 4Kx8 位存储器需几个芯片?地址范围各是多少?
      • 位方向扩展 8 倍,字方向无需扩展。即 8 个芯片,地址范围都一样:000-FFFH,地址共 12 位,全部作为片内地址
    • 芯片的地址线及读/写控制线对应相接,而数据线单独引出
  • 字位同时扩展(字和位同时扩展)
    • 用 16Kx4 位芯片构成 64Kx8 位存储器需几个芯片,地址范围各是多少?
      • 字向 4 倍、位向 2 倍,8 个芯片。0000-3FFFH, 4000-7FFFH, 8000-BFFFH, C000-FFFFH
    • 地址线、读/写控制线等对应相接,片选信号则分别与外部译码器各个译码输出端相连

有两种容量扩展方式:交叉编址和连续编址。上述例子都是连续编址。

DRAM 芯片的扩展:

  • 由 8 片 DRAM 芯片构成
  • 每片 16Mx8 bits
  • 行地址、列地址各 12 位
  • 每行共 4096 列(8 位/列)
  • 选中某一行并读出之后,再由列地址选择其中一列送出

一个 32 位 int 型数据若存放在 8 ~ 11 这 4 个单元,则需要访问 1 次内存;若放在 6 ~ 9 这 4 个单元,则需要访问 2 次内存。因此数据要对齐存放。

主存地址 27 位,片内地址 24 位,与高 24 位主存地址相同。主存低 3 位地址的作用是确定 8 个字节中的哪个,即用来「选片」。

芯片内地址不连续,交叉编址,可同时读写所有芯片。

若要片内地址连续,则地址 A 应该这样划分:高 3 位为片选信号,中 12 位为行地址,低 12 位为列地址。

内部结构:

多模块存储器

多模块技术,即多个存储器同时工作。

双口存储器(能同时进行两个数据的读/写):两套独立的读/写控制电路、地址缓存、地址译码及地址线和数据线, 通常作为双口 RAM 或指令预取部件。

多模块存储器:

  • 包含多个小体;
  • 每个体有其自己的 MAR、MDR 和读写电路;
  • 可独立组成一个存储模块;
  • 可同时对多个模块进行访问。

根据不同的编址方式可分为:连续编址、交叉编址。

连续编址方式:

不能提高存储器的吞吐率。

交叉编址方式:

因为多个模块交叉存取,可以提高存储器的吞吐率。

交叉编制方式:轮流启动、同时启动

  • 每个存储模块一次读写的位数(即存储字)正好等于存储器总线中的数据位数(即总线传输单位),则采用轮流启动方式;
  • 具有 m 个体的多模块存储器,每隔 1/m 个存储周期启动一个体;
  • 存取速度提高 m 倍。

如果所有存储模块一次并行读写的总位数正好等于存储器总线中的数据位数,则可以采用同时启动方式。