信息安全系统设计基础第七周学习总结

信息安全系统设计基础第七周学习总结

第七周(10.19-10.25):

学习计时:共12小时
读书:4
代码:1
作业:3
博客:4

第6章 存储器层次结构

  • 实际上,存储器系统是一个具有不同容量、成本和访问时间的存储设备的层次结构。cPU寄存器保存着最常用的数据。靠近CPU的小的、快速的高速缓存存储器作为一部分存储在相对慢速的主存储器中数据和指令的缓冲区域。主存暂时存放存储在容量较大的、慢速磁盘上的数据,而这些磁盘常常又作为存储在通过网络连接的其他机器的磁盘或磁带上的数据的缓冲区域。
  • 如果你的程序需要的数据是存储在CPU寄存器中的,那么在执行期间,在零个周期内就能访问到它们。如果存储在高速缓冲中,需要1~30个周期。如果存储在主存中,需要50~200个周期。如果存储在磁盘上,需要约几千万个周期。

6.1 存储技术

6.1.1随机访问存储器

随机访问存储器(RAM,Random-access memory)分为两类-静态和动态的。静态RAM(SRAM)比动态RAM(DRAM)更快,但也贵很多。SRAM用来作为高速缓存存储器,即可以在CPU芯片上,也可以不在CPU芯片上。DRAM用来作为主存以及图形系统的帧缓冲区。

  • 静态RAM
    (1)SRAM将每个位存储在一个双稳态(bistable)存储器单元(cell)中。每个单元是用一个六晶体管电路来实现的。这个电路的一个属性是:它可以无限制地保持在两个不同的电压配置(configuration)或状态(state)之一。其他任何状态都是不稳定的。
    (2)由于SRAM的双稳态特性,只要有电,它就会永远地保持它的值,即使有干扰,如电子噪音,当干扰消除,电路也能恢复到稳定值。
  • 动态RAM
    (1)DRAM将每个位存储为对电容的充电。电容约为30×10-15F。
    (2)泄露电流的各种因素会导致DRAM单元在10~100毫秒内失去电荷。计算机运行的时钟周期是以纳秒来衡量的。
  • 传统的DRAM
    计算机界,倾向于把DRAM的阵列单元称为单元(cell),电路设计者倾向于称之为字(word)。这里称为supercell。
  • 存储器模块
    常见的包装包括168个管脚的双列直插存储器模块(Dual Inline Memory Module,DIMM),它以64位为块传送数据到存储控制器和从存储控制器传出数据;72个管脚的单列直插存储器模块(Single Inline Memory Module,SIMM),它以32位为块传送数据。
  • 增强的DRAM
    (1)同步DRAM:SDRAM用与驱动存储器相同的外部时钟信号的上升沿来代替许多这样的控制信号。
    (2)双倍数据数率同步DRAM:DDR SDARM是对SDRAM的一种增加,它通过使用时钟的两个边沿作为控制信号,从而使DRAM的速度翻倍。
  • 非易失性存储器
    (1)EEPROM,电子可擦除PROM:类似于DPROM,但是它不需要一个物理上独立的编程设备,因此可以直接在印制电路卡上编程。EEPROM能够编程的次数量级可达10e5次。
    (2)闪存是一个类小的非易失性存储器,基于EEPROM,支持插拨。
    (3)存储在ROM设备中的程序通常称为固件。
  • 访问主存
    (1)读事务(read transaction)从主存传送数据到CPU;写事务(write transcation)从CPU传送数据到主存。
    (2)总线是一组并行的导线,能携带地址,数据,的控制信号。

6.1.2磁盘存储

  • 磁盘制造
    每个表面是由一组称为磁道(track)的同心圆组成;每个磁道被划分成一组扇区(sector);每个扇区包含相等数量的数据位(通常是512字节);这些数据编码在扇区上的磁性材料中。扇区之间由一些间隙(gap)分隔开,这些间隙中不存在数据位。间隙存储用来标识扇区的格式化位。
  • 磁盘容量
    磁盘容量是由以下技术因素决定的:

记录密度
磁道密度
面密度

