7. 内部存储器
1. 回顾:存储器
存储器(Memory)由一定数量的单元构成,每个单元可以被唯一标识,每个单元都有存储一个数值的能力
- 地址:单元的唯一标识符(采用二进制)
- 地址空间:可唯一标识的单元总数
- 寻址能力:存储在每个单元中的信息的位数,即内存中能被单独识别并独立存放一个数据的最小内存空间
- 大多数存储器是字节寻址的,而执行科学计算的计算机通常是64位寻址的,也就是264
- 字节可寻址(64b/32b)、字可寻址(8b)、按位寻址(1b)
- 寻址能力的影响因素:归根结底是因为设计时的地址的长度。
- 地址总线的根数
- 寻址机制的不同
- 计算机的内存真正能真正使用的内存大小的影响因素:
- 地址空间
- 寻址能力
- 最终是由上面两个之一来决定的。
- 例子:4G内存的电脑加上8G的内存条,不会变快,因为寻址能力不会变强,被制约。
- 地址空间越大,容量会越大吗?
- 不一定,每个单元(屋子)的大小不同。
2. 半导体存储器
用半导体芯片作主存储器是目前的主流做法
2.1 位元(memory cell)
半导体存储器的基本元件,用于存储1位数据
2.2 类型
2.3 随机存取存储器(RAM)
Random-Access Memory(RAM):随机访问:对存储器中任意数据的访问所花费的时间与数据所在位置无关。
- 特性:
- 可以简单快速地进行读/写操作
- 易失的(Volatile)(断电就丢数据)
- 类型:
- 静态RAM(SRAM)
- 动态RAM(DRAM)
2.3.1 静态RAM(SRAM)
- 不会漏电,只要有电,不需要刷新数据就可以保存
- 用传统的触发器逻辑门来存储数据
- 相同的逻辑部件被应用在处理器中
- 它会在有电的时候存储数据(没电就丢数据)
2.3.2 动态RAM(DRAM)
- 电容器中存在或不存在电荷被识别为1或者0
- 需要时常刷新来保证数据
- 电容器有丢失电荷的倾向
- 存在一个阈值来决断他是0还是1
- 它本质上是一个模拟设备
解决漏电问题:我们刷新,给该有电的电容充电。
- 刷新是异步刷新。
2.3.3.1 高级的DRAM架构
- 问题:传统DRAM是异步的(频率通常不超过66MHz)
- 处理器向内存提供地址和控制信号,表示内存中特定单元的一组数据应该被读出或写入DRAM
- DRAM执行各种内部功能,如激活行和列地址线的高电容,读取数据,以及通过输出缓冲将数据输出,处理器只能等待这段延迟,即存取时间
- 延时后,DRAM才写入或读取数据
- 解决:高级DRAM架构是同步的
- 同步DRAM(Synchronous DRAM, SDRAM)(频率通常不超过133MHz)
- 双速率SDRAM(Double-Data-Rate SDRAM,DDR SDRAM / DDR)(DDR5频率可达4800MHz)
2.3.3.2 同步DRAM(SDRAM)
DDR SDRAM
Double Data Rate:每个时钟周期发送两次数据,一次在时钟脉冲的上升沿, 一次在下降沿
DDR ➔ DDR2 ➔ DDR3 ➔ DDR4 ➔ DDR5
- 增加操作频率
- 增加预取缓冲区
2.3.3 SRAM和DRAM对比
- 无论多贵的电脑里面,内存用的都是DRAM。
- SRAM的集成度低,造成其体积比较大。
- DRAM的集成度高。
- DRAM多用于主存,SRAM多用于寄存器。
相同点
- 易失性
不同点
DRAM有比SRAM更简单更小的单元,但是需要周期性的刷新
DRAM相对于SRAM更加高密度并且廉价
DRAMS经常被用在数据量比较大的存储的时候
SRAM一般会比DRAM访问更快
Cache用SRAM,主存用DRAM
2.4 只读存储器(ROM)
Read-only memory(ROM):一种可以长期保存信息的存储器,具有断电后信息仍可继续保存的特点,在正常工作时只可读取数据,而不能写入数据
- 特性:
- 非易失的:不要求供电来维持数据
- 可读,但不能写入新数据
- 应用:微程序设计,库子程序,系统程序,函数
- 问题:
- 无出错处理机会:如果有一位出错,整批的ROM芯片只能报废
- 用户无法写入数据:唯一的数据写入机会在出厂时完成
2.5 可编程ROM(PROM)
Programmable ROM
- 特性:
- 非易失的
- 只能被写入一次
- 写过程是用电信号执行
- 需要特殊设备来完成写或“编程”过程
- 与ROM的对比
- PROMs提供了灵活性和便利性
- ROM对于大容量生产运行仍然具有吸引力,在量产的时候PROM成本高
2.6 主要进行读操作的存储器
Read-Mostly Memory
- 特性:
- 非易失的
- 写操作与读操作相比,较为困难
- 应用:
- 读操作比写操作频繁得多的场
2.6.1 光可擦除/可编程只读存储器(EPROM)
Erasable programmable read-only memory(EPROM)
- 特性:
- 电写入读出
- 在写入前,擦除需要专门的紫外线仪器
- 所有的存储单元会被处理成相同的状态
- 耗时20min
- 与PROM对比:
- 比较贵,但是可以被更新
- 写入时电写入,擦除使用紫外线照射20min左右,清除全部数据
2.6.2 电可擦除/可编程只读存储器(EEPROM)
Electrically erasable programmable read-only memory(EEPROM)
- 特性:
- 可以在任何时候写入和更新字符,不需要擦除
- 只更新寻址到的一个或多个字节
- 写操作每字节需要大约5ms,而读一个字节大约0.5μs
- 每次擦除仅需4~6ms,可擦除百万次
- 与EPROM对比:
- EEPROM比EPROM贵,密度低
2.6.3 快闪存储器(Flash Memory)
- 特性:
- 电可擦除:与EEPROM原理类似,优于EPROM
- 可以在块级擦除,不能在字节级擦除:优于EPROM,不如EEPROM
- 需要先擦除再写入
- 达到了和EPROM一样的高密度
3. 从位元到主存
3.1 寻址单元
- 寻址单元(Addressable unit):由若干相同地址的位元组成
- 每个寻址单元内的数据不能进行局部修改,都是整体修改。
3.2 芯片
3.3 存储阵列
存储阵列(Memory Array):由大量寻址单元组成
注意上图的存储列阵的一个框代表的是一个寻址单元,而不是一个位元
为什么是用方形结构?
- 很简单,因为比线性省电
选中就是对行和列进行加电,然后同时被加电的地方被选中。
能够随机访问的原因?
- 因为我们都是读取地址,然后找到行,找到列,然后选中。所以无论什么单元,都是一样的访问时间。
3.3.1 如何寻址
3.3.2 如何刷新
约束:刷新会占用片选线、地址线、地址译码器
3.3.2.1 集中式刷新(Centralized refresh)
- 停止读写操作,并逐行刷新
- 刷新时无法操作内存(死区)
3.3.2.2 分散式刷新(Decentralized refresh)
- 在每个存储周期中,当读写操作完成时进行刷新
- 一次读写刷新一行,逐行刷新
- 会增加每个存储周期的时间
3.3.2.3 异步刷新(Asynchronous refresh)
- 每一行各自以固定间隔(小于最大刷新周期,毫秒级)刷新
- 将DRAM的刷新安排在CPU对指令的译码阶段,可有效避免死区
- 效率高:常用
3.4 模块组织
地址线:用来地址寻址
数据线:用来把地址里的数据传进来传出去
- 位扩展:地址线不变,数据线增加
- 使用 8 块 4K1 bit 的芯片组成 4K8 bit 的存储器
- 字扩展:地址线增加,数据线不变
- 使用 4 个 16K8 bit 的芯片组成 64K8 bit 的存储器
- 字、位同时扩展:地址线增加,数据线增加
- 使用 8 个 16K4 bit 的芯片组成 64K8 bit 的存储器
3.5 主存
插槽:组合多个存储模块
本文由作者按照 CC BY 4.0 进行授权