一些理解参考了华中科技大学的慕课
1、基本概念
名称 | 概念 |
---|---|
存储容量 | 指一个存储器中可以容纳的存储单元总数。典型的存储单元存放一个字节,因此通常用字节数来表示,KB、MB、GB、TB。 |
存取时间 | 读操作时间指一次读操作命令发出到该操作完成、数据读出到数据总线上所经历的时间。通常写操作时间等于读操作时间,故称为存取时间。 |
存取周期 | 也称读写周期,指连续启动两次读/写操作所需间隔的最小时间。通常存储周期略大于存取时间,因为数据读出到总线上,还需要经过数据总线、CPU 内部数据通路传递给控制器/运算器。 |
虚拟存储器 | 是通过硬件/操作系统,实现主存-外存之间的信息部分调入调出,为用户提供一个比实际物理内存容量大得多的存储器逻辑空间,使之为更大或更多的程序所使用。主存-外存之间的信息部分调入调出过程对用户透明。 |
2、存储器的分级结构
![](https://i-blog.csdnimg.cn/blog_migrate/533d8354800ec058d60a8f6c73890094.png)
对存储器的要求是容量大、速度快、成本低,但是在一个存储器中要求同时兼顾这三个方面的要求是困难的。
为了解决这方面的矛盾,目前在计算机系统中通常采用多级存储器体系结构,即高速缓冲存储器、主存储器和外存储器。
在计算机系统中存储层次可分为高速缓冲存储器(cache)、主存储器(内存)、辅助存储器(外存)三级。
高速缓冲存储器用来改善主存储器与中央处理器的速度匹配问题。
辅助存储器用于扩大存储空间。
![](https://i-blog.csdnimg.cn/blog_migrate/620554d5e8ad9c6bc292bfdc6ea8dc36.png)
CPU 能直接访问高速缓冲存储器(英文:cache) 和内存;外存信息必须调入内存后才能为 CPU 进行处理。
- (1)高速缓冲存储器:高速小容量半导体存储器,强调快速存取指令和数据;
- (2)主存储器:介于 cache 与外存储器之间,用来存放计算机运行期间的大量程序和数据。要求选取适 当的存储容量和存取周期,使它能容纳系统的核心软件和较多的用户程序;
- (3)外存储器:大容量辅助存储器,强调大的存储容量,以满足计算机的大容量存储要求,用来存放系 统程序、应用程序、数据文件、数据库等。
3、主存储器的逻辑设计
容量和地址线的换算:
128K的存储器 -> 2 ^ 7 * 1024 = 2 ^ 17 所以有 17根地址线
字长32位,则半字长16位,双字长64位。
按边界对齐方式的存储要求是:
双字数据起始地址的最末三位为000(8字节的整数容倍);
单字数据起始地址的最末二位为00(4字节的整数倍);
半字数据的起始地址的最末一位为0(2字节的整数倍)。
PS:可以不考虑,每个学校要求不一样
- 第一步:根据设计容量、提供的芯片容量构建地址空间分布图(类似搭积木) ,可能需要字、位扩展;
- 第二步:用二进制写出连续的地址空间范围;
计算要多少个存储器,每个存储器地址空间范围 00000…(地址线位数) ~ 11111(地址线位数)
由地址线位数从后往前,每四个为一位转化为16进制,参照例子2 - 第三步:写出各片组的片选逻辑表达式。
- 第四步:按三总线分析 CPU 和选用存储器芯片的数据线、地址线、控制线,以便设计 CPU 与存储器的连接。
- 第五步:设计 CPU 与存储器连接的逻辑结构图。
位扩展例子:
![](https://i-blog.csdnimg.cn/blog_migrate/a966e289b8a6e45a5d9787922f5b89c5.png)
字扩展例子:
![](https://i-blog.csdnimg.cn/blog_migrate/e62b5b3d3f044c2114deadc75c79df4a.png)
1、设有一个具有20位地址和32位字长的存储器,问:
(1)该存储器能存储多少个字节的信息?
- 220 × 32 bits = 1M × 4B = 4MB
(2)如果存储器由512K * 8位SRAM芯片组成,需要多少片?
- (1024K * 32)/(512K * 8) = 8 片
(3)需要多少位地址做芯片选择?
- 存储器带 512k -> 19位地址
所以1位做芯片选择,A0~A18接存储器,A19接片选译码器
5、要求用256K * 16位SRAM芯片设计1024K * 32位的存储器。SRAM芯片有两个控制端:当 C S ‾ \overline {CS} CS 有效时,该片选中。当 W / R ‾ = 1 W/ \overline R =1 W/R=1时执行读操作,当 W / R ‾ = 0 W/ \overline R =0 W/R=0时执行写操作。
- (1024K * 32) / (256K*16) = 8 片
1024K —> 20根地址线
256K —> 18根地址线
2根接片选译码器
7、某机器中,已知配有一个地址空间为0000H–3FFFH的ROM区域。现在再用一个RAM芯片(8K * 8)形成40K * 16位的RAM区域,起始地址为6000H。假设RAM芯片有
C
S
‾
\overline {CS}
CS和
W
E
‾
\overline {WE}
WE信号控制端。CPU的地址总线为A15-A0,数据总线为D15-D0,控制信号为
R
/
W
‾
R/\overline W
R/W(读/写),
M
R
E
Q
‾
\overline {MREQ}
MREQ(访存),要求:
(1)画出地址译码方案。
(2)将ROM与RAM同CPU连接。
4、顺序存储器和交叉存储器的定量分析
顺序方式:各存储体依次顺序定义地址空间,即字扩展方式,每个存储体中的地址是连续的。
![](https://i-blog.csdnimg.cn/blog_migrate/0c5b76ae5112afa50a23a0d61644abae.png)
地址范围:
M0:00 000-00 111
M1:01 000-01 111
M2:10 000 10 111
M3:11 000-11 111
特点:
(1)某模块进行存取时,其他模块不工作。
(2)某模块出现故障时,其他模块可以照常工作。
(3)增添模块扩充容量比较方便。
(4)各模块串行工作,无法采用流水线技术。
交叉方式:连续地址交叉分配在各个存储体中,每个存储体中的地址是不连续的。
![](https://i-blog.csdnimg.cn/blog_migrate/69087eccc20700bd73c59a4afabd0e0e.png)
地址范围:
M0:000 00-111 00
M1:000 01-111 01
M2:000 10-111 10
M3:000 11-111 11特点:
(1)同一个模块内的地址都是不连续的。
(2)对连续的存储器访问可实现流水线并行存取,提高存储器的带宽。
计算:
顺序存储器:mT
交叉存储器:可以使用流水线存取,T+(m-1)τ
【例】设存储器容量为32字,字长64位,模块数m=4,分别用顺序方式和交
叉方式进行组织。存储周期T=200ns,数据总线宽度为64位,总线传送周期
τ=50ns。问顺序存储器和交叉存储器的带宽各是多少?
【解】
- 顺序存储器和交叉存储器连续读出m=4个字的信息总量都是:
q=64位×4=256位。
顺序存储器和交叉存储器连续读出4个字所需的时间分别是:
t2=mT=4×200ns=800ns=8×10-7s
t1=T+(m-1)τ=200ns+3×50ns=350ns=3.5×10-7s
顺序存储器和交叉存储器的带宽分别是:
W2=q/t2=256÷(8×10-7)=320 Mbps
W1=q/t1=256÷(3.5×10-7)=730 Mbps
作业题:
8、设存储容量为64M,字长为64位,模块数m=8,分别用顺序和交叉方式进行组织。存储周期T=100ns,数据总线宽度为64位,总线传送周期t=50ns。求:顺序存储器和交叉存储器的带宽各是多少?
- 【解】顺序存储器和交叉存储器连续读出m=8个字的信息总量都是:
q=64位×8=512位。
顺序存储器和交叉存储器连续读出8个字所需的时间分别是:
t2=mT=8×100ns=800ns=8×10-7s
t1=T+(m-1)τ=100ns+7×50ns=450ns=4.5×10-7s
顺序存储器和交叉存储器的带宽分别是:
W2=q/t2=512÷(8×10-7)=640 Mbps
W1=q/t1=512÷(4.5×10-7)=1140 Mbps
5、高速缓冲存储器 cache 的基本原理,cache 命中率相关计算
Cache 的基本原理:
![](https://i-blog.csdnimg.cn/blog_migrate/3543e21683b25ab0e4537fd3faa1e8b3.png)
cache 是一种高速缓冲存储器,为了解决 CPU 和主存之间速度不匹配而采用的一项重要技术。
- 主存和cache均按照约定长度划分为若干块,存储单元物理地址=块地址(块编号)+ 块内地址。
- 主存中一个数据块调入到 cache 中,则将数据块地址(块编号)存放到相联存储器 CAM 中,将 数据块内容存放在 cache 中。
- 当 CPU 访问主存时,同时输出物理地址给主存、相联存储器 CAM,控制逻辑判断所访问的块是否在 cache 中:
若在,则命中,CPU 直接访问 cache。
若不在,则未命中,CPU 直接访问主存,并将该单元所在数据块交换到 cache 中, 后续对该存储块的访问则在cache命中。 - 通过 cache 和主存之间的动态数据块交换,尽量争取 CPU 访 存操作在 cache 命中,从而总体提高访存速度。
- 基于程序和数据的局部性访问原理,cache实际上是主存的当前最活跃部分,即主存的一个子集。
cache 命中率相关计算:
-
(1)命中率
增加cache以后,就应该尽量争取在cache中命中越多越好。
在一个程序执行期间,设Nc表示cache命中完成存取的总次数,Nm表示未命中、主存完成存取的总次数,h定义为命中率,则有:
-
(2)主存/cache 系统平均访问时间
设tc表示命中时的cache访问时间,tm表示未命中时的主存访问时间,1-h表示未命中率,则cache/主存系统的平均访问时间ta为:
-
(3)访问效率
设r=tm/tc表示主存慢于cache的倍率,e表示访问效率,则有:
【例】CPU执行一段程序时,cache完成存取次数为1900次,主存完成存取
次数为100次,已知cache存取周期为50ns,主存存取周期为250ns,求
cache/主存系统的效率和平均访问时间。
【解】
- h=Nc/(Nc+Nm)=1900/(1900+100)= 0.95
- r=tm/tc=250ns/50ns= 5
- e=1/(r+(1-r)h)=1/(5+(1-5)×0.95)= 83.3%
- ta=tc/e=50ns/0.833=60ns
作业题:
9、CPU执行一段程序时,cache完成存取的总次数为2420次,主存完成存取的总次数为80次,已知cache存储周期为40ns,主存存储周期为240ns,求cache/主存系统的效率和平均访问时间。
- 【解】
h=Nc/(Nc+Nm)=2420/(2420+80) = 0.968
r=tm/tc=240ns/40ns = 6
e=1/(r+(1-r)h)=1/(6+(1-6)×0.968) = 86.2%
ta=tc/e=40ns/0.862= 46 ns