旁注:对于与DRAM和SRAM容量相关的单位,通常K = 210,M = 220,G = 230,对于磁盘和网络这样的I/O设备容量相关的单位,通常K = 103,M = 106,G = 109。

  • 磁盘操作

(1)任何时刻,所有的读写头都位于同一柱面上。
(2)在传动臂末端的读/写头在磁盘表面高度约0.1微米处一层薄薄的气垫上飞翔,速度大约为80km/h。磁盘以扇区大小的块来读写数据。
(3)对扇区的访问时间有三个主要部分组成:

1.寻道时间(seek time):为了读取某个目标扇区的内容,传动臂把读/写头首先定位到包含目标扇区的磁道上。所需时间即为寻道时间,约等于最大旋转时间。
2.旋转时间(rotational latency):定位到期望的磁道后,驱动器等待目标扇区的第一个位旋转到读/写头下。
Tmax rotation = 1/最大旋转数率
Tavg rotation = (1/2) × Tmax rotation
3.传送时间(transfer time):Tavg transfer = (1/最大旋转数率) × (1/每磁道的平均扇区数)

  • 逻辑磁盘块
    现代磁盘构造复杂,有多个盘面,这些盘面上有不同的记录区。为了对操作系统隐藏这样的复杂性,现代磁盘将它们的构造简化为一个b个扇区大小的逻辑块的序列,编号为0,1,2,...b-1。磁盘中有一个小的硬件/固件设备,称为磁盘控制器,维护着逻辑块号的和实际(物理)磁盘扇区之间的映射关系。
  • 连接到I/O设备
  • 访问磁盘
  • 商用磁盘的剖析

6.1.3固态硬盘

固态硬盘是一种基于闪存的存储技术,在某些情况下是传统旋转磁盘的极有吸引力的替代产品。

6.1.4存储技术趋势

  • 从我们对存储技术的讨论中,可以总结出几个很重要的思想。
  • 不同的存储技术有不同的价格和性能折中。SRAM比DRAM快一点,而DRAM比磁盘要快很多。另一方面,快速存储总是比慢速存储要贵的。SRAM每字节的造价比DRAM高,DRAM的造价又比磁盘高得多。SSD位于DRAM和旋转磁盘之间。
  • 不同存储技术的价格和性能属性以截然不同的速率变化着。

6.2 局部性

局部性有两种形式:时间局部性(temporal locality)和空间局部性(spatial locality)。在一个具有良好时间局部性的程序中,被引用过一次的存储器位置很可能在不远的将来再被多次引用;在一个具有良好空间局部性的程序中,如果一个存储器位置被引用了一次,那么程序很可能在不远的将来引用附近的一个存储器位置。

6.2.1对程序数据引用的局部性

根据书上例子进行理解:

  • 一维数组
    对于sum来说,有很好的时间局部性,因为sum是标量,对于sum来说,没有空间局部性;对于变量v,有很好的控件局部性,但是因为每个向量元素只被访问一次,因此时间局部性很差。因此,总体来说,sumvec函数有很好的局部性。
  • 二维数组
    局部性好:

局部性不好:

6.2.2取指令的局部性

因为程序指令是存放在存储器中的,CPU必须取出这些指令,所以我们也能评价一个程序关于取指令的局部性。例如,上述一维数组示例中,for循环中的指令是按照连续的存储器顺序执行的,因此循环有良好的空间局部性。因为循环体会被执行多次,所以也有很好的时间局部性。

6.2.3局部性小结

一些量化评价一个程序中局部性的简单原则:

1.重复引用同一个变量的程序有良好的时间局部性。
2.对于具有步长为k的引用模式的程序,步长越小,空间局部性越好;在存储器中以大步长跳来跳去的程序空间局部性会很差。
3.对于取指令来说,循环有很好的时间和空间局部性。循环体越小,循环迭代次数越多,局部性越好。

6.3 存储器层次结构

存储器层次结构示例如下图所示:

6.3.1存储器层次结构中的缓存

