深入理解计算机系统:存储器层次结构
存储技术
随机访问存储器
-
SRAM
- 用作高速缓存存储器
-
DRAM
- 作为主存以及图形系统的帧缓冲区
-
对比
- SRAM具有多个晶体管,访问快,不敏感,造价高,应用于高速缓存存储器。
磁盘
- 磁盘构造
- 磁盘
- 磁盘是由盘片构成,每个盘片有两面称为表面,表面覆盖着磁性记录材料。盘片中央有一个可以旋转的主轴,它使得盘片以固定的旋转速率旋转(单位:RPM)。磁盘通常包含一个或多个这样的盘片,并封装在一个密封的容器内。
- 扇区
- 每个表面由一组称为磁道的同心圆组的。每个磁道被划分为一组扇区,每个扇区包含相等数据位(通常是512字节)。扇区之间由一些间隙分隔开,这些间隙中不存储数据位,用来标识扇区的格式化位。
- 磁盘构造
- 盘片,盘面,主轴,磁道,扇区,柱面
- 磁盘容量
- 磁盘容量=字节数/扇区 * 平均扇区/磁道 * 磁道数/表面 * 表面数/盘片 *盘片数/磁盘
- 访问时间
- 访问时间=寻道时间+旋转时间+传送时间
- 传送时间与寻道时间、旋转时间比较,很少
- 寻道时间和旋转时间大致相等
- 将寻道时间乘以2,看作是磁盘访问时间的估计值
- 磁盘的动态特性
- 寻道时间
- 为了读取某个目标扇区的内容,传动臂首先将读/写头定位到包含目标扇区的磁道上。依赖于读/写头以前的位置和传动臂在盘面上移动的速度。
- 旋转时间
- 一旦读/写头定位到了期望的磁道,驱动器等待目标扇区的第一个bit旋转到读/写头下。依赖于当读/写头到达目标扇区时盘面的位置和磁盘的旋转速度。
- 传送时间
- 当目标扇区的第一个bit位于读/写头下时,驱动器就可以开始读或者写该扇区的内容了。一个扇区的传送时间依赖于旋转速度和每条磁道的扇区数目。
- 逻辑磁盘块
- 可将磁盘分为B个扇区大小的逻辑块的序列,编号为0,1,…,B-1。磁盘中有一个小的硬件/固件设备,称为磁盘控制器,维护着逻辑块号和物理磁盘扇区(盘面、磁道、扇区)之间的映射关系。
固态硬盘
- 固态硬盘
- 固态硬盘(SSD)的存储介质分为两种,一种是采用闪存(FLASH芯片)作为存储介质(如笔记本硬盘、存储卡、优盘等),另外一种是采用DRAM作为存储介质(目前应用范围较窄)。而传统旋转硬盘是使用机械驱动器作为存储介质。SSD插到I/O总线上标准硬盘插槽(通常是USB)中,行为就和旋转硬盘一样。
- 对比
- SSD相比旋转硬盘,随机访问时间更快,能耗更低,同时也更结实,但价格较贵。
局部性
局部性原理
- 在数据访问时,具有“引用邻近于其他引用过的数据项的数据项,或者最近引用过的数据项本身”的这种倾向,叫作局部性原理。
- 局部性原理对硬件和软件系统的设计和性能都有着极大的影响。
对程序数据引用的局部性
- 时间局部性
- 在一个具有良好时间局部性的程序中,被引用过一次的存储器位置很可能在不远的将来再被多次引用。
取指令的局部性
- 空间局部性
- 在一个具有良好空间局部性的程序中,如果一个存储器位置被引用了一次,那么程序很可能在不远的将来引用附近的一个存储器位置。
局部性小结
- 重复引用同一个变量的程序有良好的时间局部性
- 对于具有步长为k的引用模式的程序,步长越小,空间局部性越好。具有步长为1的引用模式的程序有很好的空间局部性。在存储器中以大步长跳来跳去的程序空间局部性很差。
- 对于取指令来说,循环有很好的时间和空间局部性。循环体越小,循环迭代次数越多,局部性越好。
存储器层次结构
存储器层次结构
- 层次结构图
- L0层寄存器
- 一个时钟周期的访问时间,缓存的是字,大小4字节或者8字节。
- L1~L3层高速缓存(SRAM)
- 几个时钟周期的访问时间,缓存的行,64字节块。
- 主存(DRAM)
- 几十到几百个时钟周期,部分文件。
- 本地磁盘
- 磁盘扇区,数万个时钟周期。
- 分布式文件系统
- 网络传输,传输更慢。
缓存的概念
-
缓存
- 高速缓存是一个小而快速的存储设备,它作为存储在更大、也更慢的设备中的数据对象的缓冲区域。使用高速缓存的过程成为缓存。
-
块
- 第k+1层的存储器被划分成连续的数据对象片,称为块。每个块都有一个唯一的地址或名字,使之区别于其他的块。
- 大块可以减少访问次数。
-
存储器层次结构中基本的缓存原理
-
缓存命中
- 当程序需要第k+1层的某个数据对象d时,它首先在当前存储在第k层的一个块中查找d。如果d刚好缓存在第k层中,那么就是我们所说的缓存命中。
-
结构层次小结
- 利用时间局部性
- 由于时间局部性,同一数据对象可能会被多次使用。一旦一个数据对象在第一次不命中时被拷贝到缓存中,我们就会期望后面对该目标有一系列的访问命中。因为缓存比低一层的存储设备更快,对后面的命中的服务会比最开始的不命中快很多。
- 利用空间局部性
- 块通常包含有多个数据对象。由于空间局部性,我们会期望后面对该块中其他对象的访问能够补偿不命中后拷贝该块的花费。
- 利用时间局部性