# 存储系统基本概念

# 存储器的层次结构

辅存中的数据要调入主存后才能被 CPU 访问

主存 - 辅存:实现虚拟存储系统,解决了主存容量不够的问题

Cache - 主存:解决了主存与 CPU 速度不匹配的问题

# 存储器的分类 (从不同角度进行分类)

存储器分类 (按层次):

  • 高速缓存 (Cache)
  • 主存储器 (主存、内存)
  • 辅助存储器 (辅存、缓存)

高速缓存与主存储器可以直接被 CPU 读写

存储器的功能:存放二进制信息

存储器分类 (存储介质):

  • 半导体存储器 (主存,Cache):以半导体器件存储信息
  • 磁表面存储器 (磁盘,磁带):以磁性材料存储信息
  • 光存储器:以光介质存储信息

存储器分类 (存取方式):

  • 随机存取存储器 (RAM):读写任何一个存储单元所需时间都相同,与存储单元所在的物理位置无关
  • 顺序存取存储器 (SAM):读写一个存储单元所需时间取决于存储单元所在的物理位置
  • 直接存取存储器 (DAM):既有随机存取特性,也有顺序存取特性。先直接选取信息所在区域,然后按顺序方式存取。
  • 相关联存储器 (Associative Memory),即可以按内容访问的存储器 (CAM):可以按照内容检索到存储位置进行读写,"快表" 就是一种相联存储器

串行访问存储器(包括 SAM 与 DAM):读写某个存储单元所需时间与存储单元的物理位置有关

存储器分类 (信息的可更改性):

  • 读写存储器 (Read/Write Memory)—— 即可读、也可写 (如:磁盘、内存、Cache)
  • 只读存储器 (Read Only Memory)—— 只能读,不能写 (如:实体音乐专辑通常采用 CD-ROM,实体电影采用蓝光光碟,BIOS 通常写在 ROM 中)

存储器分类 (信息的可保存性):

  • 断电后,存储信息消失的存储器 —— 易失性存储器 (主存、Cache)
  • 断点后,存储信息依然保存的存储器 —— 非易失性存储器 (磁盘、光盘)
  • 信息读出后,原存储信息被破坏 —— 破坏性读出 (如 DRAM 芯片,读出数据后要进行重写)
  • 信息读出后,原存储信息不被破坏 —— 非破坏性读出 (如 SRAM 芯片、磁盘、光盘)

# 存储器的性能指标

存储器的性能指标

  • 存储容量:存储字长 * 字长 (如 1M*8 位),MDR 位数反映存储字长
  • 单位成本:每位价格 = 总成本 / 总容量
  • 存储速度:数据传输率 = 数据的宽度 / 存储周期,数据的宽度即存储字长

存取时间 (TaT_a):存取时间是指从启动一次存储器操作到完成该操作所经历的时间,分为读出时间和写入时间

存取周期 (TmT_m):存取周期又称为读写周期或访问周期。它是指存储器进行一次完整的读写操作所需的全部时间,即连续两次独立地访问存储器操作 (读或写操作) 之间所需的最小时间间隔,存取周期 = 存取时间 + 恢复时间

主存带宽 (BmB_m):主存带宽又称数据传输率,表示每秒从主存进出信息的最大数量,单位为字 / 秒、字节 / 秒 (B/s) 或位 / 秒 (b/s)

# 主存储器的基本组成

# 半导体元件的原理

存储元:电容、MOS 管 (MOS 管可以理解为一种电控开关,输入电压达到某个阈值时,MOS 管就可以接通)

存储体以特殊形式连接起来就可以组成存储单元,存储单元堆叠成存储体

# 存储芯片的基本原理

存储器芯片的基本原理:

CPU 通过地址总线将地址传给 MAR,通过译码器,在2n2^n 个存储单元中选择一个存储单元,即译码器输出的是一条线为 1,其他为 0。每个地址对应译码器的一条输出线。

总容量 = 存储单元个数×\times 存储字长 =23×8bits=23×1Byte=8B2^3\times 8bits=2^3\times 1Byte=8B

