学习计时:共14小时

读书:4

代码:2

作业:4

博客:4

 

第六章 存储器层次结构

  存储器系统是一个具有不同容量、成本和访问时间的存储设备的层次结构。

存储技术

一、随机访问存储器

  1.分类:SRAM(静态)、DRAM(动态)

  2.特点:存储单元的内容可按需随意取出或存入,这种存储器在断电时将丢失其存储内容,即掉电失忆(常说的电脑内存就是RAM的)。

1、静态RAM

  用来作为高速缓存存储器,每个位存储在一个双稳态的存储器单元里。

  双稳态:电路可以无限期的保持在两个不同的电压配置或者状态之一。只要供电,就会保持不变。

  1.特点:

    ① 不需要刷新电路即能保存它内部存储的数据。

    ② 集成度较低,需要很大的体积。

    ③ 存取快

    ④ 抗干扰。

  2.优点:速度快,不必配合内存刷新电路,可提高整体的工作效率。  

  3.缺点:集成度低,功耗较大,相同的容量体积较大,而且价格较高,少量用于关键性系统以提高效率。 

2、动态RAM 

  用来作为主存以及图形系统的帧缓冲区。将每个位存储为对一个电容的充电,当电容的电压被扰乱之后,他就永远都不会再恢复了。暴露在光线下会导致电容电压改变。

  1.特点:

    ① 每个位存储为对电容的充电。

    ② DRAM存储器单元对干扰非常敏感。

    ③ 周期性的用读出然后写回的方式刷新存储器每个位。

3、传统的DRAM

  1.DRAM芯片中的单元(位)被分成了d个超单元,每个超单元都由w个DRAM单元组成, 一个d*w的DRAM共存储dw位信息。

  2.超单元被组织成一个r行c列的长方形阵列,rc=d。每个超单元的地址用(i,j)来表示(从零开始)。设计成二维矩阵是为了降低芯片上地址引脚的数量。

  3.信息通过称为引脚的外部连接器流入/流出芯片,每个引脚携带一个1位信号。

  4.每个DRAM信号被连接到称为存储控制器的电路,电路每次传输量为8位。行地址i,RAS请求;列地址j,CAS请求共享相同的DRAM地址引脚。

4、存储器模块

   双列直插存储器模块(DIMM):168个引脚,以64位为块传入/传出数据到存储控制器。

   单列直插存储器模块(SIMM):72个引脚,以32位为块传入/传出数据到存储控制器。

5、增强的DRAM

  1.快页模式-FPM DRAM:允许对同一行连续的访问可以直接从行缓冲区得到服务。(原本的DRAM对同一行的四条指令时,每条指令取完后都会丢弃,然后重新读取。)

  2.扩展数据输出-EDO DRAM:允许单独的CAS信号在时间上靠的更紧密一点。同步-SDRAM:用与驱动存储控制器相同的外部时钟信号的上升沿来代替许多这样的控制信号-比异步的更快。

  3.双倍数据速率同步-DDR SDRAM:通过使用两个时钟沿作为控制信号,从而使DRAM的速度翻倍。

  4.分类:DDR(2位),DDR2(4位),DDR3(8位)。

6、非易失性存储器

  DRAM、SRAM断电丢失数据,是易失的。

  1.PROM(可编程只读存储器)

    只能被编程一次。每个存储器单元有一种熔丝,只能用高电流熔断一次。

  2.EPROM(可擦写可编程只读存储器) 

    可重复擦除和编程次数达到1000次。

  3.EEPROM(E2PROM电子可擦除可编程只读存储器)

    不需要独立编程设备,可直接在印制电路卡上进行。

    编程次数可达100000次。

  4.FLASH(闪存)

    非易失性的内存,基于EEPROM。

 

二、磁盘存储

1、磁盘构造

  磁盘由盘片构成,表面覆盖着磁性记录材料,中央有一个可以旋转的主轴 ,旋转速率大约为5400-15000每分钟。磁盘的每个表面是一组称为磁道的同心圆组成,每个磁道被划分为一组扇区,扇区之间由一些间隙隔开,间隙存储用来标识扇区的格式化位。柱面是所有盘片表面上到主轴中心的距离相等的磁道的集合。

2、磁盘容量

  1.一个磁盘上可以记录的最大位数称为他的最大容量,简称容量。由以下因素决定:

    ·记录密度(位/英寸):磁道一英寸的段中可以放入的位数。

    ·磁道密度(道/英寸):从盘片中心出发半径上一英寸的段内可以有的磁道数。

    ·面密度(位/平方英寸):记录密度与磁道密度的乘积。

  2.磁盘容量计算公式:


