内存

需掌握多模块存储器和主存容量扩展的工作原理,并了解 DRAM 芯片的原理,可能在选择题中考察。对于交叉编址并行存储器,也会在大题中考察相关概念的计算。

DRAM 芯片

刷新方式

特征集中刷新分散刷新异步刷新
刷新方式所有存储单元同时刷新根据存储单元的需求刷新根据使用情况和需求刷新
性能影响可能导致性能下降,因为刷新操作同时进行最小程度影响性能,仅刷新需要刷新的存储单元最小程度影响性能,根据实际使用情况调整刷新操作
硬件要求硬件和控制器相对简单需要更复杂的硬件和控制器需要智能的内存控制器和硬件支持
能源效率可能相对较低较高,因为只刷新需要刷新的存储单元较高,因为根据需求动态调整刷新频率
寿命可能影响寿命,特别是对于不经常使用的存储单元可以延长内存寿命可以延长内存寿命
灵活性有限的灵活性更大的灵活性高度灵活,可根据使用情况自动调整刷新频率

多模块存储器

利用多个结构完全相同的存储模块的并行工作来提高存储器的吞吐率:

  • 单体多字存储器
  • 多体交叉存储器
    • 高位交叉存储器
    • 低位交叉存储器

单体多字存储器

按同一地址码并行地访问各自对应单元,每一个单元为一个字,每字 m 位。可以同时选中存储器的 n 个单元,可以将带宽提高 n 倍。

仅做简单了解,这里不详细说明,考试重点在多体交叉存储器。

多体交叉存储器

在多体交叉存储器的实现方案中,有两种编码方式:高位交叉编制和低位交叉编址。其中低位交叉编址可以实现多个存储器的并行访问,高位交叉编址只能增大存储器的空间。

高位交叉编址

在高位交叉编址中,地址分为两个部分,高位用于存储存储器的下标,低位用于存储地址在该存储器内的偏移。

连续的数据在同一个存储器内编址,当一个存储器满了,接下来的数据在下一个存储器中编址。 如下图所示,若计算机地址空间大小为 4n,存储器 M0 中存储地址 0 到 n-1 的数据,存储器 M0 中存储地址 n 到 2n-1 的数据,以此类推。

所以在高位交叉编址中,相邻地址的数据存储在一个存储体中

M0
0
1
n - 1
M1
n
n + 1
2n - 1
M2
2n
2n + 1
3n - 1
M3
3n
3n + 1
4n - 1
体号
体内地址
地址译码
地址
高位交叉编址

在这种地址组织形式下,多个存储器芯片 串行工作只需要一个地址存储器即可,不必为每个芯片都配一个地址存储器(根据程序的局部性原理) 。

M0
M1
M2
M3
DR
地址总线
单字长
数据总线
AR

这种串行工作方式是无法提高 CPU 的性能的。 如上图所示,所有存储器都共享一个地址寄存器(AR,Address Register)和数据寄存器(DR,Data Regsiter)。

低位交叉编址

在低位交叉编址中,地址分为两个部分,低位用于存储存储器的下标,高位用于存储地址在该存储器内的偏移。

连续的数据交叉地在不同的存储器之间编址。 如下图所示,若计算机地址空间大小为 4n,地址为 0~3 的数据分别存储在 M0、M1、M2 和 M3 上,地址为 4~7 的数据也分别存储在 M0、M1、M2 和 M3 上,以此类推。

所以在低位交叉编址中,相邻地址的数据存储在不同存储体中

M0
0
4
4n-4
M1
1
5
4n-3
M2
2
6
4n-2
M3
3
7
4n-1
体号
体内地址
地址译码
地址
低位交叉编址

在这种地址组织形式下,多个存储芯片是 并行工作 的,且相邻地址处在不同的存储体中,因此就可以实现存储体的并行访问; 为了并行访问,每一个存储体均需要一个地址寄存器

M0
M1
M2
M3
AR
AR
AR
AR
DR
DR
DR
DR
地址总线
单字长
数据总线

使用 低位交叉编制 这种编址方式,计算机可以实现对于多个存储器的并行访问。 如上图所示,每个存储器都单独地配有一个地址寄存器(AR,Address Register)和数据寄存器(DR,Data Regsiter)。

