第六章存储器层次结构
1、存储器系统是一个具有不同容量、成本和访问时间的存储设备的层次结构。
2、高速缓存存储器:作为CPU和主存之间的缓存区域
3、具有良好局部性的程序倾向于一次又一次的访问相同的数据项集合,或是倾向于访问邻近的数据项集合。具有良好局部性的程序比局部性差的程序更多的倾向于从存储器层次结构中较高层次处访问数据项,因此运行的更快。
6.1 存储技术
6.1.1 随机访问存储器
一、随机访问存储器(RAM)分为两类:
静态RAM(SRAM):更快,更贵,用来作为高速缓存存储器,既可以在CPU芯片上,也可以在片下。
动态ARM(DARM):用来作为主存以及图形系统的帧缓冲区。
二、静态RAM:SRAM将每个位存储在一个双稳态的存储器单元里。
动态RAM:DRAM将每个位存储为对一个电容的充电。
三、SRAM和DRAM存储器的特性:只要有供电,SRAM就会保持不变,与DRAM不同,它不需要刷新。SRAM的存取比DRAM快,,SRAM对干扰不敏感。代价是SRAM单元比DRAM单元使用更多的晶体管,而且更贵,功耗更大。
四、传统的DRAM
芯片中的单元位被分为d个超单元,每个超单元有w个DRAM单元组成,一个dxw的DRAM总共存储了dw位信息。超单元被组织成一个r行c列的长方形,即rc=d。每个超单元有形如(i, j)的地址,i表示行,j表示列。
五、存储器模块
DRAM芯片包装在存储器模块中,是插在主板的扩展槽上的。168个引脚的双列直插存储器模块以64位为块传送或传出数据。72个引脚的单列直插存储器模块以32位为块传送数据。
六、增强的DRAM
有许多种DRAM存储器,每种都是基于DRAM单元。
1、快页模式-FPM DRAM
2、扩展数据输出-EDO DRAM
3、同步-SDRAM
4、双倍数据速率同步-DDR SDRAM
5、RDRAM
6、视频-VRAM
七、非易失性存储器ROM
1、RAM在断电后会丢失信息,ROM即使断电也能保存着信息。ROM中有的类型既可以读又可以写,但整体上称为只读存储器。
2、ROM是以它们能够被重编程的次数和进行重编程所用机制进行区分的:
3、PROM:可编程ROM,只能被编程一次。
4、EPROM:可擦写可编程ROM,能够被擦写和重编程的次数的数量级达到1000次。
5、EEPROM:电子可擦除PROM,不需要物理上独立的编程设备,可直接在印刷电路卡上编程。数量级达到10^5。
6、FLASH:闪存,基于EEPROM,为大量的电子设备提供快速而持久的非易失性存储
八、存储在ROM设备中的程序通常称为固件,一个计算机系统通电后,会运行固件,一些系统在固件中提供了少量基本的输入和输出函数,如PC和BIOS。复杂的设备也依赖固件翻译来自CPU的I/O输入输出请求。
九、访问主存
总线是一组并行的导线,能携带地址、数据和控制信号。数据流通过总线在处理器和DRAM主存之间来回。每次CPU和主存之间的数据传送是通过一系列步骤来完成的,称为总线事务。
读事务:从主存传送数据到CPU
写事务:从CPU传送数据到主存
十、计算机系统的配置:主要部件是CPU芯片、I/O桥芯片组、组成主存的DRAM存储器模块。这些部件由一对总线连接起来,其中一条总线是系统总线,它连接CPU和I/O桥,另一条总线是存储器总线,它连接I/O桥和主存。
I/O桥将系统总线的电子信号翻译成存储器总线的电子信号。
6.1.2 磁盘存储
一、磁盘构造
磁盘有许多盘片构成,每个盘片有两个表面,表面上覆盖着磁性记录材料。盘片中央有一个可旋转的主轴,盘片以固定旋转速率旋转。
每个表面由一组称为磁道的同心圆组成。磁道被划分为一组扇区,每个扇区包含相等数量的数据位。扇区之间由间隙分隔开,间隙不存储数据。
磁盘由一个或多个叠放的盘片组成,被封装在一个密封的包装里,整个装置称为磁盘驱动器,即磁盘,也称旋转磁盘,区别与基于闪存的固态磁盘SSD。柱面:描述多个盘片驱动器的构造,指所有盘片表面上到主轴中心的距离想等的磁道的组合。
二、磁盘容量
一个磁盘上可以记录的最大位数称为最大容量,即容量。由以下技术因素决定:
记录密度:磁道一英寸的段中可以放入的位数
磁道密度:从盘片中心出发半径上一英寸的段内可以有的磁道数
面密度:记录密度与磁道密度的乘积
提高面密度即可提高容量。
三、计算磁盘容量的公式:
磁盘容量 = 字节数/扇区 X 平均磁盘数/磁道 X 磁道数/表面 X 表面数/盘片 X 盘片数/磁盘
四、磁盘操作
磁盘用读/写头来读写存储在磁性表面的位,读写头连接到传动臂,通过沿着半径轴前后移动传动臂可以将读/写定位在盘面上的任何磁道上。这样的机械运动称为寻道。定位到了期望的磁道上,磁道旋转每个位通过它的下面时就可读写该位。多个盘片针对每一个都有独立的读写头,且位于同一柱面上。
对扇区的访问时间有三个主要部分:
寻道时间:定位到包含目标扇区的磁道上,移动传动臂所需时间。依赖于读写头以前的位置和传动臂移动速度。通常为3-9ms,最大可达20ms。
旋转时间:目标扇区的第一个位旋转到读写头下,时间依赖于读写头到目标磁道的位置和磁盘的旋转速度。
最大旋转延迟=1/RPM X 60secs/1min (s)
平均旋转时间是最大值的一半。
传送时间:读写该扇区的内容,时间依赖于旋转速度和每条磁道的扇区数目(扇区大小)。平均传送时间= 1/RPM x 1/(平均扇区数/磁道) x 60s/1min
访问一个磁盘扇区内容的平均时间为平均寻道时间,平均旋转延迟和平均传送时间之和。
五、逻辑磁盘块
磁盘中有一个小的硬件/固件设备,称为磁盘控制器,维护这逻辑块号和实际(物理)磁盘扇区之间的映射关系。
六、连接到I/O设备
输入输出设备都是通过I/O总线连接到CPU和主存的。与系统总线和存储器总线不同,它可以设计成与CPU无关的。
I/O总线较慢,但可以容纳种类繁多的第三方I/O设备:
通用串行总线(USB)控制器是一个连接到USB总线的设备的中转机构。
图形卡(或适配器)包含硬件和软件逻辑,代表CPU在显示器上画像素。
主机总线适配器将一个或多个磁盘连接到I/O总线,使用特别的主机总线接口定义的通信协议。
两个常用的磁盘接口SCSI/SATA,SCSI更快更贵,可支持多个磁盘驱动器。其他设备,如网络适配器,插入到主板上空的扩展槽,从而连接到I/O总线。
七、访问磁盘
CPU从磁盘读数据,CPU使用存储器映射I/O的技术向I/O设备发出命令,过程中地址空间有一块是为与I/O设备通信保留的,称为I/O端口。当设备连接到总线时,它与一个或多个端口相关联。
6.1.3 固体磁盘
一、固态硬盘是一种基于闪存的存储技术,一个SSD包由一个或多个闪存芯片和闪存翻译层组成,闪存芯片替代传统旋转磁盘中的机械驱动器,闪存翻译层是一个硬件/固件设备,与磁盘控制器相同,将对逻辑块的请求翻译成对底层物理设备的访问。
二、SSD顺序读比顺序写稍微快一点,但随机写比读慢一个数量级。
三、SSD优点:随机访问时间比旋转磁盘更快,能耗更低,更结实
SSD缺点:容易磨损,较贵,容量通常只是旋转磁盘的1%
6.1.4 存储技术优势
几个重要思想:
不同的存储技术有不同的价格和性能折中
不同存储技术的价格和性能属性以截然不同的速率变化着
增加密度从而降低成本比降低访问时间更容易
DRAM和磁盘的性能滞后于cpu的性能
6.2局部性
一、局部性原理:一个编写良好的计算机程序,常常倾向于引用临近于其他最近引用过的数据项的数据项,或者最近引用过的数据项本身。
二、两种不同的形式:
时间局部性:被引用过一次的存储器位置很可能在不远的将来再被多次引用。
空间局部性:如果一个存储器位置被引用了一次,那么很可能在不远的将来引用附近的一个存储器位置。
6.2.1、对程序数据引用的局部性
步长为k的引用模式:一个连续变量中,每隔k个元素进行访问,就被称为步长为k的引用模式。
步长为1的引用模式:就是顺序访问一个向量的每个元素,有时也被称为顺序引用模式,它是程序中 空间局部性常见和重要的来源。一般来说,随着步长增加,空间局部性下降。
6.2.2、取指令的局部性
程序指令是存放在存储器中的,CPU必须取出(读出)这些指令。
代码区别于程序数据的是在运行时是不能被修改的。
6.2.3、局部性小结
一个程序中局部性的简单原则:
重复引用同一个变量的程序有良好的时间局部性
对于具有步长为k的引用模式的程序,步长越小,空间局部性越好
对于取指令来说,循环有好的时间和空间局部性。循环体越小,循环迭代次数越多,局部性越好。
6.3存储器层次结构
用相互补充的性质想到的一种组织存储器系统的方法:存储器层次结构。一般而言,从高层往底层走,存储设备变得更慢、更便宜和更大。
即:每层存储设备都是下一层的“缓存”
6.3.1 存储器层次结构中的缓存
一、高速缓存是一个小而快速的存储设备,作为存储在更大、也更慢的设备中的数据对象的缓冲区域。使用高速缓存的过程称为缓存。
二、存储器层次结构的中心思想是:层次结构中的每一层都缓存来自较低一层的数据对象。
三、第k+1层的存储器被划分为连续的数据对象片,称为块。每个块都有唯一的地址和名字。类似第k层也被划分为较少的块的集合,块的大小与k+1层是一样的,第k层的缓存包含第k+1层块的一个子集的拷贝。
四、数据总是以块大小为传送单元在第k层与第k+1层之间来回拷贝。任一对相邻的层次之间块大小是固定的,但是其他的层次对之间可以有不同的块大小。
五、缓存命中
当程序需要第k+1层的某个数据对象d时,首先在当前存储在第k层的一个块中查找d,如果d刚好缓存在第k层中,就称为缓存命中。该程序直接从第k层读取d,比从第k+1层中读取d更快。
六、缓存不命中
即第k层中没有缓存数据对象d。这时第k层缓存会从第k+1层缓存中取出包含d的那个块。如果第k层缓存已满,就可能会覆盖现存的一个块。
决定该替换哪个块又缓存的替换策略控制,如随机替换策略,最近最少被使用LRU替换策略。
七、缓存不命中的种类
1、强制性不命中/冷不命中
第k层的缓存为空(称为冷缓存),任何访问都会不命中。这种通常是短暂的事件
2、冲突不命中
放置策略为将第k+1层的块限制放置在第k层块的一个小的子集中。
3、容量不命中
当工作集的大小超过缓存的大小时,缓存会经历容量不命中,就是说缓存太小了,不能处理这个工作集。
八、缓存管理
存储器层次结构的本质是每一层存储设备都是较低一层的缓存。在每一层上,某种形式的逻辑必须管理缓存,而管理缓存的逻辑可以是硬件、软件,或者两者的结合。
6.3.2存储器层次结构概念小结
基于缓存的存储器层次结构行之有效,因为较慢的存储设备更便宜。
利用时间局部性
利用空间局部性
6.4 高速缓存存储器
CPU和主存之间差距太大,插入一个小的SRAM高速缓存存储器,称为L1高速缓存:2-4个时钟周期。L2高速缓存:10个时钟周期。L3高速缓存:30~40个时钟周期
6.4.1通用的高速缓存存储器结构
高速缓存的结构可以用元组(S,E,B,m)来描述:
S:这个数组中有S=2^s个高速缓存组
E:每个组包含E个高速缓存行
B:每个行是由一个B=2^b字节的数据块组成的
m:每个存储器地址有m位,形成M=2^m个不同的地址
有效位:每个行有一个有效位,指明这个行是否包含有意义的信息
标记位:t=m-(b+s)个,唯一的标识存储在这个高速缓存行中的块
组索引位:s
块偏移位:b
高速缓存的结构将m个地址划分成了t个标记位,s个组索引位和b个块偏移位。
高速缓存的大小/容量C指所有块的大小的和,不包括标记位和有效位,所以:
C=S*E*B
6.4.2直接映射高速缓存
一、每个组只有一行的高速缓存称为直接映射高速缓存。
二、高速缓存确定一个请求是否命中,然后抽取出被请求的字的过程:1、组选择2、行匹配3、字抽取
三、直接映射高速缓存中的组选择
从地址中抽取s个组索引位,解释成一个对应于一个组号的无符号整数,选择相应组。
四、直接映射高速缓存中的行匹配
直接映射高速缓存每个组只有一行,当设置了有效位并且行中的标记与地址中的标记相匹配时,我们得到缓存命中。
五、直接映射高速缓存中的字选择
块偏移位b提供了所需要的字的第一个字节的偏移。
六、直接映射高速缓存中不命中时的行替换
缓存不命中时,需要从下一层取出被请求的块存储在组索引位指示的组中的高速缓存行中。若组中都是有效行时。需要替换,直接映射高速缓存每组只有一行,就可直接替换。
七、综合:运行中的直接映射高速缓存
八、直接映射高速缓存中的冲突不命中
当程序访问大小为2的幂的数组时,直接映射高速缓存中通常会发生冲突不命中。
6.4.3 组相联高速缓存
一、一个 1<E<C/B 的高速缓存通常称为E路组相联高速缓存。
二、组相联高速缓存中的组选择
与直接映射高速缓存的组选择一样,组索引位标识组
三、组相联高速缓存中的行匹配和字选择
形式是(key, value),用key作为标记和有效位去匹配,匹配上了之后返回value。
重要思想:组中的任意一行都可以包含任何映射到这个组的存储器块,所以告诉缓存必须搜索组中的每一行。
判断匹配的标准依旧是两个充分必要条件:
1.有效
2.标记匹配
四、组相联高速缓存中不命中时的行替换
缓存不命中时,高速缓存从存储器中取出包含这个字的块,替换行时,如果没有空行,按照替换策略替换。复杂的替换策略利用了局部性原理,以使在比较近的将来引用被替换的行的几率最小。
6.4.4 全相联高速缓存(E=C/B)
一个全相联高速缓存由一个包含所有高速缓存行的组(即E=C/B)组成的。
1、全相联高速缓存中的组选择
只有一个组,地址中没有组索引位,地址只被划分成了一个标记和一个块偏移。
2、全相联高速缓存中的行匹配和字选择
与前面的一样,区别主要是规模大小的问题
全相联高速缓存只适合做小的高速缓存,例如虚拟存储器系统中的翻译备用缓存器TLB。
6.4.5 有关写的问题
一、更新低一层中的拷贝的方法:
(1)直写:立即将w的高速缓存块协会到紧接着的低一层中
缺点是每次写都会引起总线流量。
(2)写回:只有当替换算法要驱逐更新过的块时,才写到紧接着的低一层中
优点:由于局部性,写回能显著的减少总线流量
缺点:增加了复杂性,必须为每个高速缓存行维护一个额外的修改位
二、写不命中的处理方法
(1)写分配:加载相应的低一层中的块到高速缓存中,然后更新这个高速缓存块。
(2)非写分配:避开高速缓存,直接把这个字写在低一层中。
6.4.6 真实的高速缓存层次结构:
既保存指令又包括数据的高速缓存称为统一的高速缓存。
6.4.7 高速缓存参数的性能影响
一、有许多指标来衡量高速缓存的性能:
不命中率
命中率
命中时间
不命中处罚
二、影响:
1、高速缓存大小的影响
2、块大小的影响
3、相联度的影响
4、写策略的影响
参考资料
《深入理解计算机系统》
体会
认真看书,学习这一章的内容,使得我对存储器层次结构有了进一步的了解。但是在做练习题的时候不是很顺利,还是要进行翻书看例子,对知识的掌握不够扎实。今后得要更加仔细阅读课本。