3、磁盘操作

  1.磁盘用读/写头来读写存储在磁性表面的位,而读写头连接到一个传动臂 一端,通过移动转动臂将读写头定位在磁道上的机械运动称为寻道。磁盘以扇区大小的块来读写数据,对扇区的访问时间有三个主要的组成部分:

    ·寻道时间:转动臂将读/写头定位到包含目标扇区的磁道上所需时间。

    ·旋转时间:驱动器等待目标扇区的第一个位旋转到读/写头下的时间。最大为

      【平均旋转时间是Tmax的一半。】

    ·传送时间:读写并传送该扇区内容的时间。平均传送时间为:


4、逻辑磁盘块

  1.磁盘控制器,维护逻辑块号和物理磁盘扇区之间的映射关系。

  2.要执行I/O操作时,操作系统发送一个命令到磁盘控制器,执行一个快速表查找,将一个逻辑块号翻译成一个三元组(盘面,磁道,扇区),唯一标识列对应的物理扇区。

  3.三元组:将读写头移动到适当柱面,等待山区移动到读写头下,将读写头感知到的位放到控制器上的小缓冲区中,将它们拷贝到主存中。

5、连接到I/O设备

  所有的I/O设备都是通过I/O总线连接到CPU和主内存。有三种不同类型:

    ·通用串行总线:一个广泛的使用标准,用于连接各种外围I/O设备。

    ·图形卡(或适配器):包含硬件和软件逻辑,代表CPU在显示器上画像素。

    ·主机总线适配器: 将一个或者多个磁盘连接到I/O总线,使用一个特别的主机总线接口定义的通信协议。

    ·访问磁盘:CPU使用一种称为存储器映射I/O的技术向I/O设备发出命令,地址空间中为I/O设备通信保留的地址称为I/O端口。

 

三、固态硬盘

  1.固态硬盘是一种基于闪存的存储技术。一个硬盘包由一个或者多个闪存芯片和内存翻译层组成,闪存芯片替代旋转磁盘中的机械驱动器,而闪存翻译层将对逻辑块的请求翻译成对底层物理设备的访问。

四、存储技术趋势

  ·不同的存储技术有不同的价格和性能折中。

  ·不同存储技术的价格和性能属性以截然不同的速率变化着。

  ·DRAM和磁盘的性能滞后于CPU的性能。

 

局部性

  1.一个编写良好的计算机程序倾向于引用邻近于其他最近引用过的数据项,或者最近引用过的数据项本身。有良好局部性的程序比局部性差的程序运行的更快,在硬件层引入高速缓存存储器就体现了局部性原理。

  2.时间局部性、空间局部性。

一、对程序数据引用的局部性

  1.时间局部性(temporal locality):被引用过一次的存储器位置在未来会被多次引用(通常在循环中)。

  2.空间局部性(spatial locality):如果一个存储器的位置被引用,那么将来他附近的位置也会被引用。

  3.一个连续向量中,每隔k个元素进行访问,被称为步长为k的引用模式,具有步长为1的引用模式称为顺序引用模式,随着步长增加空间局部性下降。

 

二、取指令的局部性

  1.程序指令是存放在存储器中的,CPU读取这些指令的过程中评价一个程序关于取指令的局部性。

  2.代码区别与程序数据的一个重要属性就是在运行时指令是不能被修改的。

 

三、局部性小结

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

    1.重复引用同一个变量从的程序有良好的时间局部性。

    2.对于步长为k的引用模式的程序,步长越小,空间局部性越好。具有步长为1的引用模式的程序有很好的空间局部性。

    3.对于取指令来说,循环有很好的时间和空间局部性。循环体越小,循环迭代次数越多,局部性越好。

 

存储层次结构

 

一、存储器层次结构中的缓存

  高速缓存是一个小而快速的存储设备,作为存储在更大、更慢的设备中的数据对象的缓冲区域。每一层存储器被划分成连续的数据对象片,称为块,每个块都有唯一的对象和名字。数据总是以块大小为传送单元在第k层和第k+1层之间来回拷贝。

1、缓存命中

  当程序需要第k+1层的某个数据对象d时,首先在当前存储的第k层的一个块中查找d,如果d刚好在第k层中,则称为缓存命中。

2、缓存不命中

  如果k层中没有缓存数据d,则称为缓存不命中,此时要从k+1层取出包含d的块,可能会覆盖(替换/驱逐)现在的一个块(牺牲块)。决定该替换哪个快是缓存的替换策略来控制的。(例如,随机替换策略/LRU策略)

3、缓存不命中的种类

  利用时间局部性: 一旦一个数据在第一次不命中时被拷贝到缓存中,我们就会期望后面对该目标有一系列的访问命中。

