Computer Systems:A Programmer's Perspective

深入理解计算机系统(第六章)

Posted by LT on August 5, 2020

略读

第六章 存储器层次结构

  1. 基本存储技术包括随机访问存储器(RAM)、非易失性存储器(ROM)和磁盘。
  2. 随机访问存储器
    • 随机访问存储器(Random Access Memory, RAM)分为两类:静态RAM(SRAM)和动态RAM(DRAM)。
    • SRAM
      • 比DRAM更快,但也贵得多。
      • 用来作为高速缓存存储器,既可以在CPU芯片上,也可以在片下。
      • SRAM对诸如光/电噪声这样的干扰不敏感。
      • 一个桌面系统的SRAM不会超过几兆字节,
    • DRAM
      • 用来作为主存以及图形系统的帧缓冲区。
      • 典型地,一个桌面系统的DRAM有几百或几千兆字节。
    • 6-2
  3. SSD
    • 读SSD比写要快。
    • 要很多年SSD才会磨损坏(参考练习题6.5)
  4. 空间-局部性
    • 步长为k的引用模式:一个连续向量中,每隔k个元素进行访问.
    • 随着步长的增加,空间局部性下降。
    • 例如,考虑二维数组的元素求和问题。双重嵌套循环按照行优先顺序读数组的元素。也就是,内层循环读第一行的元素,然后读第二行,依此类推。所以,这是一个很好的步长为1的引用模式,具有良好的空间局部性
      • 当我们交换了i和j的循环,即按照列优先来扫描数组。
        • 空间局部性角度:因为C数组在内存中是按照行顺序来存放的,结果就得到步长为N的引用模式空间局部性变差
        • 缓存(不)命中角度:如果整个数组都在高速缓存中,不命中率1/4(和行优先相同)。如果数组比高速缓存要大(更可能出现这种情况),那么每次对a[i][j]的访问都会不命中!
  5. 缓存(不)命中
    • 缓存命中(cache hit):当程序需要第k+l层的某个数据对象d时,它首先在当前存储在第k层的一个块中查找d。而d刚好缓存在第k层中。
    • 缓存不命中:如果第k层中没有缓存数据对象d,那么就是缓存不命中(cache miss)。
      • 此时,第k层的缓存从第k+1层缓存中取出包含d的块,如果第k层的缓存已经满了,就会替换现存的一个块。
      • 决定该替换哪个块是由缓存的替换策略(replacement policy)来控制的。一个具有最近最少被使用(LRU)替换策略的缓存会选择最后被访问的时间距现在最远的块
  6. 缓存管理
    • 存储器层次结构的本质是,每一层存储设备都是较低一层的缓存。
    • 编译器管理寄存器文件,缓存层次结构的最高层。
  7. 程序中利用局部性
    • 注意内循环,大部分计算和内存访问都发生在这里。
    • 按照数据在内存中的存储顺序、以步长为1的来读数据,从而使得空间局部性最大
    • 一旦从存储器中读入了一个数据对象,就尽可能多地使用它,从而使得时间局部性最大
  8. 几种存储技术小结
    • RAM有两种基本类型。
      • 静态RAM(SRAM)快一些,但是也贵一些,它既可以用做CPU芯片上的高速缓存,也可以用做芯片下的高速缓存。
      • 动态RAM(DRAM)慢一点,也便宜一些,用做主存和图形帧缓冲区。
    • ROM:即使是在关电的时候,ROM也能保持它们的信息,可以用来存储固件。
    • 旋转磁盘是机械的非易失性存储设备,以每个位很低的成本保存大量的数据,但是其访问时间比DRAM长得多。
    • 固态硬盘(SSD)基于非易失性的闪存。
  9. 一些规律
    • 对于较快的存储技术,每个位会更贵,而且容量更小
      • 特别地,DRAM和磁盘访问时间,远远大于CPU周期时间。
    • 系统将存储器组织成存储设备的层次结构来弥补这些差异:
      • 较小、较快的设备在顶部,
      • 较大、较慢的设备在底部。
    • 如果程序编写有好的局部性,
      • 大多数数据都可以从较高层得到服务
      • 存储系统能以较高层的速度运行,同时具有较低层的成本和容量。