# 存储系统基本概念
# 存储器的层次结构
辅存中的数据要调入主存后才能被 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 位数反映存储字长
- 单位成本:每位价格 = 总成本 / 总容量
- 存储速度:数据传输率 = 数据的宽度 / 存储周期,数据的宽度即存储字长
存取时间 ():存取时间是指从启动一次存储器操作到完成该操作所经历的时间,分为读出时间和写入时间
存取周期 ():存取周期又称为读写周期或访问周期。它是指存储器进行一次完整的读写操作所需的全部时间,即连续两次独立地访问存储器操作 (读或写操作) 之间所需的最小时间间隔,存取周期 = 存取时间 + 恢复时间
主存带宽 ():主存带宽又称数据传输率,表示每秒从主存进出信息的最大数量,单位为字 / 秒、字节 / 秒 (B/s) 或位 / 秒 (b/s)
# 主存储器的基本组成
# 半导体元件的原理
存储元:电容、MOS 管 (MOS 管可以理解为一种电控开关,输入电压达到某个阈值时,MOS 管就可以接通)
存储体以特殊形式连接起来就可以组成存储单元,存储单元堆叠成存储体
# 存储芯片的基本原理
存储器芯片的基本原理:
CPU 通过地址总线将地址传给 MAR,通过译码器,在 个存储单元中选择一个存储单元,即译码器输出的是一条线为 1,其他为 0。每个地址对应译码器的一条输出线。
总容量 = 存储单元个数 存储字长 =
控制电路:控制电路的传输过程,如当 MAR 中电信号稳定后,再控制 MAR 将信号传给译码器,当 MDR 中电信号稳定后,再控制 MDR 通过数据总线将数据传输出去
- 片选线: 或(芯片选择信号;芯片使能信号),头上划线表示该信号低电平有效
- 读控制线、写控制线:
- 两根读 / 写线: 允许写, 允许读
- 一根读 / 写线: 低电平写,高电平读
一个内存条可能包含多块存储芯片
常见芯片描述:
位,即; 位,即; 位,即
# 如何实现不同的寻址方式
总容量为 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 内部结构排列成 的形式,读 / 写周期 (存取周期) 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 个存储字
低位交叉编址的多体并行存储器
连续取 n 个存储字
- 耗时 T+(n-1) r
- 宏观上读写一个字的时间接近 r
采用 "流水线" 方式并行存取 (宏观上并行,微观上串行)
- 宏观上,一个存取周期内,m 体交叉存储器可以提供的数据量为单个模块的 m 倍
- 存取周期为 T,存取时间为 r,为了使流水线不间断,应保证模块数
- 存取周期为 T,总线传输时间为 r,为了使流水线不间断,应保证模块数
单体多字存储器:
每个存储单元存储 m 个字,总线宽度也为 m 个字,一次并行读出 m 个字
每次只能同时取 m 个字,不能单独取其中某个字。指令和数据在主存中必须是连续存放的