计算机组成3-存储系统
3.1 概述
3.2 主存储器
3.2.1 SRAM Static Random-Access Memory
1.SRAM存储元
- 不需要周期刷新
- 采用多个MOSFET(Metal-Oxide-Semiconductor Field-Effect
Transistor)-MOS管构成

2.存储扩展
存储元扩展
将除去T78的元件抽象为存储元。 
存储阵列扩展
一次访问多个存储元 
3.存储器结构及芯片实例
存储器结构
存储阵列扩展抽象为存储体,虽然存储阵列增加,但译码线并无增加。
WE:写使能 最少管脚数=地址线数量+数据线数量+2
芯片实例
缓冲器:增强信号 三态门:类似mos,加1导通,0断开
3.2.2 DRAM Dynamic Random-Access Memory
1.DRAM存储元
上述电容C放电过程,可看作是对存储元的读操作,可以发现,读操作会导致原本存储的1读取后变成0。为避免读操作导致的数据丢失,数据1读出后应将数据1重新写入,称为数据恢复。
电容c上的电荷会逐渐泄露,数据1只能保存较短的时间。为避免数据丢失,必须定期采用类似方式对电容c补充电荷,称为刷新,这也是动态RAM (DRAM) 得名的原因。
2.存储扩展
存储元扩展

- 预充电Y0~3加一半电压,在读取的行中,0存储元吸收,1存储元释放,被放大器读出。为了读取一行中某个存储元的信息,却破坏了这一行中所有存储元的信息
- 因此,每次读操作过后,必须立即进行写操作
- 灵敏读出/恢复放大器会根据锁存的值,将各条列线拉高到 DRAM 的工作电压。或拉低到 GND,以恢复各存储元中电容的原本状态(即原本存储的信息)。
DRAM读、写操作流程

3. 动态刷新
刷新的概念
刷新周期
- ==从数据存入DRAM开始,到数据丢失之前为止的这段时间,称为最大刷新周期。==采用不同材料以及不同生产工艺生产的 DRAM ,其最大刷新周期可能不同,常见的有 2ms 、 4ms 、 8ms 等
- ==而刷新周期是DRAM实际完成两次完整刷新之间的时间间隔。==刷新周期 \(\le\) 最大刷新周期。 刷新存储元的数量
- ==DRAM 按行进行刷新。==为了缩短刷新周期,可减少存储阵列的行数,增加列数。
- 刷新操作由内存控制器负责。 刷新与读操作的区别
- 尽管读操作也具有刷新功能,但读操作与刷新操作又有所不同,刷新操作只需要给出行地址,而不需要给出列地址。
刷新方式

- 集中刷新

- 分散刷新

- 异步刷新

4.存储器芯片实例
注:
- 地址复用:串行传入行列地址,地址线数量:\(\log \frac{M}{2}\)(行=宽)。
- 注意提问方式:最小引脚数、地址引脚数、数据引脚数。
- I/O仍然是重合的。
- 行地址线越少,刷新开销越少。
DRAM发展
SDRAM(Synchronous DRAM)时序图 
- SDRAM 自带时钟信号,能与系统总线频率同步。
- SDRAM 可以突发 (Burst) 传输:第一个列数据就绪后,每经历一个时钟周期就可得到一个数据,有效减少了数据传输的时间延迟。通常SDRAM包含有模式寄存器,可配置突发传输的长度BL (Burst Length), 例如 1、2、4、8以及整行字。该长度是同步地向系统总线上发送数据的存储单元的个数。
- 传统DRAM没有突发传输模式地址,每访问一个数据,就要经历行地址、列地址、访问数据的过程。
- 传统DRAM属于异步DRAM,其读写操作与CPU的时钟周期无关,在进行读写操作时可能会有更多的等待周期,导致性能上的损失,特别是在CPU的时钟频率很高的情况下。

3.2.3 ROM Read-only Memory
分类:
- 掩膜式只读存储器(Mask ROM,MROM)
- 可编程只读存储器(Programmable ROM,PROM)
- 可擦除可编程只读存储器(Erasable Programmable ROM,EPROM)
- 电可擦除可编程只读存储器(Electrically EPROM,EEPROM,E\(^2\)PROM)
- 闪存(Flash Memory)
注:很多ROM允许写入 
3.3 主存的扩展&与CPU的连接
位扩展
当存储芯片的数据总线位宽小于 CPU
数据总线位宽时,采用位扩展的方式进行扩展。 
- 将所有存储芯片的地址引脚、写使能引脚 WE 分别并联后再分别与 CPU 的地址引脚和读写控制引脚 R/W 连接;
- 将各存储芯片的数据引脚依次与 CPU 的数据引脚进行相应连接;
- 将所有存储芯片的片选引脚 CS 井联后与 CPU 的存储器请求控制引脚 MREQ 相连;
- 位扩展又称为数据总线扩展或字长扩展。
字扩展
当存储芯片的存储容量不能满足存储器对存储容量的需求时,采用字扩展的方式进行扩展。