并行访问存储器可以采用 流水线 的方式,与 指令流水线 概念类似,在并行存储器的流水线中,对于每一个存储器中存储单元的读取可以被分为三个阶段:

  • $P_1$:送地址和命令(送地址至存储器的 AR 中)
  • $P_2$:存储器读取数据(读取数据到 DR 中,该周期也称作 存储周期
  • $P_3$:传送数据(从 DR 中读取数据并传输到内存的物理地址中)

假设 CPU 的时钟周期为 $t$,$P_1$ 和 $P_3$ 的耗时为一个时钟周期即 $t$。$P_2$ 的耗时为四个时钟周期即 $4 \times t$,那么对于上图所示的 四体交叉存储器,读取 八个字长的数据 的流水线如下所示:

M0
M1
M2
M3
M0
M1
M2
M3
存储体号
时钟周期
1
2
3
4
5
6
7
8
9
10
11
12
P1
P2
P3
P1
P2
P3
P1
P2
P3
P1
P2
P3
P1
P2
P3
P1
P2
P3
P1
P2
P3
P1
P2
P3
13

主存容量的扩展

虽然单体存储芯片的容量和字长在不断扩大,但是在实际应用的过程中,任然会出现芯片的容量或者字长满足不了应用的情况,因此就有了存储扩展的需求;

假设存储芯片的字长为 $N$,存储字数为 $M$,则存储芯片的容量为 $M \times N$。

storage chip

常见的存储扩展包括三种:位扩展、字扩展、字位扩展

  • 位扩展:扩展字长
  • 字扩展:扩展字数
  • 字位扩展:同时扩展字长和字数
位扩展法

bit expand

字扩展法

word expand

字位扩展法

bit word expand

位扩展

16K
× 8
WE
A
CS
16K
× 8
WE
A
CS
16K
× 8
WE
A
CS
16K
× 8
WE
A
CS
CPU
R/W#
A15-0
D31-0
D7~D0
D15~D8
D23~D16
D31~D24

如上图所示,用 $16K \times 8\ bit$ 的存储芯片用来构建 $16K \times 32\ bit$ 的存储器。

需要的芯片数量为 $(16K \times 32) / (16K \times 8) = 4$。

由于是位扩展,所以四个芯片的片选信号要连接在一起,并处在常有效的状况;(片选信号是读写操作的开关)。

由于原存储器的 $8$ 位的,扩展之后变为 $32$ 位,这 $32$ 位的位线同 CPU 的 $32$ 位数据线相连接,所有存储芯片并行工作,贡献 $32$ 位数据中的不同 $8$ 位;

图中,4 个存储器共同构成 $64KB = 2^{16}B$ 的存储空间,所以地址总线为 $16$ 位,即从 $A_{0}$ 到 $A_{15}$。 但是由于 $16KB$ 的存储芯片只需要 $14$ 根地址线,因此只需要 $14$ 位地址线与存储线相连,即从 $A_{2}$ 到 $A_{15}$。 这里 $A_{0}$ 到 $A_{1}$ 不被使用,因为这 低两位地址线 相当于被用来扩展字长。

字扩展

16K
× 8 (0)
WE
A
CS
16K
× 8 (1)
WE
A
CS
16K
× 8 (2)
WE
A
CS
16K
× 8 (3)
WE
A
CS
CPU
R/W#
A15-0
D7-0
D7~D0
D7~D0
D7~D0
D7~D0
ramsel 0
ramsel 1
ramsel 2
ramsel 3
MREQ#
A15-14

如上图所示,用 $16K \times 8\ bit$ 的存储芯片用来构建 $64K \times 8\ bit$ 的存储器。

需要的芯片数量为 $(64K \times 8) / (16K \times 8) = 4$。

地址总线的位数为 $16$, 但是由于 $16KB$ 的存储芯片只需要 $14$ 根地址线,因此只需要 $14$ 位地址线与存储线相连,即从 $A_{0}$ 到 $A_{13}$。 高两位地址线 $A_{14}$ 到 $A_{15}$ 与片选译码器相连,由此产生片选信号。

字位扩展

16K
× 8 (0)
WE
A
CS
16K
× 8 (1)
WE
A
CS
16K
× 8 (2)
WE
A
CS
16K
× 8 (3)
WE
A
CS
CPU
R/W#
A15-0
D7~D0
D7~D0
D15~D8
D15~D8
ramsel 0
ramsel 1
MREQ#
A15
D15-0

如上图所示,用 $16K \times 8\ bit$ 的存储芯片用来构建 $32K \times 16\ bit$ 的存储器。

需要的芯片数量为 $(32K \times 16) / (16K \times 8) = 4$。

地址总线的位数为 $16$,地址线 $A_{1} \sim A_{14}$ 与存储器相连,$A_{0}$ 不使用,被用来扩展字长。$A_{15}$ 用来产生片选信号。

视频讲解