文章

7. 内部存储器

1. 回顾:存储器

存储器(Memory)由一定数量的单元构成,每个单元可以被唯一标识,每个单元都有存储一个数值的能力

  • 地址:单元的唯一标识符(采用二进制)
  • 地址空间:可唯一标识的单元总数
  • 寻址能力:存储在每个单元中的信息的位数,即内存中能被单独识别并独立存放一个数据的最小内存空间
    • 大多数存储器是字节寻址的,而执行科学计算的计算机通常是64位寻址的,也就是264
    • 字节可寻址(64b/32b)、字可寻址(8b)、按位寻址(1b)
  1. 寻址能力的影响因素:归根结底是因为设计时的地址的长度。
    1. 地址总线的根数
    2. 寻址机制的不同
  2. 计算机的内存真正能真正使用的内存大小的影响因素:
    1. 地址空间
    2. 寻址能力
    3. 最终是由上面两个之一来决定的。
      • 例子:4G内存的电脑加上8G的内存条,不会变快,因为寻址能力不会变强,被制约。
  3. 地址空间越大,容量会越大吗?
    • 不一定,每个单元(屋子)的大小不同。

2. 半导体存储器

用半导体芯片作主存储器是目前的主流做法

2.1 位元(memory cell)

半导体存储器的基本元件,用于存储1位数据

  1. 特性:

    1. 呈现两种稳态(或半稳态):分别表示二进制的0和1
    2. 它们能够至少被写入(write)数据一次:用来设置状态
    3. 它们能够被读取(read)来获得状态信息
  2. 操作:

    image-20231121163051868

2.2 类型

image-20231121163131737

2.3 随机存取存储器(RAM)

Random-Access Memory(RAM):随机访问:对存储器中任意数据的访问所花费的时间与数据所在位置无关。

  1. 特性:
    1. 可以简单快速地进行读/写操作
    2. 易失的(Volatile)(断电就丢数据)
  2. 类型:
    1. 静态RAM(SRAM)
    2. 动态RAM(DRAM)

2.3.1 静态RAM(SRAM)

image-20231121163432510

  1. 不会漏电,只要有电,不需要刷新数据就可以保存
  2. 用传统的触发器逻辑门来存储数据
    • 相同的逻辑部件被应用在处理器中
  3. 它会在有电的时候存储数据(没电就丢数据)

2.3.2 动态RAM(DRAM)

image-20231121163633578

  1. 电容器中存在或不存在电荷被识别为1或者0
  2. 需要时常刷新来保证数据
    • 电容器有丢失电荷的倾向
    • 存在一个阈值来决断他是0还是1
      • 它本质上是一个模拟设备

解决漏电问题:我们刷新,给该有电的电容充电。

  • 刷新是异步刷新。
2.3.3.1 高级的DRAM架构
  1. 问题:传统DRAM是异步的(频率通常不超过66MHz)
    1. 处理器向内存提供地址和控制信号,表示内存中特定单元的一组数据应该被读出或写入DRAM
    2. DRAM执行各种内部功能,如激活行和列地址线的高电容,读取数据,以及通过输出缓冲将数据输出,处理器只能等待这段延迟,即存取时间
    3. 延时后,DRAM才写入或读取数据
  2. 解决:高级DRAM架构是同步的
    1. 同步DRAM(Synchronous DRAM, SDRAM)(频率通常不超过133MHz)
    2. 双速率SDRAM(Double-Data-Rate SDRAM,DDR SDRAM / DDR)(DDR5频率可达4800MHz)
2.3.3.2 同步DRAM(SDRAM)

image-20231121174533040

DDR SDRAM

Double Data Rate:每个时钟周期发送两次数据,一次在时钟脉冲的上升沿, 一次在下降沿

DDR ➔ DDR2 ➔ DDR3 ➔ DDR4 ➔ DDR5

  • 增加操作频率
  • 增加预取缓冲区

image-20231121174830466

image-20231121174856876

2.3.3 SRAM和DRAM对比

image-20231121163920679

  • 无论多贵的电脑里面,内存用的都是DRAM。
    1. SRAM的集成度低,造成其体积比较大。
    2. DRAM的集成度高。
  • DRAM多用于主存,SRAM多用于寄存器。
  1. 相同点

    1. 易失性
  2. 不同点

    1. DRAM有比SRAM更简单更小的单元,但是需要周期性的刷新

      • DRAM相对于SRAM更加高密度并且廉价

      • DRAMS经常被用在数据量比较大的存储的时候

    2. SRAM一般会比DRAM访问更快

    3. Cache用SRAM,主存用DRAM

2.4 只读存储器(ROM)

