第三章存储器
一、概述
1.1存储器分类
1.按存储介质分类
①半导体存储器:双极性(TTL)半导体存储器、MOS半导体存储器
—TTL:集成度低、功耗高、速度快
—MOS:集成度高、功耗低
②磁表面存储器:有磁头、有载磁体
③磁芯存储器:由硬磁材料做成的环状元件
④光盘存储器:用激光在记录介质上进行读/写的存储器
注:存储器易失指断开电源时,存储器中信息消失。这里半导体存储器为易失的,其余为非易失。
2.按照存取方式分类
①随机访问:存取时间和物理地址无关
—随机存储器(RAM):可以读取信息也可以写入信息
—只读存储器(ROM):只能读取信息。
②串行访问:存储时间和物理地址有关
—顺序存取存储器:例如磁带
—直接存取存储器:例如磁盘
3.按照计算机作用分类
1.2存储器层次结构
- 存储器三个主要性能指标:速度、容量、每位价格
- 层次结构
①主存—缓存层次(速度):主要解决CPU和主存速度不匹配问题,数据调动是由硬件自动完成的,对程序员是透明的。
②主存—辅存层次(容量):主要解决存储系统容量问题,数据调动是由硬件和操作系统共同完成的。在不断发展中,逐渐形成虚拟存储器,且虚拟存储器中地址码称为”虚地址“或者”逻辑地址"。
注:对程序员透明指的是程序员看不见的,无法直接调用的。
二、主存储器
2.1主存的基本组成
在CPU访问主存过程中:
①根据MAR的地址,经过地址译码器、驱动器等电路才能找到所需访问的单元。
②读出写入时,必须经过读写电路中读出放大器、写入电路等读写电路才能进行实际操作。
2.2主存与CPU之间联系
CPU和主存之间主要是三种连接:
①地址总线:CPU将地址送入MAR,MAR经过地址总线送至主存,这个过程是单向的。
②控制总线:主要为读写控制,在CPU控制主存也是单向的。
③数据总线:有读出和写入操作,所以数据总线是双向的。
2.3主存中存储单元地址的分配
若有一组数据 12345678H,这是一个16进制的数,也就是说每一位数相当于4bit,每两位数字为一个字节。
若按照字节存储,要存入主存储器:
①大端(大尾):将高位存储在前面
②小端(小尾):将低位存储在前面
③计算:
若地址线
24
根,按照字节寻址则:
2
24
=
16
M
B
若地址线
24
根,若字长为
16
位,按照字寻址则:
2
24
÷
(
16
/
8
)
=
8
M
B
若地址线
24
根,若字长为
32
位,按照字寻址则:
2
24
÷
(
32
/
8
)
=
4
M
B
\\若地址线24根,按照字节寻址则:2^{24}=16MB \\若地址线24根,若字长为16位,按照字寻址则:2^{24} ÷ (16/8) =8MB \\若地址线24根,若字长为32位,按照字寻址则:2^{24} ÷ (32/8) =4MB
若地址线24根,按照字节寻址则:224=16MB若地址线24根,若字长为16位,按照字寻址则:224÷(16/8)=8MB若地址线24根,若字长为32位,按照字寻址则:224÷(32/8)=4MB
2.4主存的技术指标
①存储容量:主存中存放二进制代码的总位数
用二进制代码位数表示
(
b
i
t
)
:存储容量
=
存储单元个数
×
存储字长
用字长总数来表示
(
B
y
t
e
)
:存储容量
=
存储单元个数
×
存储字长
/
8
\\用二进制代码位数表示(bit): 存储容量 = 存储单元个数 × 存储字长 \\用字长总数来表示(Byte): 存储容量 = 存储单元个数 × 存储字长 / 8
用二进制代码位数表示(bit):存储容量=存储单元个数×存储字长用字长总数来表示(Byte):存储容量=存储单元个数×存储字长/8
②存储速度:
*存取时间(访问时间):启动一次存储器操作到完成该操作所需的全部时间。分为读出时间和写入时间。
*存取周期:连续两次独立的存储器操作所需的最小间隔时间。即第一次开始到第二次开始中间的时间。
注一般存取时间<存取周期
*存储器的带宽(位/秒):
三、半导体芯片简介
3.1基本结构
地址线(单向) | 数据线(双向) | 芯片容量 |
---|---|---|
10 | 4 | 1K×4位 |
14 | 1 | 16K×1位 |
13 | 8 | 8K×8位 |
计算过程: 10 条地址线表示 2 10 = 1 K , 数据线表示 4 位,即芯片容量 = 1 K × 4 位 同理: 14 条地址线, 1 条数据线,芯片容量 = 2 14 × 1 位 = 16 K × 1 位 13 条地址线, 8 条数据线,芯片容量 = 2 13 × 8 位 = 8 K × 8 位 计算过程: \\10条地址线表示2^{10}=1K,数据线表示4位,即芯片容量=1K×4位 \\同理: \\14条地址线,1条数据线,芯片容量=2^{14}×1位=16K×1位 \\13条地址线,8条数据线,芯片容量=2^{13}×8位=8K×8位 计算过程:10条地址线表示210=1K,数据线表示4位,即芯片容量=1K×4位同理:14条地址线,1条数据线,芯片容量=214×1位=16K×1位13条地址线,8条数据线,芯片容量=213×8位=8K×8位
- 片选线的作用:要用16K×1位组成64K×8位的存储器。
①将8个16K×1位芯片组成一组,构成16K×8位。
②布置4组同样的芯片,构成64K×8位。总共32片。通过片选线的高电平来选择其中的一组作为访问的目标。
3.2译码驱动方式
(1)线选法
通过A0,A1,A2,A3组成的二进制数来判断该用矩阵中那一组芯片,从而进行读写操作。
例如当全部是0时,选择0,0到0,7这一组。
(2)重合法
通过A0,A1,A2,A3,A4组成的二进制数来判断该用矩阵中行地址。
通过A1,A6,A7,A8,A9组成的二进制数来判断该用矩阵的列地址。
通过行地址和列地址来确定操作的芯片组。
四、存储器
4.1随机存储器(RAM)
- 靠CPU那一层的Cache由SRAM实现,主存储器由DRAM实现,都属于易失性存储器,也就是只要电源被切断,原来保存的信息便会丢失。
1.静态RAM(SRAM)
- 静态随机存储器(SRAM)的存储单元用“ 双稳态触发器 (六晶体管MOS)”来记忆信息的。
- 静态存储器信息被读出后,仍保持原状态不需要再生,即为非破坏性读出。
- SRAM存取速度快,但集成度低,功耗大,一般用于高速缓冲存储器(Cache)。
2.动态RAM(DRAM)
-
动态随机存储器(DRAM)利用存储元电路中栅极电容上的电荷来存储信息的。
-
DRAM的速度比SRAM存取速度慢,但容易集成度、功耗低、容量大等特点,一般用于大容量的主存系统。
-
DRAM电容上的电荷一般只能维持1~2ms,因此即使电源不断电信息也会自动消失。所以每隔一定时间必须进行一次刷新。
-
动态RAM刷新(刷新与行地址有关):
①集中刷新:把刷新的时间集中在一个相对集中的时间段。在这个刷新的时间内,不能访问存储器,称为“死时间”也称“死区”。
②分散刷新:把一个存储周期分为两个周期,前部分用于正常读、写或保持,后半部分用于刷新。无死区。
③异步刷新:把分散刷新与集中刷新相结合。也就是每隔一段时间进行一次集中刷新。缩短"死时间"。
DRAM | SRAM | |
---|---|---|
存储原理 | 电容 | 触发器 |
特点 | 集成度高 功耗小 速度较慢 | 集成度低 功耗大 速度快 |
刷新 | 有 | 无 |
使用 | 主存 | 高速缓存Cache |
4.2只读存储器(ROM)
- ROM一旦有了信息,就不能轻易改变,即使掉电也不会丢失。例如主板上的BIOS芯片。
ROM类型:
①掩模式ROM(MROM):写入数据后任何人无法改变其内容。这是早期的只读存储器,在芯片生产过程中厂家直接写入数据。可靠性高、集成度高、价格便宜,灵活性差。
②一次性编程ROM(PROM):可以实现一次性编程的只读存储器。这是第一次改进,一旦写入数据后,内容就无法改变。
③多次编程ROM(EPROM):可以实现多次改写内容的只读存储器,也称可擦除可编程只读存储器。但EPROM不能取代RAM,因为EPROM的编程次数有限,且写入时间长。
EEPROM(E²PROM):用电气方法将存储内容擦除,再重写。可局部擦写、全部擦写。
④闪速型存储器(Flash Memory):是在EPROM和E²PROM发展起来的,可不在加电的情况下长期保存信息。如U盘,已经具备RAM的功能。
4.3存储器与CPU的连接
1.存储器容量的扩展
(1)位扩展(增加存储字长):
例:用2片1K×4位芯片要构成1K×8位的存储器。
这里一共需要10根地址线,8根地址线。将其连接到两片2114地址线,并且将片选线CS和控制线WE接入。
(2)字扩展(增加存储字的数量):
例:用2片1K×8位存储芯片组成2K×8位的存储器。
这里一共需要11根地址线,8根数据线。A0~A9作为地址线,将A10地址线作为片选信号。
如图中若A10为高电平(1),则选择左边的芯片,反之选择右边芯片。
(3)字、位扩展
例:用8片1K×4位存储芯片组成4K×8位存储器。
这里需要12根地址线,8根数据线。A0A9作为地址线,将A10A11经过片选译码器得到4个片选信号。
4.4提高访存速度的措施
- 采用高速器件
- 采用层次结构Cache-主存
- 调整主存结构:①单体多字存储器②多体并行存储器。
1.单体多字存储器
2.多体并行存储器:每个模块有独立的读写控制电路、地址寄存器和数据寄存器。既能并行工作又能交叉工作。
多体并行存储器有高位交叉和地位交叉编址两种:
①高位交叉:
例:假设存储器有4个模块,每个模块有若干个单元。
用高位的地址作为模块地址,用低位作为模块内部的地址。这种方式用来拓展存储器的容量。每次访问先访问完M0所有单元后,再访问M1,依次类推。
由于CPU总是按顺序访问存储模块,各模块不能被并行访问,所以不能提高存储器的吞吐率。
②低位交叉:
例:假设存储器有4个模块,每个模块有若干个单元。
用低位的地址作为模块地址,用高位作为模块内部的地址。这种方式在不改变周期的前提下,可以增加存储器的带宽。
由于每次先访问M0的0000地址,然后访问M1的0000地址,以此类推,使得模块间可以并行访问。这就类似于一个流水线周期。
【例】设四体低位交叉存储器,存取周期为T,总线传输周期为t,为实现流水方式存取,使满足T=4t。
连续存取4个字所需时间为T+(4-1)t。
五、高速缓冲存储器
5.1概述
- 问题提出:为了解决CPU“ 空等 ”现象,即为了解决CPU和主存(DRAM)的速度差异的问题。
1.Cache的工作原理
- 为了方便Cache与主存间交换信息,Cache和主存都被划分块大小相等的块,由于Cache的容量远远小于主存储器,则Cache中的块数量远远少于主存中的块数。
- Cache中的标记用于记录在主存中块号,Cache中只用来保存主存中的部分数据的副本,当CPU发出请求,直接从Cache中访问,如果Cache命中,则直接对Cache进行操作;如果未命中,仍需要访问主存。
2.命中与不命中
- 命中:当CPU访问Cache中数据时,主存块的数据已经调入了缓存,则主存块与缓存块建立了对应关系,且用标记记录Cache中与主存块建立关系的主存块号。
- 未命中:当CPU访问Cache中数据时,主存块的数据未调入缓存,则主存块与缓冲块未建立对应关系。
3.Cache命中率
-
CPU想要访问信息在Cache的比率。命中率与Cache的容量和块长有关。
-
Cache—主存系统的效率:效率e与命中率有关
e = 访问 C a c h e 的时间 平均访问的时间 × 100 % 设 C a c h e 命中率为 h ,访问 C a c h e 的时间为 t c ,访问主存的时间为 t m 。 则 e = t c h × t c + ( 1 − h ) × t m × 100 % e=\frac{访问Cache的时间}{平均访问的时间} × 100\% \\设Cache命中率为h,访问Cache的时间为t_c,访问主存的时间为t_m。 \\则e=\frac{t_c}{h×t_c + (1-h)×t_m} × 100\% e=平均访问的时间访问Cache的时间×100%设Cache命中率为h,访问Cache的时间为tc,访问主存的时间为tm。则e=h×tc+(1−h)×tmtc×100%
5.2Cache的读写操作
1.读操作
2.写操作
- Cache的写操作要处理Cache和主存的一致性。一般有两种方法:①写直达法②写回法
①写直达法:在写操作时,数据既写入Cache也写入主存,即写操作时间就是访问主存的时间。所以Cache块退出时,不需要对主存执行写操作。可以保持主存和Cache数据一致,但增加了访存次数。
②写回法:在写操作时,数据只写入Cache不写入主存,在Cache数据被替换出去时,才写回主存。
5.3Cache—主存地址映射
1.直接映射(固定的映射关系)
- 直接映射:把主存分成与Cache大小相等的块,每一块的字块与Cache存储体中的字块直接对应。类似于《数据结构》中" 哈希(散列)表 "的建立。
简单来说,例如存储体一共 m 个字块 , C a c h e 中有 n 个字块。将 m 对 n 进行取模运算就得到了这个字块在 C a c h e 中的位置。 即 i = m m o d n 。 其缓冲块与主存块之间字块号对应如下 简单来说,例如存储体一共m个字块,Cache中有n个字块。将m对n进行取模运算就得到了这个字块在Cache中的位置。 \\即 i = m \quad mod \quad n。 \\其缓冲块与主存块之间字块号对应如下 简单来说,例如存储体一共m个字块,Cache中有n个字块。将m对n进行取模运算就得到了这个字块在Cache中的位置。即i=mmodn。其缓冲块与主存块之间字块号对应如下
缓冲块(Cache) | 主存块 |
---|---|
0 | 0,n,…… |
1 | 1,n-1,…… |
2 | 2,n+2,…… |
…… | …… |
n | n-1,2n-1,…… |
- 使用直接映射,每个缓冲块可以与若干个主存块对应,但每个主存块只能与一个缓冲块对应。
2.全相连映射(灵活性大的映射关系)
- 全相连映射:主存块中的字块可以任意映射到Cache中任意一块位置上。
3.组相连映射(直接与全相连的这种)
-
组相连映射:把Cache分为Q组,每组有R块
①用直接映射法,把主存器中字块号与R组进行对应。
②用全相连映射法,这些字块号在每一组中的R块里可以映射到任何一个位置。
【例题】假设主存容量为512KB,Cache容量为4KB,每个字块为16个字,每个字32位。按照字节编址。
(1)Cache地址有多少位,可容纳多少块。
解:根据
C
a
c
h
e
容量
4
K
=
2
12
B
,则
C
a
c
h
e
地址有
12
位。
由于每个字
32
位,则
32
÷
8
=
4
B
。即
4
K
B
÷
4
B
=
1
K
字
=
2
10
字
由于每个字块有
16
=
2
4
个字。则
2
10
÷
2
4
=
64
块。
综上:
C
a
c
h
e
地址有
12
位。可容纳
64
块。
解:根据Cache容量4K=2^{12}B,则Cache地址有12位。 \\由于每个字32位,则32÷8=4B。即4KB÷4B=1K字=2^{10}字 \\由于每个字块有16=2^4个字。则2^{10}÷2^4 = 64块。 \\综上:Cache地址有12位。可容纳64块。
解:根据Cache容量4K=212B,则Cache地址有12位。由于每个字32位,则32÷8=4B。即4KB÷4B=1K字=210字由于每个字块有16=24个字。则210÷24=64块。综上:Cache地址有12位。可容纳64块。
(2)主存地址有多少位,可容纳多少块。
解:根据主存容量
512
K
B
=
2
19
B
,主存地址有
19
位。
由题
(
1
)
可得每个字
4
B
,每个字块有
2
4
个字。
512
K
B
÷
4
B
÷
2
4
=
8192
块。
综上主存地址有
19
位,可容纳
8192
块。
解:根据主存容量512KB=2^{19}B,主存地址有19位。 \\由题(1)可得每个字4B,每个字块有2^4个字。512KB÷4B÷2^4=8192块。 \\综上主存地址有19位,可容纳8192块。
解:根据主存容量512KB=219B,主存地址有19位。由题(1)可得每个字4B,每个字块有24个字。512KB÷4B÷24=8192块。综上主存地址有19位,可容纳8192块。
(3)在直接映射下,主存的第几块映射到Cache中的第5块(设起始块为第1块)。
C
a
c
h
e
一共有
64
块,则第
5
,
5
+
64
,
5
+
64
×
2
,
5
+
64
×
3
…
…
块能映射到
C
a
c
h
e
中的第
5
块
Cache一共有64块,则第5,5+64,5+64×2,5+64×3……块能映射到Cache中的第5块
Cache一共有64块,则第5,5+64,5+64×2,5+64×3……块能映射到Cache中的第5块
(4)主存映射下,主存地址字段中如何分配。
解:每个字块
16
个字需要
4
位地址来表示块号,且每个字
32
位即
4
B
,按照字节编址则需要
2
位。所以字块内地址需要
6
位
缓存块共
64
块,则缓存字块地址需要
6
位。
主存地址共
19
位,则主存字块标记
19
−
6
−
6
=
7
位。
综上所属,主存段地址分别为:主存字块标记
7
位、缓存字块
6
位、字块内地址
6
位。
解:每个字块16个字需要4位地址来表示块号,且每个字32位即4B,按照字节编址则需要2位。所以字块内地址需要6位 \\缓存块共64块,则缓存字块地址需要6位。 \\主存地址共19位,则主存字块标记19-6-6=7位。 \\综上所属,主存段地址分别为:主存字块标记7位、缓存字块6位、字块内地址6位。
解:每个字块16个字需要4位地址来表示块号,且每个字32位即4B,按照字节编址则需要2位。所以字块内地址需要6位缓存块共64块,则缓存字块地址需要6位。主存地址共19位,则主存字块标记19−6−6=7位。综上所属,主存段地址分别为:主存字块标记7位、缓存字块6位、字块内地址6位。
5.4替换算法
- 当新的主存块需要调入Cache并且Cache中可用位置被占满时,需要考虑替换掉Cache中哪一块数据。
1.先进先出(FIFO)算法
选择最早调入Cache的字块进行替换,不需要记录各字块的使用情况。这种方法不能提高Cache的命中率。
2.近期最少使用(LRU)算法
LRU算法比较好地利用访存局部性原理,替换出近期用的最少得字块。需要记录Cache中各字块最近使用情况。
六、辅助存储器
- 辅助存储器不直接与CPU交换信息。它与主存一起组成了存储器系统的主存—辅存层次。
- 广泛用于计算机系统的辅助存储器有硬磁盘、软磁盘、磁带、光盘等。前三种均属于磁表面存储器
1.磁表面存储器技术指标
①记录密度:
道密度:是沿着磁盘半径方向单位长度的磁道数。
位密度:磁道单位长度上能记录的二进制代码位数。
②存储容量:C = n × k × s
C为存储总容量,n为存放信息的盘面数,k为每个盘面的磁道数,s为每条磁道上记录的二进制代码数。
③平均寻址时间:寻道时间(磁头移动到目的磁道的时间) + 寻址时间(磁头定位到要读取扇区的时间)
④数据传输率:在单位时间内向主机传送数据的字节数。假设磁盘转数r转/秒,每条磁道容量为N字节。
则数据传输率Dr = r N
字块。需要记录Cache中各字块最近使用情况。
六、辅助存储器
- 辅助存储器不直接与CPU交换信息。它与主存一起组成了存储器系统的主存—辅存层次。
- 广泛用于计算机系统的辅助存储器有硬磁盘、软磁盘、磁带、光盘等。前三种均属于磁表面存储器
1.磁表面存储器技术指标
①记录密度:
道密度:是沿着磁盘半径方向单位长度的磁道数。
位密度:磁道单位长度上能记录的二进制代码位数。
②存储容量:C = n × k × s
C为存储总容量,n为存放信息的盘面数,k为每个盘面的磁道数,s为每条磁道上记录的二进制代码数。
③平均寻址时间:寻道时间(磁头移动到目的磁道的时间) + 寻址时间(磁头定位到要读取扇区的时间)
④数据传输率:在单位时间内向主机传送数据的字节数。假设磁盘转数r转/秒,每条磁道容量为N字节。
则数据传输率Dr = r N
计算机组成原理——刘宏伟
参考文献:计算机组成原理第2版—唐朔飞