- 将所有存储芯片的数据引脚、地址引脚、写使能引脚 WE 各自并联后再分别与 CPU 的数据引脚、地址引脚、读写控制引脚 R/W 连接;
- 各存储芯片的片选引脚 CS 可以由 CPU 多余的地址引脚通过译码器产生;
- 字扩展又称为容量扩展或地址总线扩展;
- 实际的译码器芯片具有更多的使能引脚,以便更灵活地应用。
不难看出,位扩展针对数据,字扩展针对地址。
字位同时扩展
当存储芯片的数据位宽和存储容量均不能满足存储器的数据位宽存储总容量要求时,采用字位同时扩展。
- 首先通过位扩展满足数据位宽的要求;
- 再通过字扩展满足存储总容量的要求。

总结&实例
| 位扩展 | 字扩展 | 字位扩展 |
|---|---|---|
| 当存储芯片的数据总线位宽小于 CPU 数据总线位宽时采用 | 当存储芯片的存储容量不能满足存储器对存储容量的需求时采用 | 当存储芯片的数据位宽存储叭量均不能满足存储器的数据位宽和存储总容量要求时采用 |

3.4 多模块存储(主存系统优化)
3.4.1 双端口处理器

3.4.2 单体多字存储器

- 单体多字存储器的构建与存储器位扩展方式完全相同。
- 多个存储模块共享地址总线。
- 按同一地址井行访问不同存储模块的同一单元。
- 实现了同一个存取周期内访问多个存储字。
- 若n个存储模块并发工作,则主存带宽提升n倍。
常见的多通道内存技术(双通道、三通道、四通道等)采用的就是单体多字技术。

3.4.3 多体交叉存储器
- 多体交叉存储器也由多个存储模块构成,这些模块的容量和存取速度相同。
- 根据对多个模块编址方式的不同,又分为以下两种:高位多体交叉、低位多体交叉
高位多体交叉(顺序编址模式)

低位多体交叉

- 可从任意地址开始顺序存取

3.5 Cache-高速缓冲存储器
3.5.1 相关概念
1. 概述

2. 程序局部性与性能
- 程序局部性是指,在一段时间内,整个程序的执行仅限于一个较小的局部范围内。具体来说,程序的局部性又表现为以下两种: 时间局部性:若程序在某个时刻访问了一个存储位置,该位置在未来可能会被多次访问。 例如程序中的循环结构调用过程就很好地体现了时间局部性。 空间局部性:若程序访问了某个存储位置,贝其附近的存储位置也可能被访问。 例如程序中的数组、结构体成员、顺序执行的代码块,通常在主存中是按顺序存放的,对它们的访问,就具有较强的空间局部性。




3.5.2 Cache读写流程
1.cache读操作基本流程

2.cache写操作基本流程

3.5.3 地址映射
1.cache行

2.直接映射

- CPU 要读取主存中的某个信息,通过该信息的主存地址的区内数据块号
(cache 行号)直接索引到对应的 cache 行。
- 若 cache 行中保存的主存分区号与信息的主存地址中的主存分区号相同且有效位为 1 (即有效)时,则数据命中。此时,根据信息的主存地址中的数据块内偏移,从该 cache 行中的数据块副本中读取信息。
- 若 cache
行中保存的主存分区号与信息的主存地址中的主存分区号不同或有效位为 0
(即无效)时,则数据缺失。此时, CPU
根据该信息的主存地址,将主存中该信息所在数据块载入相应 cache
行,相应地,还要将该 cache 行的有效位置 1, 以及将该 cache
行的主存分区号设置为该信息的主存地址中的主存分区号,同时将信息送入 CPU。
硬件逻辑实现举例

- 每个主存数据块映射到 cache
中的一个固定行命中率低冲突率高(未满也可能发生数据块替换)
- 口 cache 利用率低。
- 囗 cache命中率低。
- cache对于快速查找的硬件实现,成本较低(仅需要译码器和一个比较器,而不像全相联映射需要相联存储器来实现),适合于大容量 cache 使用。
- 替换算法较为简单,如果访问不命中则直接替换相应 cache 行即可。但是,若该 cache 行存在脏数据则需要将脏数据写入二级存储器以保证数据一致性。 (习题课)
3.全相连映射
计算机组成3-存储系统
https://eleco.top/2025/04/28/计算机组成3-存储系统/