存储系统

存储系统主要介绍计算机硬件结构中关于存储硬件介质的知识

存储器分类与层级

存储元件材料分类

  • 半导体存储器: DRAM、SRAM
  • 磁性存储器: 硬盘、磁带
  • 光存储器: CD-ROM

现代的固态硬盘是基于Flash的半导体存储器,而不是磁性存储器

可更改性分类

  • 可读可写存储器 RWM -- 包含 RAM
  • 只读存储器存储器 ROM

可保存性分类

存储器在断电情况下,信息能否保持

  • 易丢失性存储器: 断电后信息丢失 RAM
  • 非易丢失性存储器: 断电后信息保持 ROM 、基于ROM的半导体存储器(Flash/...)以及非半导体存储器

存储器的层级

存储器按相对CPU的访问距离、访问速度、大小分为

CPU -> 寄存器 -> Cache -> 主存 -> 辅存(磁盘等内部存储介质->光盘等外部存储介质)

存储器层次核心思想为: 上一级存储器作为下一级寄存器的高速缓存

主存储器

SRAM 与 DRAM

SRAM(Static RAM)与DRAM(Dynamic RAM)均为易失性存储器,主存主要使用DRAM,Cache主要使用SRAM

SRAM基于六晶体管MOS构成的双稳态触发器,结构复杂,集成度低,功耗大成本高,但是存取速度快,适用于小空间快读写的Cache

DRAM使用栅极电容的电荷存储信息,有电荷代表1,无电荷代表0,基本存储单元由一个晶体管与一个电容构成,结构简单且集成度远高于SRAM

DRAM的刷新

DRAM需要定期刷新以维持存储的信息,按照每一行进行行缓存(基于SRAM Cache),释放存储后立刻再生。

DRAM的存储矩阵

假设一个DRAM的存储容量为 2n×d2^n\times d 位,其存储矩阵的行列满足

2n=rc2^n = rc

根据地址引脚复用技术, DRAM的地址引脚个数为

l=max{r,c}=max{r,2nr}l=\max\{r,c\} = \max\{r,\frac{2^n}{r}\}

因此行和列的个数尽可能接近时,地址引脚最少。同时需要满足 rcr\leq c 以降低刷新开销

SDRAM

SDRAM(同步DRAM)的数据读写与系统时钟同步,以CPU-系统总线的高速率运行。

主存储器的结构

主存储器由核心的存储矩阵、存储器地址寄存器(与地址总线)、存储器数据寄存器(与数据总线)以及译码器、IO电路、控制电路等组件构成。主存储器通常是DRAM。

DRAM的地址译码器用于解析地址信号为高低电平,通常分为

  • 单译码器 -- 仅使用一个行译码器线性串联整个存储单元
  • 双译码器 -- 使用X(行)译码器与Y(列)译码器实现存储单元的定位

主存储器引脚与地址

对于一个2n×d2^n \times d位的 DRAM, 它的数据总线有dd 根,地址总线有nn 根。 寻址范围为 02n10\sim 2^n -1.

DRAM满足地址引脚复用技术, 因此DRAM的地址引脚个数为 n2\lceil\frac{n}{2}\rceil, 数据引脚个数为dd

副存储器

副存储器通常都是非易失性存储器

  • 只读存储器 ROM及衍生存储器
  • 磁性存储器
  • 光存储器

ROM与衍生存储器

ROM 是支持随机访问的非易失性存储器,结构简单且位密度高,但是读取速度慢且只支持有条件写入

根据制造工艺与可编程性分为

  • 掩膜ROM(MROM) -- 老古董,基于光刻技术制作,无法写入
  • 一次可编程ROM(PROM)
  • 可擦除可编程ROM(EPROM) -- 支持多次编程,擦写次数有限且需要紫外光处理

Flash是基于EEPROM(电可擦除可编程只读存储器)发展的,读取速度接近RAM但是写入速度较慢,在现代的主板上用于存储Bios,能进行读写。SSD是基于Flash构建的存储设备,能快速读写,功耗较低,且容量较大。

单体多字存储器

多模块存储器

多模块存储器是将不同存储器空间并行的方式。模块的地址分配方式的不同分为

  • 连续编址方式 -- 在一个模块内先线性纵向访问地址后再进行下一个模块的地址访问
  • 交叉编址方式 -- 根据模块号横向访问地址。

对于mm个模块的交叉编址方式满足

h=n%mh = n \% m

交叉存储器有两种启动方式

  • 轮流启动
  • 同时启动

每一个模块的一次读写的位数正好等于数据总线位数的时候,将总线周期长作为流水线启动节拍。当模块的存储周期为TT, 总线周期为τ\tau时,满足

m=Tτm = \lfloor\frac{T}{\tau}\rfloor

如果相邻的mm次访问的地址出现在一个模块中,可能出现访存冲突

同时启动方式是宽数据总线能读取一次并行的所有读写的总位数的情况下,在一次读写同时启动多个模块的读写。并行访问通常是以连续8个字节作为单位进行访问的,因此需要进行类型地址的对齐。