存储器层次结构的中心思想是,对于每个k,位于k层的更快更小的存储设备作为位于k+1层的更大更慢的存储设备的缓存。数据总是以块大小作为传送单元在第k层和k+1层之间来回拷贝的。

  • 缓存命中
  • 缓存不命中
  • 缓存不命中的种类
  • 缓存管理

6.3.2存储器层次结构概念小结

概括来说,基于缓存的存储器层次结构行之有效,是因为较慢的存储设备比较快的存储设备更便宜,还因为程序往往展示局部性:

  • 利用时间局部性:由于时间局部性,同数据对象可能会被多次使用,一旦一个数据对象在第一次不命中时被拷贝到缓存中,我们就会期望后面该目标有一系列的访问命中。因为缓存比低层的存储设备更快,对后面的命中的服务会比最开始的不命中快很多。
  • 利用空间局部性:块通常包含有多个数据对象。由于空间局部性,我们会期望后面对话中其他对家的访问能够补偿不命中后拷贝该块的花费。

6.4 高速缓冲存储器

6.4.1通用的高速缓存存储器结构

6.4.2直接映射高速缓存

每个组只有一行(E = 1)的高速缓存被称为直接映射高速缓存(direct-mapped cache)。
高速缓存确定一个请求是否命中,然后抽取出被请求的字的过程,分为三步

组选择
行匹配
字抽取

  • 直接映射高速缓存中的组选择
    如果把高速缓存看作一个关于组的一维数组,那么这些组索引就是一个到这个数组的索引。如果我们把块看作一个字节的数组,而字节偏移是这个数组的一个索引。
  1. 直接映射高速缓存中的行匹配
    当且仅当设置了有效位,而且告诉缓存行中的标记与w的地址中标记相匹配时,这一行中包含w的一个拷贝。(有效位+标记)
  2. 直接映射高速缓存中的字选择
    块偏移位提供了所需要的字的第一个字节的偏移。
  3. 直接映射高速缓存中不命中时的行替换
  4. 综合:运行中直接映射高速缓存
  5. 直接映射高速缓存中的冲突不命中

6.4.3组相连高速缓存

  • 1 < E < C/B
  • 每个组都保存有多于一个的高速缓存行。

6.4.4全相连高速缓存

  • E = C/B
  • 只有一个组,这个组包含所有的高速缓存行。
  • 因为全相联高速缓存需要并行搜索许多相匹配的行,所以构造相对是困难的;因此只适合做小的高速缓存;如虚拟存储器系统中的TLB,它缓存页表项。

6.4.5有关写的问题

  • 写回,尽可能推迟存储器更新,只有当替换算法要驱逐已更新的块时,才把它写回存储器。
  • 处理不命中:写分配(write-allocate),即加载相应的存储器块到高速缓存中,然后更新这个高速缓存器。

6.4.6一个真实的高速缓存层次结构的解剖

  • 到目前为止,我们一直假设高速缓存只保存程序数据。不过实际上,也保存指令。
  • 只保存指令的高速缓存程序数据称为i-cache。只保存程序数据的高速缓存称为d-cache。既保存指令又包括数据的高速缓存称为统一的高速缓存。
  • 现代处理器包括独立的i-cahce和d-cache。这样做有很多原因。有两个独立的高速缓存,处理器能够同时读一个指令字和一个数据字。i-caChe通常是只读的,因此比较简单。通常会对不同的访问模式来优化这两个高速缓存,它们可以有不同的块大小、相联度和容量。有不同的高速缓存也确保了数据访问不会与指令访问形成冲突不命中,反过来也是一样,代价就是可能会引起容量不命中增加。

6.4.7高速缓存参数的性能影响

有许多指标来衡量高速缓存的性能:

  • 不命中率:它是这样计算的:不命中数量/引用数量
  • 命中率:命中的存储器引用比率
  • 命中时间:命中时间的数量级是几个时钟周期
  • 不命中处罚

6.5 编写高速缓存友好的代码

两个关于编写高速缓存友好的代码的重要问题:

1.对局部变量的反复引用是好的,因为编译器能够将它们缓存在寄存器文件中(时间局部性)。
2.步长为1的引用模式是好的,因为存储器层次结构中所有层次上的缓存都是将数据存储为连续的块(空间局部性)。