Read-only memory(ROM):一种可以长期保存信息的存储器,具有断电后信息仍可继续保存的特点,在正常工作时只可读取数据,而不能写入数据

  1. 特性:
    1. 非易失的:不要求供电来维持数据
    2. 可读,但不能写入新数据
  2. 应用:微程序设计,库子程序,系统程序,函数
  3. 问题:
    1. 无出错处理机会:如果有一位出错,整批的ROM芯片只能报废
    2. 用户无法写入数据:唯一的数据写入机会在出厂时完成

2.5 可编程ROM(PROM)

Programmable ROM

  1. 特性:
    1. 非易失的
    2. 只能被写入一次
      1. 写过程是用电信号执行
      2. 需要特殊设备来完成写或“编程”过程
  2. 与ROM的对比
    1. PROMs提供了灵活性和便利性
    2. ROM对于大容量生产运行仍然具有吸引力,在量产的时候PROM成本高

2.6 主要进行读操作的存储器

Read-Mostly Memory

  1. 特性:
    1. 非易失的
    2. 写操作与读操作相比,较为困难
  2. 应用:
    1. 读操作比写操作频繁得多的场

2.6.1 光可擦除/可编程只读存储器(EPROM)

Erasable programmable read-only memory(EPROM)

  1. 特性:
    1. 电写入读出
    2. 在写入前,擦除需要专门的紫外线仪器
      1. 所有的存储单元会被处理成相同的状态
      2. 耗时20min
    3. 与PROM对比:
      1. 比较贵,但是可以被更新
    4. 写入时电写入,擦除使用紫外线照射20min左右,清除全部数据

2.6.2 电可擦除/可编程只读存储器(EEPROM)

Electrically erasable programmable read-only memory(EEPROM)

  1. 特性:
    1. 可以在任何时候写入和更新字符,不需要擦除
    2. 只更新寻址到的一个或多个字节
  2. 写操作每字节需要大约5ms,而读一个字节大约0.5μs
  3. 每次擦除仅需4~6ms,可擦除百万次
  4. 与EPROM对比:
    1. EEPROM比EPROM密度低

2.6.3 快闪存储器(Flash Memory)

  1. 特性:
    1. 电可擦除:与EEPROM原理类似,优于EPROM
    2. 可以在块级擦除,不能在字节级擦除:优于EPROM,不如EEPROM
    3. 需要先擦除再写入
    4. 达到了和EPROM一样的高密度

3. 从位元到主存

3.1 寻址单元

  1. 寻址单元(Addressable unit):由若干相同地址的位元组成
  2. 每个寻址单元内的数据不能进行局部修改,都是整体修改。

image-20231121171438023

3.2 芯片

image-20231121171527248

3.3 存储阵列

存储阵列(Memory Array):由大量寻址单元组成

image-20231121171617606

注意上图的存储列阵的一个框代表的是一个寻址单元,而不是一个位元

  1. 为什么是用方形结构?

    • 很简单,因为比线性省电
  2. 选中就是对行和列进行加电,然后同时被加电的地方被选中。

  3. 能够随机访问的原因?

    • 因为我们都是读取地址,然后找到行,找到列,然后选中。所以无论什么单元,都是一样的访问时间。

3.3.1 如何寻址

  1. 行访问

    image-20231121171756446

  2. 列访问

    image-20231121172114276

  3. 地址译码器

    1. 一个 n 位译码器有2 n种输出
    2. 当所有 n 个寻址位都满足条件时, 该输出为1
    3. 任何时候,只有一个输出是1,其他的都是0

    image-20231121172324215

3.3.2 如何刷新

约束:刷新会占用片选线、地址线、地址译码器

3.3.2.1 集中式刷新(Centralized refresh)
  1. 停止读写操作,并逐行刷新
  2. 刷新时无法操作内存(死区)
3.3.2.2 分散式刷新(Decentralized refresh)
  1. 在每个存储周期中,当读写操作完成时进行刷新
  2. 一次读写刷新一行,逐行刷新
  3. 会增加每个存储周期的时间
3.3.2.3 异步刷新(Asynchronous refresh)
  1. 每一行各自以固定间隔(小于最大刷新周期,毫秒级)刷新
  2. 将DRAM的刷新安排在CPU对指令的译码阶段,可有效避免死区
  3. 效率高:常用

3.4 模块组织

地址线:用来地址寻址

数据线:用来把地址里的数据传进来传出去

  1. 位扩展:地址线不变,数据线增加
    1. 使用 8 块 4K1 bit 的芯片组成 4K8 bit 的存储器
  2. 字扩展:地址线增加,数据线不变
    1. 使用 4 个 16K8 bit 的芯片组成 64K8 bit 的存储器
  3. 字、位同时扩展:地址线增加,数据线增加
    1. 使用 8 个 16K4 bit 的芯片组成 64K8 bit 的存储器

3.5 主存

插槽:组合多个存储模块

image-20231121175540960

本文由作者按照 CC BY 4.0 进行授权