【计算机组成原理】第4章 存储器

教材基于《计算机组成原理 第3版》 ——唐朔飞

存储器

存储器分类

存储器的层次结构

存储器三个主要特性的关系

缓存——主存层次和主存——辅存层次

1️⃣ 缓存——主存层次主要解决CPU和主存速度不匹配的问题

2️⃣ 主存——辅存主要解决存储系统的容量问题

3️⃣ 主存——辅存层次发展形成虚拟存储系统。

主存储器

概述

主存的基本组成

主存和CPU的联系

1️⃣ 驱动器、译码器和读写电路在存储芯片中

2️⃣ MAR和MDR在CPU芯片中

3️⃣ 存储芯片和CPU芯片可通过总线连接

主存中存储单元地址的分配

主存的技术指标

1️⃣ 存储容量:主存存放二进制代码的总位数,存储容量(位)=存储单元个数*存储字长存储容量(字节)=存储单元个数*存储字长 / 8

2️⃣ 存储速度

  • 存取时间:存储器的访问时间=读出时间+写入时间
  • 存取周期:连续两次独立的存储器操作(读或写)所需的 最小间隔时间

3️⃣ 存储器的带宽:单位时间内存储器存取的信息量,每个存储周期可以访问的位(字节)数 / 存储周期

提高存储器带宽的措施

  • 缩短存储周期
  • 增加存储字长
  • 增加存储体

半导体存储芯片简介

半导体存储芯片的基本结构


1️⃣ 地址线:单向输入,位数与存储字的个数有关

2️⃣ 数据线:双向的,位数与读/写的数据位数有关

3️⃣ 控制线

  • 读/写控制线:决定芯片进行读/写操作
  • 片选线:选择存储芯片

半导体存储芯片的译码驱动方式

🌈 线选法

1️⃣ 特点:一根字选择线(字线),直接选中一个存储单元的各位

2️⃣ 结构简单,只适于容量不大的存储芯片

🌈 重合法

1️⃣ 特点:被选单元是由X、Y两个方向的地址决定的

2️⃣ 适合容量较大的存储芯片

随机存取存储器 ( RAM )

静态 RAM (SRAM)

基本电路

动态 RAM ( DRAM )

基本电路

动态 RAM 刷新

1️⃣ 多久需要刷新一次:刷新周期一般为 2 ms

2️⃣ 每次刷新多少存储单元:以行为单位,每次刷新一行存储单元
————为什么要使用行列地址:减少选通线的数量

3️⃣ 如何刷新:有硬件支持,读出一行的信息后重新写入,占用1个读/写周期

4️⃣ 在什么时候刷新:

动态 RAM 和静态 RAM 的比较

只读存储器(ROM)

存储器与 CPU 的连接

存储器容量的扩展

位扩展(增加存储字长)

片选线相同,分配数据线

字扩展(增加存储字的数量)

数据线相同,设置片选线

字、位同时扩展

数据线和片选线都要重新考虑

例题以及解题步骤

🔔 系统程序区用ROM,用户程序区用RAM

1️⃣ 写出对应的二进制地址码

2️⃣ 确定芯片的数量及类型

由题目知 CPU 数据线8根,则存储器位数应扩展为8位。再根据题目所给的存储芯片

系统程序区选择一片 2 K * 8 位的存储芯片

用户程序区选择两片 1 K * 4 位的存储芯片

3️⃣ 分配地址线

4️⃣ 确定片选信号

RAM 是位拓展,共享片选线,分配数据线

而 ROM 和 RAM 需要考虑片选线的设置

译码器的 Y4 端可以作为 ROM 的片选线端口

译码器的 Y5 端和 RAM 的 A10 地址线可以联合作为 RAM 的片选控制

🔔 有一个默认的原则:不要有任何地址线空着不用!!!

5️⃣ 连接图

6️⃣ 注意的细节

ROM 要接地

与门都取了非,也就是说输入的数据都为 0 时,输出为 1

RAM 的地址线分配,RAM 要连接读写控制线 WR

使能端只有输入信号为 G1 G2A G2B: 1 0 0 时才工作

真题

该题与上一个题的区别就是 RAM 是字拓展而不是位拓展,所以数据线相同,片选线要配置,用 A12 作为划分