控制电路:控制电路的传输过程,如当 MAR 中电信号稳定后,再控制 MAR 将信号传给译码器,当 MDR 中电信号稳定后,再控制 MDR 通过数据总线将数据传输出去

  • 片选线:CS\overline{CS}CE\overline{CE}(芯片选择信号;芯片使能信号),头上划线表示该信号低电平有效
  • 读控制线、写控制线:
    • 两根读 / 写线:WE\overline{WE} 允许写,OE\overline{OE} 允许读
    • 一根读 / 写线:WE\overline{WE} 低电平写,高电平读

一个内存条可能包含多块存储芯片

常见芯片描述:

8K×88K\times8 位,即213×8bit2^{13}\times8bit8K×18K\times1 位,即213×1bit2^{13}\times1bit64K×1664K\times16 位,即216×16bit2^{16}\times16bit

# 如何实现不同的寻址方式

总容量为 1KB,地址线:10 根

  • 按字节寻址:1K 个单元,每个单元 1B
  • 按字寻址:256 个单元,每个单元 4B
  • 按半字寻址:512 个单元,每个单元 2B
  • 按双字寻址:128 个单元,每个单元 8B

# DRAM 与 SRAM

DRAM 为动态 RAM,SRAM 为静态 RAM

DRAM 用于主存、SRAM 用于 Cache

# 存储元件不同导致的性能差异

DRAM 芯片:使用栅极电容存储信息

SRAM 芯片:使用双稳态触发器 (核心区别:存储元不一样) 存储信息

双稳态:

  • 1:A 高 B 低
  • 0:A 低 B 高
  • 读出数据,触发器状态保持稳定,是非破坏性读出,无需重写,读写速度更快
  • 每个存储元制造成本更高,集成度低,功耗大
  • 只要不断电,触发器的状态就不会改变

栅极电容:

  • 电容放点信息被破坏,是破坏性读出。读出后应有重写操作,也称 “再生”,读写速度更慢
  • 每个存储元制造成本更低,集成度高,功耗低
  • 电容内的电荷只能维持 2ms,即便不断电,2ms 后信息也会消失
  • 2ms 之内必须 "刷新" 一次 (给电容充电)
类型特点SRAM (静态 RAM)DRAM (动态 RAM)
存储信息触发器电容
破坏性读出
读出后需要重写?(再生)不用需要
运行速度
集成度
发热量
存储成本
易失 / 非易失性存储器易失 (断电后信息消失)易失 (断电后信息消失)
需要 "刷新"不需要需要
送行列地址同时送分两次送
常用做 Cache常用作主存

# DRAM 的刷新

  • 多久需要刷新一次?

    • 刷新周期:一般为 2ms
  • 每次刷新多少存储单元?

    • 以行为单元,每次刷新一行存储单元
    • 为什么要用行列地址?减少选通线的数量
  • 如何刷新?

    • 由硬件支持,读出一行的信息后重新写入,占用 1 个读 / 写周期
  • 在什么时刻刷新?

    • 假设 DRAM 内部结构排列成128×128128\times128 的形式,读 / 写周期 (存取周期) 0.5us,2ms 共 2ms/0.5us=4000 个周期
    • 思路一:每次读写完都刷新一行 (分散刷新)
      • 系统的存取周期变为 1us
      • 前 0.5us 时间用于正常读写;后 0.5us 时间用于刷新某行
    • 思路二:2ms 内集中安排时间全部刷新 (集中刷新)
      • 系统的存取周期还是 0.5us
      • 有一段时间专门用于刷新,无法访问存储器,称为访存 "死区"
    • 思路三:2ms 内每行刷新 1 次即可 (异步刷新)
      • 2ms 内需要产生 128 次刷新需求
      • 每隔 2ms/128=15.6us 一次,每 15.6us 内有 0.5us 的 "死时间"
      • 可在译码阶段刷新
  • 刷新由存储器独立完成,不需要 CPU 控制

# DRAM 的地址线复用技术

假设地址有 n 位,只需要 n/2 条地址线,分两次送,将行地址送入行地址缓冲器,列地址送入列地址缓冲器,再通过控制电路将行列地址送给行地址译码器与列地址译码器。

行、列地址分两次送,可使地址线更少,芯片引脚更少

# ROM

