第6章 存储器层次结构(深入理解计算机系统)

6.1 存储技术

6.1.1 随机访问存储器

随机访问存储器(Random-Access Memory,RAM)分为两类:静态的和动态的。静态(SRAM)比动态(DRAM)更快,但也贵很多。SRAM用来作为高速缓存存储器,既可以在CPU芯片上,也可以在片下。DRAM用来作为主存以及图形系统的帧缓冲区。典型的,一个桌面系统的SRAM不会超过几兆字节,但是DRAM却有几百或几千兆字节。

6.1.2 磁盘存储

磁盘是广为应用的保存大量数据的存储设备,存储数据的数量级可以达到几百到几千千兆字节,而基于RAM的存储器只能由几百或几千兆字节。不过,从磁盘上读取信息的时间为毫秒级,而从DRAM读取比从磁盘读快10万倍,从SRAM读比从磁盘读快100万倍。

设备可以自己执行读或者写总线事物,而不需要CPU的干涉的过程,称为直接存储器访问(Direct Memory Access),这种数据传送称为DMA传送。

6.1.3 固态硬盘

固态硬盘(Solid State Disk,SSD)是一种基于闪存的存储技术。一个SSD包由一个或多个闪存芯片和闪存翻译层组成,闪存芯片替代传统旋转磁盘中的机械驱动器,而闪存翻译层是一个硬件/固件设备,扮演与磁盘控制器相同的角色,将对逻辑块的请求翻译成对底层物理设备的访问。

6.2 局部性

一个编写良好的计算机程序常常具有良好的局部性。也即是说,它们倾向于引擎临近于其他最近引用过的数据项的数据项,或者最近引用过的数据项本身。这种倾向性,被称为局部性原理(principle of locality),是一个持久的概念,对硬件和软件系统的设计和性能都有着极大的影响。

局部性通常有两种不同的形式,时间局部性(temporal locality)和空间局部性(spatial locality)。一般而言,有良好局部性的程序比局部性差的程序运行得更快。

小结:

  • 重复引用同一个变量的程序有良好的时间局部性
  • 对于具有步长为k的引擎模式的程序,步长越小,空间局部性越好。具有步长为1的应用模式的程序有很好的空间局部性。在存储器中以大步长跳来跳去的程序空间局部性会很差
  • 对于取指令来说,循环有好的时间和空间局部性。循环体越小,循环次数越多,局部性越好。

6.3 存储器层次结构

L0:寄存器

L1:L1高速缓存(SRAM)

L2:L2高速缓存(SRAM)

L3:L3高速缓存(SRAM) 

L4:主存(DRAM)

L5:本地二级存储(磁盘)

L6:远程二级存储(分布式文件系统、Web服务器)

6.3.1 存储器层次结构中的缓存

高速缓存(cache)是一个小而快速的存储设备,它作为存储在更大、也更慢的设备中的数据对象的缓冲区域。层次结构总每一层都缓存来自较低一层的数据对象。

    1.缓存命中

当程序需要第k+1层的某个数据对象d时,它首先在当前存储在第k层的一个块中查找d。当d刚好缓存在第k层中,就是我们所说的缓存命中(cache hit)。 

    2.缓存不命中

如果第k层中没有缓存数据对象d,就是我们所说的缓存不命中(cache miss)。当发生缓存不命中时,第k层的缓存从第k+1层缓存中取出包含d的那个块,如果第k层的缓存已经满了的话。可能就会覆盖现存的一个块。

覆盖一个现有的块的过程称为替换(replacing)或驱逐(evicting)这个块。被驱逐的这个块有时也称为牺牲块。决定该替换哪个块是由缓存的替换策略来控制的。如随机替换策略、最近最少被使用策略(LRU)。

    3.缓存不命中的种类

强制性不命中(冷不命中):缓存中没有缓存任何数据对象

冲突不命中:由于限制性的放置策略引起的不命中

容量不命中:缓存的大小小于当前处理的工作集

    4.缓存管理

缓存管理指某个东西要将缓存划分成块,在不同的层之间传送块,判定是命中还是不命中,并处理它们。如,编译器管理寄存器文件,L1、L2、L3层缓存完全是由内置在缓存中的硬件逻辑来管理的。

原文地址:https://www.cnblogs.com/cinvzi/p/9358083.html