4、强制性不命中/冷不命中

  第k层缓存是空的(冷缓存),只是短暂的状态,不会在反复访问存储器使得缓存暖身之后的稳定状态出现。

5、冲突不命中

  第k+1层的第i块,必须放置在第k层的块(i mod 4)中,这种限制性的放置策略引起冲突不命中。

6、利用空间局部性 

  块通常包含多个数据对象,我们通常期望后面对该块中其他对象的访问能够补偿不命中后拷贝该块的花费。

二、存储器层次结构概念小结

  利用时间局部性: 一旦一个数据在第一次不命中时被拷贝到缓存中,我们就会期望后面对该目标有一系列的访问命中。

  利用空间局部性:块通常包含多个数据对象,我们通常期望后面对该块中其他对象的访问能够补偿不命中后拷贝该块的花费。

 

高速缓存存储器

一、通用的高速缓存存储器结构

  1.一个计算机系统每个存储地址有m位,形成M=2^m个不同的地址。

  2.高速缓存被组织成一个有S=2^s个高速缓存组的数组,每个组包含E个高速缓存行,每个行是由一个B=2^b字节的数据块、一位有效位以及t=m-(b+s)个标记位组成,唯一标识存储在这个高速缓存行中的块。

  3.高速缓存的结构用元组(S,E,B,m)来描述,高速缓存的大小C = S * E * B。

 4、地址:   t             s             b
           标记            组索引          块偏移

    ·s个组索引位:一个无符号整数,说明字必须存储在哪个组中。
    ·t个标记位:组中的哪一行包含这个字。
    ·b个块偏移位:在B个字节的数据块中的字偏移。

二、直接映射的高速缓存

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

    1)组选择

    2)行匹配

    3)字抽取

  1.直接映射高速缓存中的组选择

    高速缓存从要抽取的字的地址中抽取出S个组索引位,这些位被解释成一个对应于一个组号的无符号整数。

  2.直接映射高速缓存中的行匹配

    当且仅当设置了有效位,而且高速缓存行标记与w的地址中的行标记相匹配时,这一行中包含w的一个拷贝。

  3.直接映射高速缓存中的字抽取

    块偏移位提供了所需要的字的第一个字节的偏移。

  4.直接映射高速缓存中不命中时的行替换

    需要从存储器层次结构中的下一层取出被请求的块,然后将新的块存储在组索引位指示的组中的一个高速缓存行中。

 

三、组相连高速缓存

  1.组相连高速缓存中的组选择

    与直接映射高速缓存中的组选择一样,组索引位标识组。

  2.组相连高速缓存中的行匹配和字选择

    把每个组看做一个小的相关联存储器,是一个(key,value)对的数组,以key为输入,返回对应数组中的value值。高速缓存必须搜索组中的每一行,寻找有效的行其标记与地址中的相匹配。

  3.组相连高速缓存中不命中时的行替换

    最简单的替换策略是随机选择要替换的行,其他复杂的策略则使用了局部性原理,例如最不常使用、最近最少使用,等。

 

四、全相联高速缓存

  1.全相连高速缓存中的组选择

    只有一个组,没有组索引位。

  2.全相连高速缓存中的行匹配和字选择

    与组相连高速缓存是一样的,但规模大很多,因此只适合做小的高速缓存,例如虚拟存储系统中的翻译备用缓冲器。

 

五、高速缓存参数的性能影响

  影响性能的因素:

    ·高速缓存大小的影响:较大的高速缓存可能会提高命中率,但使大存储器运行的更快是更难一些的。

    ·块大小的影响:较大的块能利用程序中可能存在的空间局部性,帮助提高命中率;但块越大意味着高速缓存行较少,损害时间局部性。

    ·相联度的影响:相联度较大(E值较大)优点是降低了高速缓存由于冲突不命中出现抖动的可能性,但成本较高。

    ·写策略的影响:直写高速缓存易实现,而且能使用独立于高速缓存的写缓冲区,用来更新存储器,不命中开销小。写回高速缓存引起的传送比较少,允许更多的到存储器的宽带用于执行DMA的I/O设备。越下层越可能使用写回。

 

编写高速缓存友好的代码

基本方法:

  让最常见的情况运行的快 

  在每个循环内部缓存不命中数量最小

 

存储器山

  1.一个程序从存储系统中读数据的速率称为读吞吐量,或者读带宽,通常以兆字节每秒(MB/s)为单位。

  2.读带宽的时间和空间局部性的二维函数称为存储器山。

 

 

参考资料

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://www.cnblogs.com/20135202yjx/p/4907828.html

 

posted on 2015-10-24 13:25  20135231  阅读(188)  评论(1编辑  收藏  举报