RAM 芯片 —— 易失性,断电后数据消失

ROM 芯片 —— 非易失性,断电后数据不会消失

  • MROM—— 掩模式只读存储器

    • 厂商按照客户需求,在芯片生产过程中直接写入信息,之后任何人不可重写 (只能读出)
    • 可靠性强、灵活性差、生产周期长、只适合批量定制
  • PROM—— 可编程只读存储器

    • 用户可用专门的 PROM 写入器写入信息,写一次后就不可更改
  • EPROM—— 可擦除可编程只读存储器

    • 允许用户写入信息,之后用某种方法擦除数据,可进行多次重写
  • UVEPROM—— 用紫外线照射 8~20 分钟,擦除所有信息

  • EEPROM—— 可用 "电擦除" 的方式,擦除特定的字

  • Flash Memory—— 闪速存储器 (注:U 盘,SD 卡就是闪存)

    • 每个储存元只需要单个 MOS 管,位密度比 RAM 高
    • 在 EEPROM 基础上发展而来,断电后也能保存信息,且可进行多次快速擦除重写
    • 注意:由于闪存需要先擦除再写入,因此闪存的 "写" 速度要比 "读" 速度更慢
  • SSD—— 固态硬盘

    • 由控制单元 + 存储单元 (Flash 芯片) 构成,与闪速存储器的核心区别在于控制单元不一样,但存储介质都类似,可进行多次快速擦除重写。SSD 速度快、功耗低、价格高。
    • 拓:手机辅存也使用 Flash 芯片,但相比 SSD 使用的芯片集成度高、功耗低、价格贵

# 计算机内的重要 ROM

  • 主板上的 BIOS 芯片 (ROM),存储了 "自举装入程序",负责引导装入操作系统 (开机)

  • 操作系统安装在辅存

  • 断电后,主存 (RAM) 内数据全部丢失;逻辑上,主存由 RAM+ROM 组成,且二者常统一编址

  • 很多 ROM 也具有 "随机存取" 的特性

# 双端口 RAM

存取周期:可以连续读 / 写的最短时间间隔

注:DRAM 芯片的恢复时间比较长,有可能是存取时间的几倍 (SRAM 的恢复时间较短)

双端口 RAM 作用:优化多核 CPU 访问一根内存条的速度

需要有两组完全独立的数据线、地址线、控制线。CPU、RAM 中也要有更复杂的控制电路

双端口对同一主存操作有以下 4 种情况:

  • 两个端口同时对不同的地址单元存取数据
  • 两个端口同时对同一地址单元读出数据
  • 两个端口同时对同一地址单元写入数据 (写入错误)
  • 两个端口同时对同一地址单元,一个写入数据,另一个读出数据 (读出错误)

解决方法:置 "忙" 信号为 0,由判断逻辑决定暂时关闭一个端口 (即被延时),未被关闭的端口正常访问,被关闭的端口延长一个很短的时间段后再访问

# 多体并行存储器

多体并行存储器:

每个模块都有相同的容量和存取速度

各模块都有独立的读写控制电路、地址寄存器和数据寄存器。它们既能并行工作,又能交叉工作。

每个存储体存取周期为 T,存取时间为 r,假设 T=4r

  • 高位交叉编址的多体并行存储器

    • 连续取 n 个存储字
      • 耗时 nT,耗时 5T
  • 低位交叉编址的多体并行存储器

    • 连续取 n 个存储字

      • 耗时 T+(n-1) r
      • 宏观上读写一个字的时间接近 r
    • 采用 "流水线" 方式并行存取 (宏观上并行,微观上串行)

      • 宏观上,一个存取周期内,m 体交叉存储器可以提供的数据量为单个模块的 m 倍
      • 存取周期为 T,存取时间为 r,为了使流水线不间断,应保证模块数mT/rm\ge T/r
      • 存取周期为 T,总线传输时间为 r,为了使流水线不间断,应保证模块数mT/rm\ge T/r

单体多字存储器:

每个存储单元存储 m 个字,总线宽度也为 m 个字,一次并行读出 m 个字

每次只能同时取 m 个字,不能单独取其中某个字。指令和数据在主存中必须是连续存放的