第六章 存储器层次结构
存储器系统是一个具有不同容量,成本和访问时间的存储设备的层次结构。
CPU寄存器保存着最常用的数据。
靠近CPU的小的,快速的高速缓存存储器作为一部分存储在相对较慢的主存储器(主存)中的数据和指令的缓存区域。
主存暂时存放存储在容量较大的,慢速磁盘上的数据,而这些磁盘常常又作为存储在通过网络连接的其他机器的磁盘或磁带上的数据的缓存区域。
6.1存储技术
6.1.1随机访问存储器
随机访问存储器(RAM)分为:静态的RAM(SRAM)和动态的RAM(DRAM)
SRAM用来作为高速缓存存储器,既可以在CPU芯片上,也可以在片下。
DRAM用来作为主存以及图形系统的帧缓冲区。
1.静态RAM
SRAM将每个位存储在一个双稳态的存储器单元里
也就是说,只要有电,它就会永远地保持它的值。即使有干扰
2.动态RAM
DRAM将每个位存储为对一个电容充电
DRAM存储器单元对干扰非常敏感,当电容的电压被扰乱后,它就永远不会再恢复了
3.传统的DRAM
DRAM芯片中的单元(位)被分成d个超单元,每个超单元都由w个DRAM单元组成。一个d×w的DRAM总共存储了dw位信息。超单元被组织成一个r行c列的长方形阵列,这里rc=d。每个超单元都有形如(i,j)的地址,i表示行,j表示列。
4.存储器模块
DRAM芯片包装在存储器模块中,它是查到主板的扩展槽中。常见的包装包括168个引脚的双列直插存储器模块,它以64位为块传送数据到存储控制器和从存储控制器传出的数据,还包括72个引脚的单列直插存储器模块,它以32位为块传送数据。
5.增强的DRAM
对DRAM的改进:
(1)快页模式DRAM
(2)扩展数据输出DRAM
(3)同步DRAM
(4)双倍数据速率同步DRAM
(5)RambusDRAM(RDRAM)
(6)视屏DRAM
6.非易失性存储器
若断点,DRAM和SRAM会丢失信息,即易失的。
相反的,断电后仍保存信息,则为非易失的存储器。
7.访问主存
数据流通过称为总线的共享电子电路在处理和DRAM主存之间来来回回。
每次CPU和主存之间的数据传送都是通过一系列步骤来完成的,这些步骤称为总线事物。
读事物从主存传送数据到CPU。
写事物从CPU传送数据到主存。
6.1.2磁盘存储
1.磁盘构造
(1)磁盘由盘面构成,每个盘面有两面或者称为表面,表面覆盖记录材料。
盘片中央有一个可以旋转的主轴,使得盘片以固定的旋转速率旋转,通常是5400~15000转每分钟。
(2)每个表面是由一组成为磁道的同心圆组成的。每个磁道被划分为一组扇区。
每个扇区包含相等数量的数据位,这些数据编码在扇区上的磁性材料中。
扇区之间由一些间隙分隔开,这些间隙中不存储数据位。间隙存储用来标识山区的格式化位
(3)磁盘是由一个或多个叠放在一起的盘片组成的,他们被分装在一个密封的包装里。
整个装置通常称为磁盘驱动器,简称磁盘。
柱面:所有盘片表面上到主轴中心的距离相等的磁道的集合。
2.磁盘容量
记录密度:磁道每一英寸的段中可以放入的位数
磁道密度:从盘片中心出发半径以上一英寸的段内可以有的磁道数
面密度:记录密度与磁道密度的乘积
磁盘容量:(字节数/扇区)×(平均扇区/磁道)×(磁道数/表面)×(表面数/盘片)×(盘片数/磁盘)
3.磁盘操作
磁盘用读/写头来读写存储在磁性表面上的位,而读写头连接到一个传动臂一端。
通过沿着半径轴前后移动这个传动臂,驱动器就可以将读/写头定位在盘面上的任何磁道上,这个机械运动称为寻道。
对扇区访问时间分为三部分:
(1)寻道时间:
(2)旋转时间:
Tmax rotation = (1/RPM) × (60secs/1min)
平均旋转时间Tavg rotation是 Tmax rotation一半
(3)传送时间:
Tavg transfer =(1/RPM) × (1/(平均扇区数/磁道)) ×(60secs/1min)
4.逻辑磁盘块
为了对操作系统隐藏复杂性,现代磁盘将它们的构造呈现为一个简单的视图,一个B个扇区大小的逻辑块的序列,编号为0,1,…,B-1。
磁盘中有一个小的硬件/固件设备,称为磁盘控制器,维护着逻辑块号和实际(物理)磁盘扇区之间的映射关系。
5.连接到I/O设备
有三种不同类型的设备连接到总线:
(1)通用串行总线
(2)图形卡
(3)主机总线适配器
6.访问磁盘
6.1.3固态磁盘
固定硬盘是基于闪存的存储技术,在某些情况下是传统旋转磁盘的极有吸引力的替代产品。
6.1.4存储技术趋势
不同的存储技术有不同的价格和性能折中
不同存储技术的价格和性能属性以截然不同的速率变化着
DRAM和磁盘的性能滞后于CPU的性能
6.2局部性
局部性原理:倾向于引用临近与其他最近引用过的数据项的数据项,或者最近引用过的数据项本身。
局部性:(1)时间局部性 (2)空间局部性
在硬件层,局部性原理允许计算机设计者通过引用称为高速缓存存储器的小而快速的存储器来保存最近被引用的指令和数据项,从而提高对主存的访问速度
在操作系统级,局部性原理允许系统使用主存作为虚拟地址空间最近被引用的高速缓存。
6.2.1对程序数据引用的局部性
我们称为步长为1的引用模式为顺序引用模式。
一个连续向量中,每隔k个元素进行访问,就被称为步长为k的引用模式。
6.2.2取指令的局部性
因为程序指令是存放在存储器中的,CPU必须取出(读出)这些指令,所以我们也能够评价一个程序关于取指令的局部性。
6.3存储器的层次结构
6.3.1存储器层次结构中的缓存
1.缓存命中
当程序需要第k+1层的某个数据对象d时,它首先在当前存储在第k层的一个块中查找d。如果d刚好缓存在第k层中,那么就是缓存命中。
该程序直接从第k层读取d,根据存储器层次结构的性质,这要比从第k+1层读取d更快。
2.缓存不命中
如果第k层中没有缓存数据对象d,那么就是我们所说的缓存不命中。
当发生缓存不命中时,第k层的缓存从第k+1层缓存中取出包含d的那个块,如果第k层的缓存已经满了的话,就可能会覆盖现存的一个块
3.缓存不命中的种类
强制性不命中/冷不命中:第k层的缓存是空的,那么对任何数据对象的访问都不会命中。其中一个空的缓存称为冷缓存。
冲突不命中:对象会映射到同一个缓存块,缓存会一直不命中。
容量不命中:工作集的大小超过缓存的大小
4.缓存管理
管理缓存的逻辑可以是硬件,软件,或者是两者的结合。
总结:
基于缓存的存储器层次结构行之有效,是因为较慢的存储设备比较快的存储设备更便宜,还因为程序往往展示局部性:
(1)利用时间局部性
(2)利用空间局部性
6.4高速缓存存储器
6.4.1通用的高速缓存存储器结构
一个计算机系统,每个存储器地址有m位,形成M=2m个不同的地址。
如图,这样一个机器的高速缓存被组织成一个有S=2s个高速缓存组的数组。每个组包含E个高速缓存行
每个行是由一个B=2b字节的数据块组成的,一个有效位指明这个行是否包含有意义的信息,还有t=m-(b+s)个标记位
算法小结:
6.4.2直接映射高速缓存
1.直接映射高速缓存中的组选择
高速缓存从w的地址中间抽取出s个组索引位
2.直接映射高速缓存中的行匹配
上一步已经选择了某个组i,接下来的一步就要确定是否有字w的一个拷贝存储在组i包含的一个高速缓存中。
3.直接映射高速缓存中的字选择
一旦命中,我们知道w就在这个块的某个地方,最后一步确定的字在块中是从哪里开始的。
块偏移位提供了所需要的字的第一个字节的偏移。
4.直接映射高速缓存中不命中时的行替换
若果缓存不命中,那么它需要从存储器层次结构中的下一层取出被请求的块,然后将新的块存储在组索引位指示的组中的一个高速缓存行中。
6.4.3组相联高速缓存
1.组相联高速缓存中的组选择
2.组相联高速缓存中的行匹配和字选择
3.组相联高速缓存中的不命中时的行替换
6.4.4全相联高速缓存
1.全相联高速缓存中的组选择
2.全相联高速缓存中的行匹配和字选择
6.4.7高速缓存参数的性能影响
1.高速缓存参数的性能影响
2.块大小的影响
3.相联度的影响
4.写策略的影响