第七周(10.19-10.25):
学习计时:共10小时 读书:7 代码:1 作业:1 博客:1 |
一、学习目标 |
1. 了解常见的存储技术(RAM、ROM、磁盘、固态硬盘等) 2. 理解局部性原理 3. 理解缓存思想 4. 理解局部性原理和缓存思想在存储层次结构中的应用 5. 高速缓存的原理和应用 |
二、学习资源 |
1. 教材:第六章《存储器层次结构》 2. 课程资料:https://www.shiyanlou.com/courses/413 实验六、七,课程邀请码:W7FQKW4Y 3. 教材中代码运行、思考一下,读代码的学习方法见这。
|
三、学习方法 |
1. 进度很重要:必须跟上每周的进度,阅读,练习,问答,项目。我会认真对待每一位同学,请你不要因为困难半途而废。 2. 问答很重要:遇到知识难点请多多提问,这是你的权利更是您对自己负责的义务。问答到博客园讨论小组:http://group.cnblogs.com/103791/ 3. 实践很重要:解决书中习题,实践书中实例,完成每周项目,才算真的消化了这本好书。通过实验楼环境或自己安装的虚拟机在实践中进行学习 4. 实验报告很重要:详细记录你完成项目任务的思路,获得老师点评和帮助自己复习。学习完成后在博客园中(http://www.cnblogs.com/)把学习过程通过博客发表,博客标题"信息安全系统设计基础第七周学习总结"
|
四、学习任务 |
1. 阅读教材,完成课后练习(书中有参考答案) 重点:6.2 6.3 6.4 6.8 6.9 6.10 6.11 6.12 6.13 2. 考核:练习题把数据变换一下 3. 实验:需要动手的到实验楼中练习一下
|
五、后续学习预告(可选): |
复习前面Linux 命令,Linux 编程基础,教材前七章内容 |
六、学习过程 |
(提示:此处由学生填写,学习过程,学习笔记,代码编译,运行结果,思考等)
|
七、遇到的问题及解决 |
(提示:此处由学生填写,是重要的得分点,要写出遇到的问题和解决方案以及对出现问题的思考)
|
八、其他 |
(提示:此处由学生填写,灵感,领悟等) |
第七周:学习任务教材第六章
了解存储设备的类型和特点;重点理解局部性原理和缓存思想在存储层次结构中的应用
重点练习题: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):高速缓存组、高速缓存行、块
映射
命中
缓存管理
第六章
存储器层次结构
存储器系统是一个具有不同容量、成本和访问时间的存储设备的层次结构。靠近cpu的小的、快速的高速缓存存储器作为一部分存储在相对慢速的主存储器(主存)中的数据和指令的缓冲区域。主存暂时存放存储在容量较大的、慢速磁盘上的数据,而这些磁盘通常作为存储在通过网络连接的其它机器的磁盘或磁带上的数据的缓冲区域。
具有良好局部性的程序倾向于一次又一次的访问相同的数据项集合,或是倾向于访问邻近的数据项集合,具有良好局部性的程序比局部性差的程序更多地倾向于从存储器层次结构中较高层次处访问数据项,因此运行得更快。
高速缓存存储器,作为CPU和主存之间的缓存区域,对应用程序性能影响最大。
6.1存储技术
6.1.1随机访问存储器
分为两类:静态SRAM和动态的DRAM,SRAM比DRAM更快,也贵更多。SRAM用来作为高速缓存存储器既可以用在CPU片上也可以在片下,DRAM用来作为主存以及图形系统的帧缓冲区。
SRAM将每个位存储在一个双稳态的存储器单元里,每个单元使用一个六晶体管电路来实现的,一个属性,可以无限期保持在两个不同的电压配置或状态之一。其他任何状态都是不稳定的——从不稳定状态开始,电路会迅速地转移到两个稳定状态中的一个。
钟摆能在垂直的位置无限保持平衡,但是是亚稳态的。
DRAM将每个位存储为对一个电容的充电。DRAM存储器单元对干扰十分敏感,电容电压被扰乱之后就永远不会恢复了。数码相机和摄像机中的传感器本质上就是DRAM单元的阵列。
存储器系统必须周期性地通过读出,然后重写类刷新存储器的每一位。
DRAM 和 SRAM存储器的特性
DRAM的芯片中的单元被分成d个超单元,每个超单元都由w个DRA单元组成,一个d*w的DRAM总共存储量dw位信息,超单元被组织成一个r行c列的长方形阵列,rc=d,每个超单元有形如(i,j)的地址,i为行,j为列。
每个DRAM芯片被连接到某个成为存储控制器的电路,这个电路可以一次传送w位到每个DRAM芯片或一次从每个DRAM芯片传出w位,为了读出超单元的内容,存储控制器将行地址i发送到DRAM,然后是列地址j。DRAM将超单元(i,j)的内容发回给控制器作为响应。行地址i成为RAS(行访问选通脉冲)请求,列地址j称为CAS(列访问选通脉冲)请求。RAS和CAS请求同享相同的DRAM地址引脚。
将DRAM组织成二维阵列而不是线性数组的一个原因是降低芯片上地址引脚的数量。
读一个DRAM超单元的内容:
二维阵列组织的缺点是必须分为两步发送地址,这增加了访问时间。
DRAM 包装在存储器模块中,它是插在主板的扩展槽上的。常见的包括168引脚的双列直插存储器模块(DIMM),64位为块传送数据到存储控制器和从存储控制器传出数据。72引脚的单列直插存储器模块(SIMM),以32位为块传送数据。
将多个存储器模块连接到存储控制器,能够聚合主存。
读一个存储器模块的内容:
·快页模式DRAM
·扩展数据传输出DRAM
·同步DRAM
·双倍数据速率同步DRAM
·Rambus DRAM
·视频RAM
DRAM和SRAM在断电时会 丢失它们的信息,所以它们是易失的。另一方面,非易失性存储器,即使在断电后,也仍然保存着它们的信息。只读存储器ROM,以它们能够被重编程的次数和对它们进行重编程所用的机制来区分的。
PROM(可编程ROM)只能被编程一次,PROM的每个存储器单元有一种熔丝,只能用高电流熔断一次。
EEPROM(可擦写可编程ROM)
闪存是一类非易失性存储器,基于EEPROM,一种重要的存储技术。
存储在ROM设备中的程序通常称为固件。
数据流通过称为总线的共享电子电路在处理器和DRAM主存之间来来回回。每次CPU和主存之间的数据传送都是通过一系列步骤来完成的,这些步骤称为总线事务。读事务从主存传送数据到CPU。写事务从CPU传送数据到主存。
总线是一组并行的导线,能携带地址、数据和控制信号。取决于总线的设计,数据和地址信号可以贡献同一组导线,也可以使用不同的,两个以上的设备也能共享同一根导线。
计算机系统的配置。主要部件是CPU芯片,I/O桥的芯片组以及组成主存的DRAM存储器模块。这些部件由一对总线连接起来,其中一条总线是系统总线,它连接CPU和I/O桥,另一条总线是存储器总线,它连接I/O桥和主存。
典型的连接CPU和主存的总线结构:
加载操作movl A,%eax的存储器读事务:
6.1.2磁盘存储
1.磁盘构造
磁盘是由盘片构成的。每个盘片有两面或者说是表面,表面覆盖着磁性记录材料。盘片中央有一个可以旋转的主轴,它使得盘片以固定的旋转速率旋转,通常是5400~15000转每分钟。
每个表面是由一组成为磁道的同心圆组成的。每个磁道被划分为一组扇区,每个扇区包含相等数量的数据位,这些数据编码在扇区的磁性材料中。扇区之间由一些间隙分隔开,这些间隙不存储数据位,间隙存储用来标识扇区的格式化位。
存储操作movl %eax,A的存储器写事务:
磁盘是由一个或多个叠放在一起的盘片组成的。整个装置通常被称为磁盘驱动器,简称为磁盘,旋转磁盘,区别于固态硬盘SSD,SSD没有会移动的部分。
常用术语柱面描述多个盘片驱动器的构造,柱面是所有盘片表面上到主轴中心的距离相等的磁道的集合。
2.磁盘容量
一个磁盘上可以记录的最大位数称为它的最大容量,磁盘容量是由以下技术因素决定的:
记录密度(位/英寸):磁道一英寸的段中可以放入的位数。
磁道密度(道/英寸):从盘片中心出发半径一英寸的段内可以有的磁道数
面密度(位/平方英寸):记录密度与磁道密度的乘积
磁盘容量公式:
磁盘容量=× ×××
3.磁盘操作
磁盘用读/写头来读写存储在磁性表面的位,而读写头连接到一个传动臂一端。这样的机械运动成为寻道。
磁盘以扇区大小的块来读写数据,对扇区的访问时间有三个主要的部分:寻道时间、旋转时间、传送时间。
寻道时间:为了读取某个目标扇区的内容,传动臂首先将读写头定位到包含目标扇区的磁道上,移动传动臂所需的时间称为寻道时间。
旋转时间:一旦读写头定位到了期望的磁道,驱动器等待目标扇区的第一位旋转到读写头下。
Tmax rotation =×
平均旋转时间Tavg rotation是Tmax rotation的一半
传送时间:当目标扇区的第一个位位于读写头下时,驱动器就可以开始读或者写该扇区的内容了。
Tavg rotation =××
3.逻辑磁盘块
一个B个扇区大小的逻辑块的序列,编号为0,1……B-1,磁盘中有一个小的硬件/固件设备,称为磁盘控制器,维护着逻辑块号的实际磁盘扇区之间的映射关系。
4.连接到I/O设备
三个不同类型的设备连接到总线:
·通用串行总线:USB,控制器是一个连接到USB总线的设备的中转机构。
·图形卡(适配器):包含硬件和软件逻辑,它们负责代表CPU在显示器上画像素
·主机总线适配器:将一个或多个磁盘连接到I/O总线,使用的是一个特别的主机总线接口定义的通信协议。最常用的两个磁盘接口是SCSI和SATA
·网络适配器:可以通过将适配器插入到主板上空的扩展槽,从而连接到I/O总线,这些插槽提供了到总线的直接电路连接。
5.访问磁盘
总线结构示例:
CPU使用一种称为存储器映射I/O的技术来向I/O设备发出命令。
设备可以自己执行读或者写总线事务,而不需要CPU干涉的过程,这个过程称为直接存储器访问,这种数据传送称为DMA传送。
6.1.3固态硬盘
SSD是一种基于闪存的存储技术。一个SSD包由一个或多个闪存芯片和闪存翻译层组成,闪存芯片替代传统旋转磁盘中的机械驱动器,而闪存翻译层是一个硬件/固件设备,扮演与磁盘控制器相同的角色,将对逻辑块的请求翻译成对底层物理设备的访问。
随机读和写的性能差别是由底层闪存基本属性决定的。
随机写很慢,两个原因:1.擦除块需要相对较长的时间,比访问页所需时间要高一个多数量级。2.如果写操作试图修改一个包含已经有数据的页p,那么这个块中所有带有用数据的页都必需被拷贝到一个新块,然后才能进行对p的写。
SSD优点:随机访问时间比旋转磁盘要快,能耗更低,同时也更结实。
6.1.4存储技术趋势
不同的存储技术有不同的价格和性能折中。
不同存储技术的价格和性能属性以截然不同的速率变化着。
DRAM和磁盘的性能滞后于CPU的性能。
6.2局部性
一个编写良好的计算机程序常常具有良好的局部性,倾向于引用临近与其他最近引用过的数据项的数据项,或者最近引用过的数据项本身。被称为局部性原理。
二种不同形式:时间局部性,空间局部性。
有良好局部性的程序比局部性差的程序运行得更快。
在硬件层,局部性原理允许计算机设计者通过引入称为高速缓存存储器的小而快速的存储器来保存最近被引用的指令和数据项,从而提高对主存的访问速度。
6.2.1对程序数据引用的局部性
一个连续向量中,每隔k个元素进行访问,就被称为步长为k的引用模式。
双重嵌套循环按照行优先顺序读数组的元素。
一些看上很小的对程序的改动能够对它的局部性有很大的影响。
6.2.2取指令的局部性
代码区别于程序数据的一个重要属性是在运行时它是不能被修改的,当程序正在执行时,CPU只从存储器中读出它的指令,CPU绝不会重写或修改这些指令。
6.2.3局部性小结
简单原则:
·重复引用同一个变量的程序有良好的事件局部性
·对于具有步长为k的引用模式的程序,步长越小,空间局部性越好。具有步长为1,的引用模式的程序有很好的空间局部性。在存储器中以大步长跳来跳去的程序空间局部性会很差。
·对于取指令来说,循环有好的时间和空间局部性,循环体越小,循环迭代次数越多,局部性越好。
6.3存储器层次结构
属性:
·存储技术:不同存储技术的访问时间差异很大。
·计算机软件:一个编写良好程序倾向于展示出良好的局部性
存储器层次结构,所有现代计算机系统都是用这种方法。
存储器层次结构:
6.3.1存储器层次机构中的缓存
高速缓存是一个小而快速的存储设备,它作为存储在更大、也更慢的设备中的数据对象的缓冲区域。使用高速缓存的过程称为缓存。
存储器层次结构的中心思想是,对于每个k,位于k层的更快更小的存储设备作为位于k+1层的更大更慢的存储设备的缓存。层次结构中的每一层都缓存来自较低一层的数据对象。
数据总是以块大小为传送单元在k层和k+1层之间来回拷贝的。
存储器层次结构中基本的缓存原理:
当程序需要k+1层的某个数据对象d时,它首先在当前存储在第k层的一个块中查找d。如果d刚好在k层,那么就是我们所说的缓存命中。
如果第k层中没有缓存数据对象d,那么就是缓存不命中。
覆盖一个现存的块的过程称为替换或驱逐这个块,被驱逐的这个块有时也叫牺牲块,决定该替换哪个块是由缓存的替换策略来控制的。
如果第k层的缓存是空的,那么对任何数据对象的访问都会不命中。一个空的缓存有时称为冷缓存,此类不命中称为强制性不命中,或冷不命中,通常是短暂的事件,不会再反复访问存储器使得存储器暖身之后的稳定状态中出现。
只要发生了不命中,第k层的缓存就必须执行某个放置策略,确定把它从第k+1层中取出的块放在那里。
这种限制性的放置策略会引起一种不命中,称为冲突不命中。这种情况下,缓存足够大能够保存被引用的数据对象,但是因为这些对象会映射到同一个缓存块,缓存会一直不命中。
程序通常是按照一些列阶段来运行的,每个阶段访问缓存块的某个相对稳定不变的集合。称为这个阶段的工作集,当工作集的大小超过缓存的大小,缓存会经历容量不命中,也就是缓存太小了不能处理这个工作集。
存储器层次结构的本质是,每一层存储设备都是较低一层的缓存。
6.3.2存储器层次结构概念小结
·利用时间局部性:由于时间局部性,同一数据对象可能会被多次使用。
·利用空间局部性:块通常包含多个数据对象。
6.4高速缓存存储器
早期计算机系统的存储器层次结构只有三层:CPU寄存器、DRAM主存储器和磁盘存储。
CPU和主存的差距逐渐增大,CPU寄存器文件和主存之间插入了一个小的SRAM高速缓存存储器,L1一级缓存,访问速度几乎和寄存器一样快,2~4个时钟周期。
随着cpu和主存之间的性能差距不断增大,L1高速缓存和主存之间又插入了L2高速缓存,10个时钟周期可以访问到它。
L3高速缓存也存在了,30~40个时钟周期可访问。
高速缓存存储器的典型总线结构:
6.4.1通用的高速缓存存储器结构
一个计算机系统,其中每个存储器地址有m位,形成M=2m个不同的地址。
高速缓存(S,E,B,m)的通用组织:
高速缓存的大小C指的是所有块的大小的和,标记位和有效位不包括在内,因此,C=S×E×B。
高速缓存参数小结:
6.4.2直接映射高速缓存
每个组只有一行(E=1)的高速缓存称为直接映射高速缓存。
直接映射高速缓存:
高速缓存确定一个请求是否命中,然后抽取被请求的字的过程,分为3步:1.组选择 2.行匹配 3.字抽取
直接映射高速缓存中的组选择:
直接映射高速缓存中的行匹配和字选择:
4.直接映射高速缓存中不命中时的行替换
如果缓存不命中,那么它需要从存储器层次结构的下一层取出被请求的块,然后将新的块存储在组索引位指示的组的一个高速缓存行中。如果组中都是有效高速缓存行了,那么必须要驱逐一个现存的行,对于直接映射高速缓存来说,每个组只包含有一行,替换策略非常简单:用新取出的行替换当前的行。
5综合:运行中的直接映射高速缓存
高速缓存有四个组,每个组一行,每个块2个字节,而地址是4位。
·标记位和索引位连起来唯一地标识了存储器中的每个块。
·因为有8个存储器块,但是只有4个高速缓存组,多个块映射到同一个高速缓存组。
·映射到同一个高速缓存组的块由标记位唯一地标识。
初始时,高速缓存是空的,就是每个有效位都是0
6.4.3组相联高速缓存
直接映射高速缓存中冲突不命中造成的问题是源于每个组只有一行即E=1这个限制,组相联高速缓存放松了这条限制,所以每个组都保存有多余一个的高速缓存行。一个1<E<C/B的高速缓存通常称为E路组相联高速缓存。
和直接映射高速缓存的组选择一样,组索引位标识组。
必须检查多个行的标记位和有效位,以确定所请求的字是否在集合中。我们可以把组相联高速缓存中的每个组都看成一个小的相联存储器,key是标记和有效位,而value就是块的内容。
组相联高速缓存:
组相联高速缓存中的组选择:
如果CPU请求的字不在组的任何一行中,那么就是缓存不命中,高速缓存必须从存储器中取出包含这个字的块。
最不常使用策略会替换在过去某个时间窗口内引用次数最少的那一行,最近最少使用策略会替换最后一次访问时间最久远的那一行。
组相联高速缓存中的行匹配和字选择:
6.4.4全相联高速缓存
一个全相联高速缓存是由一个包含所有高速缓存行的组(E=C/B)组成的。
全相联高速缓存:
只有一个组。
全相联高速缓存中的行匹配和自选额和组相联高速缓存一样,主要区别是规模大小
全相联高速缓存中的行匹配和字选择:
6.4.5有关写的问题
读的操作非常简单,高速缓存中查找所需字w的拷贝,如果命中,立即返回字w给CPU,如果不命中,从存储器层次结构中较低层中取出包含字w的块,将这个块存储到某个高速缓存行中,然后返回字w
最简单的方法是直写,就是立即将w的高速缓存块写回到紧接着的低一层中,另一种方法称为写回,尽可能地推迟存储器更新,只有当替换算法要驱逐更新过的块时,才把它写到紧接着的低一层中。高速缓存必须为每个高速缓存行维护一个额外的修改位,表明这个高孙缓存块是否被修改过。
一种方法称为写分配,加载相应的低一层中的块到高速缓存中,然后更新这个高速缓存块。缺点是每次不命中都会导致一个块从低一层传送到高速缓存。另一种方法,非写分配,避开高速缓存,直接把这个字写在低一层。
6.4.6一个真实的高速缓存层次结构的解剖
高速缓存既保存数据也保存指令。只保存指令的高速缓存称为i-cache,只保存程序数据的高速缓存称为d-cache,既保存指令又包括数据的高速缓存称为统一的高速缓存。
6.4.7高速缓存参数的性能影响
指标:
·不命中率
·命中率
·命中时间
·不命中处罚
较大的高速缓存可能会提高命中率,使得大存储器运行的更快总是要难一些。
较大的块能利用程序中可能存在的空间局部性,帮助提高命中率,块越大就意味着高速缓存行数越少,这会损害时间局部性比空间局部性更好的程序中的命中率。
E是每个组中高速缓存行数,较高的相联度(较大的E)的优点是降低了高速缓存由于冲突不命中出现抖动的可能性。较高的相联度会造成较高的成本。
相联度的选择最终变成了命中时间的不命中处罚之间的折中。
直写高速缓存比较容易实现,而且能使用独立于高速缓存的写缓冲区,用来更新存储器。写回高速缓存引起的传送比较少,它允许更多的到存储器的带宽用于执行DMA的I/O设备。高速缓存越往下层,越可能使用写回而不是直写。
高速缓存行、组和块有什么区别
·块时一个固定大小的信息包,在高速缓存和主存之间来回传送
·行是高速缓存中存储块以及其他信息的容器
·组是一个或多个行的集合
6.5编写高速缓存友好的代码
基本方法:
两个关于编写高速缓存有好的代码重要问题:
在对多维数组进行操作的程序中,空间局部性尤其重要。
较高的不命中率对运行时间可以有显著的影响。
6.6综合:高速缓存对程序性能的影响
6.6.1存储器山
一个程序从存储系统中读数据的速率称为读吞吐量,或者读带宽。读带宽的时间和空间局部性的二维函数,称为存储器山。
每个计算机都有标明它存储器系统的能力特色的唯一的存储器山。
存储器山:
6.7小结
基本存储技术包括随机存储器RAM、非易失性存储器ROM和磁盘。RAM有两种基本类型。静态RAM 即SRAM快一些也贵一些,既可以做CPU芯片上的高速缓存也可以做芯片下的高速缓存,动态RAM即DRAM慢一些也便宜一些,做主存和图形帧缓冲区。非易失性存储器即只读存储器ROM即使在断电的时候也能保持它们的信息,用来存储固件。旋转磁盘是机械的非易失性存储设备,以每个位很低的成本保存大量的数据,但是访问时间比DRAM更长,SSD固态硬盘基于非易失性的闪存,越来越变成旋转磁盘对某些应用的具有吸引力的代替产品。
较快的存储技术每个位的价格会更高,而且容量较小。DRAM和磁盘访问时间远远大于CPU周期时间,系统通过将存储器组织成存储设备的层次结构来弥补这些差异,在这个层次结构中,较小、较快的设备在顶部,较大、较慢的设备在底部。
程序员可以通过编写有良好空间和时间局部性的程序来显著改进程序的运行时间,利用基于SRAM的高速缓存存储器特别重要,主要从高速缓存取数据的程序能比主要从存储器取数据的程序运行的快得多。