超大规模集成电路使CPU速度变得非常快,但存储器取数、存数还相对较慢,使得计算机系统运行速度受存储器限制;此外,随着I/O设备增多,若与存储器交换信息都通过CPU来实现,那也会降低CPU的效率。
一、 概述
1.1 存储器的分类
主存又叫内存,辅存又叫外存。
1.2 存储器的层次结构
存储器有三个性能指标:容量、速度、每位价格(位价)。一般速度越快,位价越高,容量越大,位价越低。 并且容量越大,速度必越低。
缓存-主存:主要用于解决CPU与主存速度不匹配的问题。但缓存容量小,所以由硬件自动把主存中CPU近期要调用的内容不断放入缓存。
主存-辅存:用于解决系统容量问题。辅存速度慢但容量大,所以把CPU暂时不用的存入辅存。
CPU内部可能有十几个寄存器,他们速度最快,容量最低,位价最高。
容量🔝 位价⬇️ 速度⬇️
从上至下容量越来越大,速度越来越慢,位价越来越低,CPU访问频度也越来越低。
二、主存储器
2.1 概述
主存储器由存储体,MAR:地址寄存器、MDR:数据寄存器组成。
但寄存器的定义是:CPU内部的元件,有很快的读写速度。为什么又会出现在主存中呢?
实际上主存储器🟰存储体,MAR与MDR虽然是存储器的组成,但是集成在CPU的芯片上,是连接CPU和主存的桥梁。
存储体由若干个存储单元构成,存储单元存储的内容为存储字。
每个存储单元又由w个存储元组成,一个存储元只存储一bit 的信息。
存储字的长度叫存储字长,为w bit。
2.2 工作原理
回顾第一章: CPU包括运算器和控制器。控制器中包含PC程序计数器与IR指令寄存器,ID指令译码器、CU控制单元
一个程序包括指令和数据两部分。
IR:存放当前正在执行的译码之后的指令
PC:存放下一条指令的地址,取完字节PC自动➕1
若是读数据,就是CPU先通过控制总线发出读的命令,首先从PC中拿到指令的地址给MAR(因为MAR和MDR是主存与CPU的桥梁),然后根据MAR中的地址通过地址总线去内存找到地址和数据,把从存储单元中找到的数据给MDR,这时候MDR中包含数据和指令,通过数据总线把数据存放到寄存器中,指令给IR。
2.3 主存中存储单元地址的分配
2.3.1 寻址与地址表示
常用8位二进制表示一个字节,因此存储字长都是8的倍数。通常计算机系统按照字寻址,也可以用字节寻址。
32位=4字节=1字
64位=8字节=1字
例如:当总容量为1KB(就是2^10,10根地址线)
按字节寻址:1k个单元,每个单元1B
按字寻址:256个单元,每个单元4B
半字寻址:512个单元,每个单元2B
地址表示有两种方式:大端方式与小端方式。如图a是大端方式,使用高位作字地址。b是小端方式,使用低位作字地址。
2.3.2 主要的技术指标
1)存储容量
存储容量是主存能存放的二进制位数:存储容量=存储单元个数*存储字长(=存储元的个数)
用字节表示 = 存储元个数/8.
2)存储速度
存储速度由存取时间与存储周期决定。
存取时间:启动一次存储器到完成操作的时间。读和写的存取时间是不一样的,读出时间指接收到地址到产生输出的时间;写入时间是指找到存储单元到写入内容的时间。
存储周期:一次启动与下一次启动的时间间隔。(重要)!
3)存储器带宽
是单位时间内存储器存储的信息量,单位:字/秒、字节/秒。
若要提高存储器带宽,可以:
1.缩短存取周期
2.增加存储字长,每个存取周期就能读更多位的数据
3.增加存储体
三、半导体存储芯片
地址线和数据线的位数共同反应存储芯片容量
四、随机存取存储器
4.1 SRAM与DRAM的比较
随机存取存取存储器可以分为静态RAM与动态RAM。
存储器 | 静态RAM | 动态RAM |
存储信息 | 触发器(双稳态) | 电容 |
破坏性读出 | 否 | 是 |
读出后需重写 | 否 | 是 |
运行速度 | 快 | 慢 |
集成度 | 低 | 高 |
发热量 | 大 | 小 |
易失性 | 是(电信号存储01,断电后信息消失) | 是(断电后信息消失) |
需“刷新” | 否 | 是 |
运送行列地址 | 同时送 | 分两次送(在4.2中有介绍) |
读 | 查看触发器状态 | 连接电容,监测到电流变化(破坏性读出,检测后信息被破坏,需要重新充电) |
写 | 改变触发器状态 | 给电容充放电 |
SRAM常用作cache,DRAM常用作主存。
双稳态是指在电路或系统中,当没有外加触发信号时,电路或系统保持在一个稳定的状态;当施加触发信号时,电路或系统会从一个稳定状态翻转到另一个稳定状态;触发信号消失后,电路或系统能够保持这个翻转后的状态不变,直到下一次触发信号的到来。
4.2 DRAM的刷新
刷新就是读出信息后:读取原信息+再形成并写入 。其实也就是存取+恢复! 耳熟吗?都是读一下再放回去,让他恢复原样。
由于存储单元被访问是随机的,某些存储单元长期得不到访问就会消失,所以在一定时间内必须对DRAM全部基本单元电路进行一次刷新,一般取2ms,称为刷新周期,也叫再生周期。
首先一定要搞明白下面这几句:
刷新周期=刷新所用时间+读/写或(不操作)维持所用时间。
也就是:在刷新周期内,刷新的行要停止读写,不刷新的时候都能够正常读写或者不进行操作。
这下想起来了吧,存取周期和刷新是一样的,都是取出来一下再放回去。
所以刷新一行的时间=一个存取周期,所以刷新n行需要n个存储周期,不被刷新的行都能正常操作。
所以若对128*128的存储芯片进行刷新时(设刷新周期为2ms,存取周期为0.5us),
其实就类似于让你2000天内背128个单词,并为防止忘记要全部复习(设定:当天背的单词不能当天复习,最少要等到明天,并且一天只能复习一个,一天也只能背一个)一次,通常有三种方式。
拖延型集中复习:前1972慢慢背,后128天一天复习一个。
自律分散型复习:每天背完一个第二天就去复习,第三天再继续背第二个。
精打细算型复习:你让我2000天背128个,那我15.6(2000/128)天背完并且复习一个,也就是14.6天背一个,最后一天复习。
1)集中刷新
刷新是一行一行的,所以128*128的就要刷新128次。
集中刷新就是在刷新周期内对全部存储单元集中一段时间进行刷新,这个时候所有存储单元都不能进行任何其他操作。
若存取周期为0.5us,则共占128个存取周期(因为刷新一行就是一个存储周期,上面已经说了),刷新周期为2ms(相当于4000个存取周期),既然刷新的占128个存取周期,那么剩下的4000-128=3872个存取周期就是用来进行读/写或维持的。
缺点:后面128个存取周期是死时间,不能读/写,又称访存“死区”。死时间率:128/4000=3.2%
2)分散刷新
分散刷新就是每行存储单元放到每个存取周期刷新。
0.5us为存取周期,读/写或维持一行就刷新一次,那128个存储单元全部一行一行刷新完只需要花128us,刷新周期的定义是:在一定时间内,刷新完全部存储。所以这个时候刷新周期变成了128us也就是256个存取周期。
缺点:存取周期变长了,系统速度降低。(因为存取周期是存储器进行两次独立的存储器操作)
3)异步刷新
异步刷新是前两种的结合。
2000us内刷新128次,所以15.6us刷新一次,就不会缩短存取周期,还是2ms。也不会全部拖延到最后再刷新,缩小了死时间。
五、只读存储器
原始ROM的定义是:一旦注入原始信息就不能再改变,可读性高并且不易丢失。但随着用户的需求发展出了MROM,PROM,EPROM,EEPROM等。
Mask ROM:它是制造时被编程的ROM,也称为固定程序ROM。在生产过程中,使用特殊的工具来编程,一旦编程就不能再修改。它的优点是速度快,可靠性高,但缺点是一旦生产就不能修改,所以只适用于大量生产的产品中。
PROM:PROM是可编程只读存储器(Programmable Read-Only Memory)的缩写,是由用户自行编程的ROM。在生产过程中,使用特殊的编程器将数据写入PROM,一旦编程就不能再修改。与Mask ROM相比,PROM可以在生产之后进行编程,但缺点是编程速度慢,容易受到紫外线的影响而失去数据。
EPROM:EPROM是可擦除可编程只读存储器(Erasable Programmable Read-Only Memory)的缩写。它可以通过紫外线来擦除,使得EPROM可以被重复编程。EPROM的擦除需要特殊的设备,擦除时间比较长,而且擦除次数有限。
EEPROM:EEPROM是可擦除可编程只读存储器(Electrically Erasable Programmable Read-Only Memory)的缩写,与EPROM相比,它可以通过电子信号来擦除。EEPROM的擦除速度比EPROM快,而且可以擦除次数更多,但是价格更高。
Flash Memory:Flash Memory是一种特殊的EEPROM,它可以一次性擦除整个芯片,而不是像EEPROM一样只能擦除一部分。Flash Memory具有快速读取速度,容量大,擦除次数多等特点,因此在存储器领域被广泛使用。
六、主存容量的扩展
CPU有8位地址线,16位数据线
6.1 位扩展
位扩展就是增加存储字长。(存储字长不足时,需要对位数进行位扩展:增加存储单元的列)
存储字长:一个存储单元中二进制代码的位数
下图是两块芯片连接示意图,每块芯片都是A0~A12正常连接(地址线,adress),芯片是1位的,但CPU有8位数据线,所以再有六块芯片这样连接就行(第一块的数据线连D0,第二块的连D1……)。
6.2 字扩展
字扩展是增加存储器字的数量。(存储单元数不足时:增加存储单元的行)
芯片是8位的所以数据线每个都是D0~D7正常连,如果连接的是A13和A15,那么不用看A14 。
6.3 字位同时扩展(略)
例:
七、存储器的校验——汉明码
前提:
1.
2.要检测的代码为n位,要添加k位检测位,组成n+k位代码。应满足关系:
例:传递b3b2b1b0
解:n=4位,所以k=3,就是2^0,2^1,2^2,2^3位上分别对应C1,C2,C4 。所以配偶原则:(配奇原则就是整体上名加个“非”)
八、 提高访存速度
单体多字系统与多体并行存储器
8.1 多体并行的交叉编址
t是总线传输周期。
高位交叉编址也叫顺序存储
8.2 采用高性能存储芯片
高性能存储芯片也能提高访存速度。
九、 Cache高速缓冲存储器
主存物理地址 = 块号 + 块内地址
CPU的增长速度是指数级别的,主存跟它比起来还是慢了很多,拉慢整体速度,所以为了避免CPU空等现象,要想办法加快对主存的访问速度。
1)时间局部性:过会儿要用的可能就是现在正在用的。
2)空间局部性:过会儿要用的指令、存储数据可能和现在正在访问的在相邻的访问位置。
方法:把他们都先暂时存放在Cache中!!
9.1 主存地址映射
我们之前见过这张图
那么在主存与Cache的地址映射中,有:直接映射,全相联映射,组相联映射。
1>直接映射
就是把主存按着cache分,每一份就是一个cache
主存物理地址 = 标记+cache行号+块内地址
主存的每个字块都和Cache的字块是相对应的,字块标记位是一样的。怎么理解这张图呢,
所以其实主存对应的Cache 中的块就是 主存字块%cache总字块数
2>全相联映射
主存物理地址 = 标记+块内地址
就是全部随便映射
3>组相连映射
主存物理地址 = 块号+组号+块内地址
9.2 映射方式与计算
不论是哪种相联方式,都有块内地址,区别就在看前面怎么分。
全相联:主存物理地址 = 标记+块内地址
标记就是它唯一的标识
直接 :主存物理地址 = 标记+cache行号+块内地址
其实他也和组相联挺像的,就是一行就是一组,所以标识是标记➕行号
组相联:主存物理地址 = 标记+组号+块内地址
几个一组就是几路组相联
前面我们学过:地址线和数据线的位数共同反应存储芯片容量,因此
主存容量为512KB时,512K*1B = 2^19K*1B,所以此时有19根地址线。
并且题目问地址有多少位时,也就是问有多少根地址线。
默认按什么编址看题目,如果题目是每个字块16B,那就是按字节编址
知道了以上这些,开始做题:
主存容量为512KB,Cache容量为4KB,每个字块16个字,每个字32位
(1)Cache地址有多少位?可容纳多少块?
(2)主存地址有多少位?可容纳多少块?
(3)直接映射方式中,主存第几块映射到Cache第5块?
(4)直接映射时,主存各段位数。
(4)默认按字编址
9.3 Cache替换策略
1. Cache命中率a
Cache总命中次数位n,访问主存次数为m,则
a= n/(n+m)
命中率与Cache的容量与字长有关。
2. 访问效率e
e = 访问Cache的时间/平均访问时间
设命中率为h,访问Cache的时间为t,访问主存为T则
e = t/(h*t + (1 - h)*T)
9.4替换策略
1. 先进先出FIFO
2.近期最少使用LRU
要最少使用,还要是离现在最远的近期,比如容量为5,放了 1 2 3 4 5 ,要放6,但是没地方了,如果近期只用过45那就替换1
3.随机法
十、辅助存储器
辅存与主存相比,容量大速度慢,属于“非易失性”存储器,主存大多由半导体芯片组成,信息不易保存,属于“易失性”存储器。我们下面主要学习磁表面存储器。磁表面存储器通过磁头和记录介质相对运动,给写入线圈不同方向的电流,进行读和写操作。
在磁盘存储器中,扇区是磁盘寻址的最小单位。属于直接存取设备,磁盘存储器还分为硬磁盘存储器与软磁盘存储器,硬就是固定磁头固定盘,软就是活动头,可更换盘片。
在磁带存储器中,磁带与主机之间信息交换的最小单位是记录块。属于顺序存取设备。
10.1 磁表面存储器的主要技术指标
1.记录密度
是单位密度记录的二进制信息。磁盘用道密度表示。道密度 = 1/道距 (道距就是两个圈之间的距离)。
磁带用位密度表示,位密度 = 每个道的总位数/同心圆中最小的周长。
2.存储容量
存储容量是存储二进制的总位数。 存储容量 = 盘面数*磁道数*每个磁道上记录的二进制代码数。
3.平均寻址时间
磁盘采用直接寻址的方式。平均寻址时间 = 平均等待时间+平均寻道时间。 (平均等待时间=(最大等待时间+最小等待时间)/2)
4.数据传输率
数据传输率 = 记录密度*记录介质的运动速度
5.误码率
为了减少出错率,一般采用CRC循环冗余码进行验证。
十一、 循环冗余校验码
四个步骤:
1.信息码(题目给的)
2.生成多项式(可能题目直接给,可能自己根据系数推)
3.校验码位数(多项数最高项是几到时候就留几位余数加在信息码之后)
5.多项式对应二进制数(可能是题目给,可能是自己根据多项式推)
6.(信息码+校验码位数个0)/多项式对应二进制数
例:已知信息码为1100,试用生成多项式G(X)=1011将其编成CRC码。
解:1. 信息码:1100
2.生成多项式:
G(x) =
X^3+X+1
3.校验码位数:最高项次数是3,所以校验码为3位
4.多项式对应二进制数:1011
注意⚠️⚠️⚠️:1️⃣加减就是求异或,相同为0不同为1
2️⃣除法就是看余数除除数位数够不够,够就是1,不够就是0
5.(信息码+校验码位数个0)/多项式对应二进制数:
1100 000 / 1011