第六章存储器层次结构
教材导读
-
第七周:学习任务教材第六章
-
了解存储设备的类型和特点;重点理解局部性原理和缓存思想在存储层次结构中的应用
-
重点练习题:6.2,6.3,6.4,6.8,6.9,6.10,6.11,6.12, 6.13
-
6.1 节
- 了解三种常见存储技术:RAM/ROM/磁盘;
- RAM有SRAM和DRAM,特点和应用;
- ROM有PROM,EPROM,E2PROM,FLASH;
- 磁盘是重点,涉及到后面的i/o和文件系统,做好相关练习
- 磁盘结构:盘片、磁道、扇区、间隙、柱面;磁盘驱动器
- 磁盘容量
- 访问时间:寻道、旋转、传送
- 逻辑磁盘块:这个很重要,内存可以看成字节数组、磁盘可以看成块数组
- 总线
- 数据总线、控制总线、地址总线
- 系统总线、存储总线、I/O总线:p395图要理解
- 读写事务:P389图要能理解
-
6.2 节
- 局部性原理:时间局部性、空间局部性,有能力者理解一下p429最后一段“存储器山”
- 数据引用局部性
- 取指令局部性
-
6.3 节
- 存储层次结构:系统观(1+1>2)(举一反三:对称不对称加密形成的混合加密系统,混合动力汽车...)
- 中心思想:每层存储设备都是下一层的“缓存”
- 对照p408的表理解
-
6.4节
- 高速缓存结构(S,E,B,m):高速缓存组、高速缓存行、块
- 映射
- 命中
- 缓存管理
教材学习内容总结
6.1存储技术
-
随机访问存储器(RAM)
静态RAM(SRAM):快,作为高速缓存存储器。(几百几千兆) 动态RAM(DRAM):作为主存,图形系统的帧缓冲区。(<=几兆)
- 静态RAM
具有双稳定状态,它可以无期限地保持在两个不同的电压配置(状态)其中的一个。也可以保持在亚稳定状态,但这个状态易被干扰。由于它具有双稳定性,所以即使有干扰,当干扰消除时,它能很快地恢复到稳定值。
- 动态RAM
DRAM将每个位存储为对一个电容充电。对干扰非常敏感,电容的电压被干扰之后就永远不会恢复了。
- 非易失性存储器:非易失性的意思断电后不会丢失信息。SRAM、DRAM都是易失性存储器。
-
ROM:只读存储器(read-only memory)它有的类型既能读也能写,历史原因这样称呼它。
-
ROM分类:(依据能被重新编程、写的次数和 编程所用的机制)
PROM:只能被编程一次。
可擦写可编程ROM(EPROM):被编程105次
闪存:基于EEPROM,为大量的电子设备提供快速持久的非易失性存储。
固件:存储在ROM设备中的程序。
-
-
总线
-
总线是一组并行的导线,能够携带地址,数据和控制信号。
-
CPU与主存之间的数据传送:通过总线的共享电子电路在处理器和DRAM主存来回往返。
-
总线事务:读事务(主存传送数据到CPU,即cpu从主存读)、写事务(CPU传送到主存)
上面是典型的连接CPU和主存的总线结构:
-
系统总线:连接CPU和I/O桥
-
存储器总线:连接主存的I/O桥
-
-
磁盘存储
- 大,但是慢。DRAM快10万倍,SRAM快100万倍。
-
1.磁盘构造
-
磁盘(旋转磁盘)由一个或者多个叠放在一起的盘片组成,封装在一个固定的容器里。盘片有两个表面,盘片中央有一个可以旋转的主轴,固定速度5400~15000转每分钟。整个装置称为磁盘驱动器。
-
磁道:一个表面从圆心扩散,划分了一组同心圆。
-
扇区:存储等数量的数据位。
-
间隙:存储标识扇区的格式化位。
-
柱面:半径距离相等的磁道的集合。
-
-
2.磁盘容量
-
磁盘容量:磁盘最大容量。
-
计算方法:磁盘容量=每个扇区字节数每个磁道平均扇区数每个表面的磁道数每个盘面的表面数磁盘的总盘面数
-
-
3.磁盘操作
-
寻道时间:读写头定位到磁道上的时间。通常:3~9ms
-
旋转时间:到了磁道,等待目标扇区的时间。最大旋转延迟:
Tmax rotation=1/RPM * 60secs/1min 平均旋转时间(延迟):最大的一半。
-
传送时间:驱动器读写内容所花时间。
- Tavg transfer=Tmax rotation * 1/每个磁道平均扇区数
-
计算小结:
时间主要花在寻道和旋转延迟上。
寻道时间和旋转延迟大致相等,一般直接寻道时间*2。
-
-
4.连接到i/o设备
-
5.访问磁盘
下面这幅图展示计算机如何通过总线访问磁盘。
-
6.2局部性
局部性原理:程序倾向于引用邻近最近引用过的数据项或者就是数据项本身。 时间局部性:存储器位置多次被引用。 空间局部性:存储器位置附近的位置在不远的将来被引用。
-
对程序数据引用的局部性
- 步长为一的引用的模式为顺序引用模式。每隔K个元素进行访问,称为步长为K的引用模式。
对指令的局部性:循环体具有良好的时间和空间局部性
局部性规律总结
重复引用同一个变量的程序具有良好的时间局部性 对于步长为K的引用模式,K越小,空间局部性越好。 对于取指令,循环具有良好的时间和空间局部性。循环体越小,循环迭代次数越多,局部性越好。
-
6.3存储器层次结构
-
存储器层次结构中的缓存
高速缓存:下一层(对它本身来说更大更慢的设备)的缓冲区域。使用高速缓存的过程叫做缓存。
-
存储器结构层次的中心思想:每层存储设备都是下一层的“缓存”。
-
-
缓存命中
程序需要K+1层的数据对象d,并且d刚好在K层的一个块中。
-
缓存不命中:与缓存命中相反。
-
缓存不命中的种类
-
强制性不命中:上一层缓存是空的导致的不命中。
- 放置策略 :
高层的缓存(靠近CPU)使用的昂贵代价高版:
允许K+1层的任何块放在K层的任何块中
- 严格版:
K+1层的某个块限制放置在K层的某个块中。
-
冲突不命中:缓存够大,由于严格的放置策略会使K+1层不同对象映射到K层同一个块引起的不命中。
-
容量不命中:缓存不够大引起的不命中。
-
-
缓存管理
L0:编译器
L1,L2,L3:硬件逻辑
L4:操作系统+CPU上的地址翻译硬件
L5:AFS客户端进程
-
6.4高速缓存存储器
- 通用的高速缓存存储器结构
存储器地址:m位
高速缓存组:S=2^s位
每组E行高速缓存行
每行1个B=2^b字节的数据块
标记位:t=m-(b+s):唯一标识高速缓存行的块
高速缓存大小C=S* E *B
-
直接映射高速缓存
1.直接映射高速缓存中的组选择
抽取目标地址的对应的S位组索引位。
2.直接映射高速缓存中的行匹配
有效位&&t位标记位和目标地址的标记匹配,同时为真则命中 不命中时的处理方法:行替换 先从下一层取出被请求的块,再在块中组索引,再行匹配(同时有效的话,就可以确认是这个对象了)。由于直接映射高速缓存每组只有一行,所以只需要将新的行替换当前行就行了。
3.直接映射高速缓存中的字选择
块偏移提供的是所需要的字的第一个字节的偏移。
-
以一个例子来理解高速缓存的全过程
在这个例子中,块0,4映射到组0,块1,5映射到组1;块2,6映射到组2;块3,7映射到组3。
1) 读地址0:组0还未加载任何内容进来,所以有效位是0.发生强制不命中。高速缓存从下一层取出块0.块0是由地址0和地址1两个部分组成。
2) 读地址1:命中。
3) 读地址13:属于块6,组2.强制不命中,然后读入块6,m[12],m[13].
4) 读地址8:属于块4,组0.冲突不命中,组0替换为m[8],m[9].
5) 读地址0:属于块0,组0,冲突不命中,组0替换为m[0],m[1]
-
4.直接映射高速缓存中的冲突不命中
在这个例子中,假设高速缓存只有组0和组1两个组,一个块是16字节(4个数组元素)。
该程序有很好空间局部性,可是还是会引起冲突不命中。(原因是:每个组只有一行这个限制)
第一次迭代应用X[0],组接下来是Y[0].导致冲突不命中。以后的每次饮用都导致冲突不命中。
解决方案,将代码中的X[8]改成X[12],有[8]改成y[12].这样x[i],y[i] 映射在不同的组,解决了问题。这样的方法叫做在数组后放入B字节的填充。
教材思考和总结
-
练习6.2、6.3:简单的带入公式。
-
练习6.4
这个题目两个小题的区别在于读/写头定位的次数,最好的情况只需要定位一次读/写头,但是随机的要定位读/写头2000次。这个2000需要先行计算1MB=2000*512B。
-
练习6.8、6.9
这两个题目考察的是局部性的理解,正如上面所说:重复引用同一个变量的程序具有良好的时间局部性、对于步长为K的引用模式,K越小,空间局部性越好。对于取指令,循环具有良好的时间和空间局部性。循环体越小,循环迭代次数越多,局部性越好。
-
练习6.10
这个题目就是对应上面的公式把表填满,但是填表是有顺序的:先计算S、然后计算s和b、最后计算t。
-
总结:本次阅读要前面要记的内容比较多,但到了后面的缓存冲突就感觉理解起来有点困难。本章概念性的元知识较多,只需要去理解它们的定义,构建一个框图就能很好的掌握本章的知识。重点在于构建一个互补的存储器结构层次图,明白什么事局部性原理,以及用局部性原理渗透到计算机的各个层次,不命中中的尤其是冲突不命中如何解决;高速缓存的寻址。