一、存储器的概述
🚀【考纲要求】存储器的分类,层次化存储器的基本结构
1.1存储器的分类
给出不同的分类标准,就可以进行不同的分类
1)按着在计算机中的层次结构分类
- ❀主存储器:就是我们常说的内存,它可以和高速缓存和辅助存储之间交换数据,
CPU
可直接与主存中交换数据; 特点:容量较小,单位价格贵,存取速度较快。 - ❀辅助存储器:就是我们常说的外存,它不可以和
CPU
交换数据,辅助存储器中存储的数据被调入主存后才可被CPU访问;特点:容量大,单位价格低,存取速度较慢。 - ❀高速缓冲存储器(
Cache
):经常被使用的命令和数据会被提前调入Cache
,CPU
直接访问Cache
得到数据;特点:速度快,容量小,单位价格贵。
2)按着在计算机中的存取方式分类
- ❀随机存储器(
RAM
):储存器中的任意一个存储单元都可以被随机存取,存取时间和位置无关,读写方便;RAM
有DRAM(动态
RAM)和
SRAM(静态
RAM`)两类。 - ❀只读存储器(
ROM
):只能随机读不可写,但是随着技术的发展和用户的需求,其可不可写特性没有保留,ROM
它也可以进行随机存取,但存的速度较慢。
需要注意的是ROM只是具有随机存储的特性并不是随机存储器,它和随机存储器最大的区别是ROM断电信息不丢失,RAM断电信息丢失。
- ❀串行访问存储器:分为顺序存取:磁带 ;和直接存取:磁盘,光盘。
1.2多级层次的存储系统
1)三级存储系统的层次结构
Cache
----主存层 :由硬件直接完成,对所有程序员透明。- 主存----辅存层:由硬件和操作系统共同完成,对应用程序员透明,对系统程序员不透明。
1)多级存储结构
二、主存储器
🚀【考纲要求】RAM SRAM DRAM Flash存储器 主存储器中的DRAM芯片和内存条,多模块存储器
2.1DRAM和SRAM
都是RAM
(随机存储器),都具有随机存取的特点,掉电信息丢失。
DRAM
的工作原理:
双稳态触发器存储信息,它的存储元为触发器
DRAM
的工作原理:
电容存储信息,它的存储元为电容。使用电容存储信息的话,由于电容上的电荷本身会随着时间逐渐减少,所以为了让存储的信息不丢失就要定时的刷新电容,以保证信息不丢失,刷新方式有以下三种
- 集中刷新: 固定在一段时间内刷新,存在死区,死区内不能对存储器进行读写操作。
- 分散刷新: 一次存取结束刷新一次,无死区,是一种过度刷新。
- 异步刷新: 使用一个刷新周期/
DRAM
芯片的行数=每一行刷新的最小时间间隔。让死区时间分散,避免让CPU
等待时间太长。
DRAM
的刷新以行为单位刷新;刷新操作类似于读的操作,但又有所不同;同时刷新时不需要片选,即整个存储器中的所有芯片的同一行同时被刷新。
目前更常用的时SDRAM
(同步动态RAM
),传统的动态RAM和CPU进行数据交换时异步于时钟信号的,而SDRAM
(同步动态RAM
)和CPU
之间的数据交换是同步的。SDRAM
支持突发式传送,即CPU给出读取的首地址,同一行所有的数据会被送至行缓冲器,所以之后的每个时钟周期都能连续的从行缓冲器中读取一个数据。(在总线第一节中,也学习到了突发式传送。总线的传输方式被分为了两种方式:①非突发式传送:每一次读取一个字长的数据,先给出数据地址,再准备数据,再传送数据;②突发式传送:只给出首地址,准备数据,连续传送数据,直到完成释放总线。)
2.2DRAM和SRAM的对比
特点 \ 类型 | SRAM | DRAM |
---|---|---|
存储元 | 触发器 | 电容 |
是否刷新 | 否 | 是 |
速度 | 快 | 慢 |
价格 | 高 | 低 |
地址传送 | 同时送送 | 两次(地址复用) |
集成度 | 低 | 高 |
用途 | Cache | 主存 |
2.3只读存储器(ROM)
ROM和RAM都支持随机存取,ROM是非易失性其间,RAM是非易失性器件。ROM的分类如下
MROM
:无法修改内容,出厂里面的信息就被写好了。PROM
:可以一次性编程,只可以写一次。EPROM
:可多次写,但是不可取代RAM,因为其速度慢,且写的次数有限,写次数太多会坏。Flash
存储器:兼具RAM和ROM的特点,由EPROM发展而来。SSD
固态硬盘:基于Flash存储器,由控制电路和Flash芯片发展而来。价格较高。
2.4主存储器的基本结构
读过程: CPU
即将要访问数据的地址送至MAR
(地址寄存器),由地址译码电路译码,选中即将要操作的数据单元,再由CPU
给出的读命令控制主存将译码地址中的内容通过数据线传至MDR
(数据寄存器)中,CPU
从MDR
中取得它这次要访问的数据
写过程: CPU
即将要访问数据的地址送至MAR
(地址寄存器),由地址译码电路译码,选中即将要操作的数据单元,再将要写的内容送至MDR
,再由CPU
给出的写命令控制MDR
(数据寄存器)中的内容写入选中单元。
MAR的位数反应了最大的一个寻址范围,即地址线的位数;MDR的位数反应了数据线的位数。(通常存储字长也等于MDR的位数)
DRAM芯片制作主存,其会采用引脚复用技术,行地址和列地址采用时序加控制的方式依次传送行列地址。 使得其引脚数大大减少;同时为使引脚数量少的话就尽量让行地址线和列地址线相同,为使得刷新代价小,应尽量减少行的数量,因为DRAM的刷新是以行为单位进行的。
2.5多模块存储器
多模块存储器的目的是为了提高访存速度的,对于提高访存速度的措施有以下几种
- 采用更加高速的器件
- 采用层次结构(
Cache
——主存) - 改变主存的存储结构----多模块存储器(一种空间并行技术)
2.5.1单体多字存储器
就是一个存储体里面放多个字,假设一个存储体里可以放n
个字,那么总线的宽度就也设置为n
个字,一次访存读取操作就可以读出n
个指令,将这n
个指令依次送CPU
执行。简单就是说一次访存多拿几个字。
缺点: 命令和数据必须得连续存放,若要不是连续存放,取出来的都不是CPU
想要的指令或者数据,还得重新读取,一旦遇到跳转指令较多的程序,速度提升几乎就不起作用了。
2.5.1多体并行存储器
①高位交叉/顺序方式(高位表示体号,低位表示体内地址)
根据程序局部性原理来说:指令会依次执行,假设程序的起始地址是000000
,接下去的下一条指令大概率就是000001
的位置,接下去是000010
,000011
~~~的位置,而这时每次访问的都是
M
0
M_0
M0存储体。所以各模块不能被并行访问,不能提高存储器的吞吐率。
②低位交叉/交叉方式(低位表示体号,高位表示体内地址)
同样指令会依次执行,假设程序的起始地址是000000
,接下去的下一条指令大概率就是000001
的位置,接下去是000010
,000011
~~~的位置,而这次是依次访问
M
0
M_0
M0、
M
1
M_1
M1、
M
2
M_2
M2、
M
3
M_3
M3存储体。所以各模块被并行访问。
对于低位交叉/交叉方式来说,其每个存储体的启动时间可以不同,按着存储体启动方式的顺序分为
- 轮流启动方式:每个模块一次读写的位数刚好等于总线位数 ;对于轮流启动方式来说,假设存储周期是
T
T
T,总线周期是
r
r
r,那么为了实现存储轮流启动方式,其交叉模块数量至少为
T
/
r
T/r
T/r。
对于轮流启动方式,若存取周期是 T T T,存储体的个数为 M M M个,每间隔 T / M T/M T/M时间轮流启动 M 0 M_0 M0、 M 1 M_1 M1、 M 2 M_2 M2、 M 3 M_3 M3存储体。每间隔 T / M T/M T/M时间就会从被选中的存储中读出一个存储字长的数据。连续读 m m m个字的时间为 t 1 = T + ( m − 1 ) ∗ r t_1=T+(m-1)*r t1=T+(m−1)∗r r = T / M r=T/M r=T/M若要读2个字得花费下图的 W 1 W_1 W1的时间。
轮流启动方式还会出现访问冲突,模块被访问一次后需等待一个存取周期才能被访问,若未等待一个存取周期就访问,就会发生访问冲突。
2. 同时启动方式:每个模块同时一次读写的位数刚好等于总线位数
三、主存储器和CPU之间的连接
🚀【考纲要求】主存储器中的主存储器和CPU之间的连接
仍然是下面这张图片,很清晰的展示的主存储器和CPU之间的连接关系。
在这里强调的更多的是对于主存容量扩展后其和CPU地址线的一个连接以及扩展后其和CPU数据线的连接,先学习的是主存的扩展,三种方式。
3.1主存容量的扩展
①位扩展
位扩展的关键:让多个芯片同时工作
②字扩展
字扩展的关键:让多个芯片不同时工作
③字位同时扩展
先位扩后字扩
3.2存储芯片的地址分配和片选、存储器和CPU的连接
①地址分配和片选
CPU实现对主存特定位置的访问,首先片选芯片或芯片组,然后再选择芯片内部的具体的存储单元。
片选的方式: 线选法、译码片选法
②存储器和CPU的连接
- 合理选择芯片。存放系统程序选ROM,普通区选RAM。
- 地址线和CPU的连接
- 数据线的连接
- 读/写命令线的连接(¬RD和¬WE,都是低电平有效)
- 片选线的连接(不可忘¬MREQ)
四、外存储器
🚀【考纲要求】磁盘存储器 固态硬盘SSD
还未学,之后补充!!!!!
五、高速缓冲存储器
🚀【考纲要求】Cache的基本原理;Cache和主存之间的映射方式;Cache中主存块的替换算法;Cache的写策略
5.1Cache的基本原理
CPU发出读操作: CPU通过地址线给出地址,Cache映像变换机构将主存地址与Cache中的进行比对,命中直接读,未命中判断Cache是否满,未满装进Cacha,满通过Cache替换机构替换,装入新的。(Cache和主存之间以块为单位传送,CPU和Cache以字为单位)
CPU发写读操作: 若Cache命中,向Cache写,此时就会出现Cache和主存内容不一致的问题,此时就需要解决主存和Cache之间的一致性问题。
5.2主存和Cache之间的一致性问题
①全写法:
CPU对Cache写命中,同时将内容写回主存;时时刻刻主存和Cache一致,但是由于会多次对主存写内容,对主存写的速度会慢于对Cache的,即设置了一个写缓冲。
②回写法
在Cache的每行设置一个脏位(修改位),脏位为0,表示数据未被更改过,不需要写回主存;脏位为1,表示数据被更改过,需要写回主存。
5.3主存和Cache之间的映射方式
①全相连
- 优点:命中率高,空间利用率高,冲突率低
- 缺点:标记的比较速度慢,实现成本高
地址结构:
标记(主存块号) | 块内地址 |
---|
其实所谓的标记就是主存块号,如何理解呢?因为标记实际是要被送入比较器的,比较器通过比较标记来看此次是否命中。就如上图所示,主存块号为9的主块,其地址结构写成 标记+块内地址的形式就是1001XXXX,后面的X就是块内地址,比较器比较标记,就是比较主存块号1001,看是否在cache中,如果在cache中找到了标记1001的块,说明命中(此时所说的命中不考有效位)
②直接相连
- 优点:实现简单
- 缺点:空间利用率低,冲突率高
地址结构:
标记(区号) | Cache行号(区中块号) | 块内地址 |
---|
其实这个所谓的标记就是区号,这又如何理解呢?就如上图所示,主存块号为9的主块,其实是在主存的第1号区里的,由于主存是16块大小,cache是8块大小,所以主存是分成了两个区。对于主存中9号块其地址结构写成 标记(区号)+区内块号(或者说是cache行号)+块内地址的形式就是1001XXXX,后面的X就是块内地址,最高位的1是区号,9号块是区号为1的区中,001是块号,9号块是1号区的第1号块;比较器比较标记时,就是比较区号1;假设此时cpu访问1001XXXX,比较器就直接去cache的第001行比较此时cache的行标记,比对成功,那么就命中,就是9号块。
例题
总结来看
- ①:对于直接相连来说应该牢记其地址结构,主存地址的位数=标记+组号+块内地址;要能计算出标记的位数。
- ②同时还要牢记地址结构中标记(区号)、Cache行号(区中的第几块)、块内地址的对应关系,低位对应块内地址,中间对应区的第几块,高位对应区号。
- ③分区数量=主存容量 /
Cache
容量;Cache
行数=区中有几块或者说是Cache
中有几行=Cache
容量 / 块大小。
③组间相连
是直接映射和全相连映射的综合考虑
组号=主存的块内地址 mod 组数(例:9mod4=1,被放在第一组的任意一个位置)
地址结构:
标记 | 组号 | 块内地址 |
---|
真正要理解组相连映射应看以下这幅在计算机体系结构课程中的图片,组相连的本质是主存分区,区的大小和cache的大小一致,在区中分组,cache组和主存中的组采用直接映射的方式,组内的块是采用全相连映射的方式。
假设cache中是6个块,分成两个组,一个组3块,主存分成两个区,一个区6块,一组3块,那么对于主存块号为2的块来说,若将其按着区号+组号+块号+块内地址方式编址的话就是0010XXXX,高位的0表示在0号区,高位第二位的0表示在第0号组,10表示的是组内的2号块;此时CPU的访存地址是0010XXXX的话,比较器会直接比较cache中0号组的0X(该X是组号)10,所以只需要比较010,若此时cache的标记也为010则命中。其实不难发现,对于组相连中的标记来说标记就是区号+块号。
实质理解组相连映射的时候采用下面这副图,在计算主存块号对应在cache的第几组的时候采用上面这幅图,使用主存块号mod组数。
例题:
总结来看
- ①:对于组相连来说应该牢记其地址结构,主存地址的位数=标记+组号+块内地址;要能计算出标记的位数。
- ②同时还要牢记地址结构中标记、组号、块内地址的对应关系,低位对应块内地址,中间对应组号,高位对应标记。
- ③要区分
Cache
行的位数和比较器的位数;Cache
行的位数=数据位数+标记位+脏位+替换算法位+有效位,比较器的位数=标记位,标记位是会被送入Cache
的映像替换机构的,进行对比看是否命中的。
5.4比较器的个数
通常每一个Cache
行都设于一个比较器,对于全相连映射来说Cache
中有N
行就N
个比较器;对于直接映射只需要一个;对于组相连映射,组内有几个Cache
行就要几个比较器。
5.5 Cache的标记位
- 替换控制位:
LRU
的计数器 - 有效位:表示该数据有效
- 脏位:回写法(标记数据有没有被更改)
有效位 | 脏位 | 替换控制位 | 标记位 |
---|
这里所说的Cache的标记位是Cache
行的位数除去数据位剩下的,与主存地址结构中的标记位不同;一个叫Cache
的标记位(其包含有效位、脏位、替换控制位、标记位),一个就叫标记位,他是比较器要比较的标记,用于判断是否命中的。
所以Cache
行的位数=数据位数+标记位+脏位+替换算法位+有效位;Cache
行的位数=数据位数+Cache
的标记位;比较器的位数=标记位。
5.6 Cache的替换算法
①随机算法
Cache
中块的替换完全随机,该算法就是实现简单,会导致命中率低,未体现程序的局部性原理。
②先进先出
先进入Cache
中的块先被替换走,实现也是比较简单的,同样的未遵循程序的局部性原理,因为先进来的块中的内容是可能一直要被用的。
③近期最少使用
Cache
中的块哪个最近被使用的最少,就替换掉哪个,遵行了程序的局部性原理。(会出现抖动现象,即假设Cache
容量4,而数据块x的内容每间隔4次访存就要被访问一次,就会出现抖动现象)
例子:
访问主存块 | 1 | 8 | 1 | 7 | 8 | 2 | 7 | 2 | 1 | 8 | 3 | 8 | 2 | 1 | 3 | 1 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Cache 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
Cache 2 | 8 | 8 | 8 | 8 | 8 | 8 | 8 | 8 | 8 | 8 | 8 | 8 | 8 | 8 | 8 | |
Cache 3 | 7 | 7 | 7 | 7 | 7 | 7 | 7 | 3 | 3 | 3 | 3 | 3 | 3 | |||
Cache 4 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | |||||
是否命中? | 否 | 否 | 否 | 否 | 否 |
命中率 = 11/16 = 68.75%
④最不经常使用
Cache
中一段时间内被访问次数最少的块被换掉。
六、虚拟存储器
🚀【考纲要求】虚拟存储器的基本概念;页式虚拟存储器:基本原理、页表、地址变换、TLB(块表);段式虚拟存储器的基本原理;段页式虚拟存储器的基本原理。
操作系统中总结!!!!!