存储器的校验

海明码

🔔 默认是偶校验,如果题目要求是奇校验,那不论是求海明码还是纠错,每个运算最后都要多异或一个 1 。

提高访存速度的措施

  • 采用高速器件

  • 采用层次结构 Cache – 主存

  • 调整主存结构

单体多字系统

普通存储器:每行为一个存储单元

🌈 单体多字存储器

每个存储单元存储 m 个字,每个字 w 位,总线宽度为 m 个字。一个存取周期内可以读出 m 个字,也就是 m * w 位的指令或数据,使主存带宽提高到 m 倍

🔔 缺点:指令和数据在主存内必须是连续存放的,一旦遇到转移指令,或者操作数不能连续存放,这种方法的效果就不明显

多体并行系统

  • 高位交叉(顺序存储)

    • 存储体的存储单元通过地址的高位进行分组,高位地址相同的存储单元属于同一个存储体

    • CPU 有较大概率需要连续访问同一个存储体,效率较低

  • 低位交叉(交叉存储)

    • 存储体的存储单元通过地址的低位进行分组,低位地址相同的存储单元属于同一个存储体

    • CPU 可以较大概率同时访问多个存储体,效率高,属于流水线方式

    • 可以在不改变每个模块存取周期的前提下,提高存储器的带宽

    • 可以并行工作,如总线宽度为 mw 时,可以同时取出长度为 mw 的数据。等同于高位交叉存储方式的 m 个存储体并行工作

流水线的概念

例题

设有 4 个模块组成的四体存储器结构,每个体的存储字长为 32 位,存储周期为 200 ns。假设数据总线宽度为 32 位,总线传输周期为 50 ns,试求顺序存储和交叉存储的存储器带宽。

解:顺序存储和交叉存储连续读出 4 个字的信息量是 32 * 4 = 128 位。

顺序存储器连续读出 4 个字的时间是 200 ns * 4 = 800 ns

交叉存储其连续读出 4 个字的时间是 200 ns + 50 ns * (4 – 1) = 350 ns

顺序存储器的带宽是 128 b / 800 ns = 16 * 10 ^ 7 bps

交叉存储器的带宽是 128 b / 350 ns = 37 * 10 ^ 7 bps

高速缓冲存储器

概述

局部性原理

CPU 和主存(DRAM)的速度存在差异,为了避免 CPU 可能存在的“空等”现象

性能分析

1️⃣ 命中:
1.主存块调入缓存
2.主存块与缓存块建立了对应关系
3.用标记记录与某缓存块建立了对应关系的主存块号

2️⃣ 未命中:
1.主存块未调入缓存
2.主存块与缓存块未建立对应关系

3️⃣ Cache 的命中率:
1.CPU 欲访问的信息在 Cache 中的 比率
2.命中率 与 Cache 的 容量 与 块长 有关

4️⃣ 主存系统的效率
1.效率 e 与 命中率 有关

🌈 例题

Cache 的基本结构

Cache 的读写操作

🌈 读

🌈 写

Cache 的改进

1️⃣ 单一缓存和二级缓存

2️⃣ 统一缓存和分立缓存

Cache – 主存的地址映射

直接映射

1️⃣ 每个缓存块 i 可以和若干个主存块对应
2️⃣ 每个主存块 j 只能和一个缓存块对应
3️⃣ i = j mod C (C 是 Cache 块总数)

全相联映射

主存中的任一块可以映射到缓存中的任一块

组相联映射

某一主存块 j 按模 Q 映射到 缓存 的第 i 组中的任一块

🔔 n 路组相联:Cache n 个块为一组,即 Q = n

1️⃣ 当 n = 1 时,Cache 分成 1 组,相当于全相联映射

2️⃣ 当 n = Cache 块行数时,Cache 的每个块都是一组。相当于直接映射

三种映射方式的总结

替换算法

例题一

🌈 FIFO:每个组内,就是一个小的队列,组内整体向上移动一个单位,新元素放下面,弹出最上面的元素

🌈 LRU:每个组中,最不常用的放最上,刚刚用到的(命中)的放最下;遇到新的元素且组满,则组内整体向上移动一个单位,新元素放最下,弹出最上面的元素

例题二