3.1 概述
存储器是计算机系统中的记忆设备,主要用来存放程序和数据。
构成存储器的存储介质,目前主要是半导体器件和磁性材料。
存储位元:二进制代码位,存储器中最小的存储单元。
由若干个存储位元组成一个存储单元,多个存储单元组成一个存储器。
存储器的分类
- 存储介质的不同:半导体材料的称为半导体存储器,磁性材料的称为磁表面存储器如:磁盘和磁带
- 存取方式的不同:随机存储器和顺序存储器。
- 内容储存的可变性:只读存储器ROM、随机读写存储器RAM
- 信息的易失性:断电后信息消息的叫易失性存储器(半导体材料),断电后仍然能保存信息的是非易失性存储器(磁性材料)。
- 系统中的作用:内部存储器和外部存储器。
存储器类型 | 种类 | 描述 |
---|---|---|
随机存储器RAM | 读写 | 易失 |
只读存储器ROM | 一次编程,只读 | 不能擦除,非易失 |
可编程PROM | 一次编程,只读 | 不能擦除,非易失 |
光擦可编程EPROM | 多次编程,只读 | 紫外线擦除 非易失 |
电擦可编程EEPROM | 多次编程,只读 | 电擦除 非易失 |
闪速存储器 | 多次编程,只读 | 电擦除 非易失 |
存储器的分级
计算机系统中通常采用多级存储器体系结构:高速缓冲存储器cache,主存储器(是计算机系统的主要存储器,负责存放计算机运行期间的大量程序和数据,能和cache进行信息的交互)和外存储器(大容量的辅助存储器,用来存放系统程序和文件,如硬盘)。
- CPU内,寄存器cache
- 主板内,主存储器
- 主板外,磁盘 光盘
- 离线,磁带
主存器的技术指标
存放一个机器字的存储器单元称为字存储单元,字地址;存放一个字节的存储单元称为字节存储单元,字节地址。
计算机中可编址的最小单位是一个字存储单元称为按字寻址计算机,同理称为按字节寻址计算机。
主存储器的性能指标主要是存储容量、存取时间、存储周期和存储器带宽;其中存取时间、存储周期和存储器带宽反映了主存的速度指标。
存储容量:一个存储器中所能容纳存储单元的个数。
存取时间:一次读操作命令从发出到该命令完成将数据读出所经历的时间。
存储周期:是指连续启动两次读操作所需的最小间隔时间。
存储器带宽:单位时间内存储器所能存取信息的容量。
3.2 SRAM
SRAM称为静态读写存储器,DRAM称为动态读写存储器。SRAM的优点是存取速度快,但是存储容量不如DRAM大。
SRAM的特征是用一个锁存器(触发器)作为存储元,只要断电,存储的数据0/1就会丢失。
SRAM由三组信号线与外部进行交互
- 地址线:指定了存储器的容量,如6条线就是2^6=64个存储单元
- 数据线:指定了存储器的字长位数,如4条线就是4位,存储位元就是64*4=256
- 控制线:指定了对存储器是进行读写操作的哪一个。
SRAM采用双译码方式,以便组织更大的存储容量。双译码:采用二级译码,即将地址分为行向和列向两种,第一级进行行译码和列译码的独立译码,第二级是在存储阵列中完成第二级的交叉译码。
3.3 DRAM
DRAM容量大,通常用作计算机的主存,SRAM的存储元是一个触发器,DRAM的存储元是由一个MOS晶体管和电容器组成的记忆电路。当电容器充满电荷时代表存储了1否则代表存储了0.
刷新周期:DRAM存储位元是基于电容器上的电荷量存储,电荷量随着温度和时间而减少,因此需要定时进行刷新。
刷新操作拥有两种刷新方式:集中式刷新和分散式刷新。
集中式刷新:DRAM的所有行在每一个刷新周期中都被刷新。此时所有的读写操作都停止,直至刷新完成方可恢复。
分散式刷新:每一行的刷新插入到正常的读写周期中。每隔 刷新时间/行数 的时间来刷新一次,一次刷新一行。
存储器容易的扩展
- 字长位数扩展:给定芯片字长过短,不能满足设计要求,需要用多片给定芯片进行扩展字长位数。
- 字存储量扩展:给定芯片容量过短,不能满足设计要求,需要用多片给定芯片进行扩展容量。
- 存储器模块条:内存条。
SRAM和DRAM的区别
- SRAM的存储元是触发器,DRAM的存储元是MOS晶体管和电容器
- SRAM的存取速度快,DRAM的容量大
- DRAM相比较于SRAM增加了行地址锁存器和列地址锁存器,还增加了刷新计数器以及相应的控制电路。DRAM读出后必须刷新。
- 寻址方式的不同。
3.4 并行存储器
由于CPU和主存储器在速度上是不匹配的,为了缓解这种矛盾,提高CPU和主存储器之间的数据传输率,除了采用更高速的技术来缩短存读出时间外,还可以采用并行技术的存储器。
并行存储器分为双端口存储器(空间并行技术)和多体交叉存储器(时间并行技术)。
双端口存储器
双端口存储器:同一个存储器具有两组相互独立的读写控制电路而得名。两个端口都独立拥有各自的地址线数据线和控制线。
当两个端口同时存取同一存储单元时,会发生读写冲突,此时增加一个BUSY标志,由片上的判断逻辑来决定由哪一个端口优先进行读写操作。当端口的BUSY标志位为低电平时就暂时关闭这个端口。
多模块交叉存储器
在常规存储器中,访问地址采用顺序方式,按照模块进行数据的存取,每一个模块中的地址都是连续的,即当一个模块进行工作时,其他模块不工作,当一个模块出现故障时不会影响到其他模块的运行,扩展方便。但是顺序方式中模块是串行工作的,存储器的带宽受到了限制。
交叉方式寻址的存储器中,地址连续的分布在相邻的两个模块内,同一个模块中的地址都是不连续的,可以实现多模块流水式并行存取,大大提高了存储器的带宽。CPU的速度比主存快,但同时从主存上取出多条数据,更好的缓解它们之间速度不匹配的矛盾。
计算: 设存储周期为T,总线传送周期为t,存储器的交叉模块数为m;
顺序存储: t1 = mT
交叉式存储: 交叉存取度为m=T/t ,t2=T+(m-1)t
#例题5
设存储器的容量为32字,字长64位,模块m=4,分别用顺序存储和交叉式存储进行组织,存储周期T=200ns,数据总线宽度64位,总线传送周期t=50ns,若连续读出4个字,求顺序存储器和交叉存储器的带宽是多少?
#带宽 w =q/t 算出二者信息总量和时间
#首先计算信息总量
q = 64b *4 =256b
#计算读出四个字所需时间
连续存储:t1 = mT = 4*200ns = 800ns
交叉存储: t2= T + (m-1)t = 200ns + 3*50ns = 350ns
#求带宽 w = q/t
w1 = q/t1 = 256b / 8*10^-7 s = 320 Mb/s
w1 = q/t1 = 256b / 3.5*10^-7 s = 730 Mb/s
3.5 Cache存储器(重点)
cache是一种高速缓冲寄存器,主要为了缓解Cpu和存储器速度不匹配的矛盾,cache的原理主要是基于程序运行的时间局部性 和空间局部性特征。全部由硬件实现,对程序员是透明的。cache除了包含SRAM外还需要逻辑控制。
CPU和cache之间的信息交换是以字为单位,而cache和主存之间的信息交换是以块为单位,块由若干字组成是定长的。
执行过程:当CPU读取主存中的一个字时,便发出这个字的内存地址到cache和主存,依据这个地址判断这个字是否在cache中,若是则直接将字传送给CPU,若不是,则从主存中读取这个字,送到CPU中,同时将包含这个字的整个块读出送到cache中。
cache的命中率
命中率 = cache完成存取的总次数 / (cache完成存取的总次数+主存完成存取的总次数)
平均访问时间=命中率*cache的访问时间 + (1-命中率) *主存访问时间
命中率越高越好。
cpu执行一段程序时,cache完成存取的次数为1900,主存完成的存取次数为100,一直cache存取周期为50ns,主存存取周期为250ns,求平均访问时间。
#首先计算命中率,然后根据公式计算时间
h = 1900/1900+100 = 0.95
t = h * 50ns + (1-h)*250ns = 60ns
主存与cache的映射关系
cache的容量很小,只能保存主存的一个子集,二者的数据交换是以块为单位。为了把主存放到块中,必须采取某种办法将主存定位到cache中,这就是地址映射。
地址映射的三种方式:全相联方式、直接方式和组相联。
全相联方式:将主存中一个块的块号和块的内容一起存于cache的行中,块号存在于cache的标记部分中,这种带全部块号一起保存的方法,可使主存的一个块直接拷贝到cache中的任意一行,但是适合于小容量的cache。
内存地址:块号 + 字
直接方式:也是一种多对一的映射方式,但是一个主存块只能拷贝到cache一个特定行的位置上。如cache有m行,cache的第0行只能由主存的第1块、第m+1块、2m+1….映射。
内存地址:标记 + 行号 + 字
组相联:将cache分为u组,每组v行,主存块存放到哪个组是固定的,但是在相应组的行位置是任意的。
内存地址:标记 + 组号 + 字
cache的替换策略:LFU最不经常使用算法、LRU近期最少使用算法、随机替换。