6.6 综合:高速缓存对程序性能的影响

6.6.1存储器山

存储器系统的性能不是一个数字就能描述的。相反,它是一座时间和空间局部性的山,这座山的上升高度差别可以超过一个数量级。要是程序运行在山峰而不是低谷。

6.6.2重新排列循环以提高空间局部性

一对nxn矩阵相乘问题:C=AxB。以下是矩阵乘法的六个版本:

6.6.3在程序中利用局部性

存储系统被组织成一个存储设备的层次结构,较小、较快的设备靠近顶部,较大、较慢的设备靠近底部。由于这种层次结构,程序访问存储位置的有效速率不是一个数字能描述的。相反,它是个变化很大的程序局部性的函数(我们称之为存储器山),变化可以有几个数量级,有良好局部性的程序从快速的高速缓存存储器中访问它的大部分数据,局部性差的程序从相对慢速的DRAM主存中访问它的大部分数据。
理解存储器层次结构本质的程序员能够利用这些知识编写出更有效的程序,无论具体的存储系统结构是怎样的。特别地,我们推荐下列技术:

  • 将你的注意力集中在内循环上,大部分计算和存储器访问都发生在这里。
  • 通过按照数据对象存储在存储器中的顺序、以步长为1的来读数据,从而使得你程序中的空间局部性最大。
  • 一旦从存储器中读入了一个数据对象,就尽可能多地使用它,从而使得程序中的时间局部性最大。

6.7 小结

  • 基本存储技术包括随机存储器(RAM)、非易失性存储器(ROM)和磁盘。RAM有两种基本类型。静态RAM(SRAM)快一些,但是价格高,它即可以用做CPU芯片上的高速缓存,也可以用做芯片下的高速缓存。动态RAM(DRAM)慢一些,但价格低,用做主存和图形帧缓冲区。非易失性存储器,也称为只读存储器(ROM),即使是关电的时候,也能保持它们的信息,它们用于存储固件。旋转磁盘是机械的非易失性存储设备,以每个位很低的成本保存大量的数据,但是访问时间比RAM更长。固态硬盘(SSD)基于非易失性的闪存,越来越变成旋转磁盘对某些应用 的具有吸引力的替代产品。
  • 一般而言,较快的存储技术每个位的价格会更高,而且容量较小。这些技术的价格和性能属性正在以显著不同的速度变化着。特别地,DRAM和磁盘访问时间远远大于CPU周期时间。系统通过 将存储组织马存储设备的层次结构来弥补这些差异,在这个层次结构中,较小、较快的设备在顶部,较大、较慢的设备在底部。因为编写良好的程序有好的局部性,大多数数据都可以从较高层的服务,结果就是存储系统能以较高层的速度运行,但却有较底层的成本和容量。
  • 程序员要以通过编写有良好空间和时间局部性的程序来显著地改进程序的运行时间。利用基于SRAM的高速缓存存储器特别重要。主要从高速缓存取数据的程序性能比从存储器取数据的程序运行得快得多。

重点

重点练习题: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):高速缓存组、高速缓存行、块
    映射
    命中
    缓存管理

参考资料

1.教材:第六章《处理器体系结构》,详细学习指导:http://group.cnblogs.com/topic/73069.html
2.课程资料:https://www.shiyanlou.com/courses/413 实验六,课程邀请码:W7FQKW4Y
3.教材中代码运行、思考一下,读代码的学习方法:http://www.cnblogs.com/rocedu/p/4837092.html。
4.此学习笔记中的部分图片来自:http://blog.csdn.net/zhanghaodx082/article/details/12099161

感悟

1.存储器的三个方面不能同时达到最优,他们存在着以下关系:存取时间越快,每一个“位”的价格越高;容量越大,每一个“位”的价格越低;容量越大,存取速度越慢。要解决这个问题,不依赖于单一的存储组件或技术,而是使用存储器的层次结构。
2.想找通俗易懂或者有很多实例的书来读。
3.好好复习。

posted @ 2015-10-25 20:24  xixixixixi  阅读(301)  评论(2编辑  收藏  举报