如何通俗地理解存储器层次结构?

举个通俗的场景。

大学生(CPU)写毕业论文时候,通常会到图书馆(内存)查找相关资料(读取数据),但是没人会那么傻每次写论文都去图书馆吧,跑来跑去,多费劲,要想又快又方便地写论文,我们可以到图书馆借几本相关书籍放到宿舍书架中(缓存),然后就可以舒服地在宿舍写论文了。如果学校图书馆都没有想看的书籍,那只能到市图书馆(本地磁盘)找了。

为什么借了几本书之后就可以舒服地在宿舍撸论文了?(缓存为何work?)

  • 写论文时候,短时间内会经常翻阅同一本书吧,这就是利用时间局部性。
  • 写论文时候,借回来的几本书籍(附近的几本书籍)也是会经常翻阅,这就是利用空间局部性。

关于局部性,可以参考理解局部性原理

假设我们从图书馆借来了9本书,想最方便最快速地翻阅书籍,怎么办呢?我们可以这样子管理书籍,把最经常用的2本书放在书桌上(寄存器,假设只能容纳2本书籍),把次常用的3本书籍放在最方便拿到的小书架上的第一层(L1高速缓存,假设只能容纳3本),然后再把最不常用的4本书籍放在第二层(L2高速缓存,假设只能容纳4本)。

这样子放置书籍后,撸论文就很方便啦。

回顾整个场景,其实跟计算机存储器层级结构(如图1)很类似。

如何通俗地理解存储器层次结构?_第1张图片

​ 图1

从高层往低走,存储设备会变得更慢,更便宜更大,其中最高层L0是CPU寄存器,CPU可以在一个之间周期访问寄存器,而SRAM和DRAM的CPU访问周期分别是几个,几十到几百不等。在上面的例子中,桌子=寄存器,书架=L1、L2高速缓存,校图书馆=主存,市图书馆=本次磁盘。毫无疑问,从市图书馆查阅资料是最费劲了。

从图书馆查阅资料太奔波太麻烦了,所以就想找到一个缓存(宿舍书架),所以可以说存储器层次结构中心思想是,更快更小的存储设备(图1的第k层)作为的更大更慢存储设备(第k+1层)的缓存。

1.缓存命中:想查阅某本书籍,发现那本书就在桌子上,就不用到书架第一层拿了,这就是缓存命中。

2.缓存不命中:想查阅某本书籍,但是桌子上没有,只能到书架第一层拿了,这就是缓存不命中。此时从书架上拿到的书籍需要替换桌子上一本书(没办法,桌子只能容纳2本书),那替换哪一本(块,存储器通常被被划分成连续的数据对象组块,可以书架中的书籍看成固定大小的)?这个过程由缓存的替换策略来控制。可以随机替换一本书又或者替换最近用得最少那本书。

3.缓存不命中的种类

  • 冷缓存:初始状态书架是空的,对任何书籍的查阅都是都不会命中,空的缓存成为冷缓存,这种状态很短暂,也不太重要。
  • 冲突不命中:由一种限制性的放置策略引用的一种不命中。若缓存不命中,就必须执行放置策略,决定来自第k+1层的取出的块放在第k层哪个位置。举个例子,如图2所示。例如取自书架第一层的3,4,5号书籍限制性地放置在书桌中的1号书籍所在位置,取自书架第二层的6,7,8,9号书籍限制性地放置在书桌中2号书籍所在位置,假如按照3,4,5的顺序查阅书籍,那么就一直不能命中书桌这层缓存了。当然可以随机性地放置块,但是定位代价很高。
  • 容量不命中:某个阶段计算机稳定地访问缓存块中某个集合(某些数据),这个集合就是该阶段的工作集,如果缓存太小,容不下这个工作集,这就是容量不命中,例如,如果某阶段经常访问3,4,6,7号图书,那么书桌这层缓存会导致容量不命中。

如何通俗地理解存储器层次结构?_第2张图片

​ 图2.

参考:

如何通俗易通理解存储器结构

深入理解存储器结构

《深入理解计算机系统》

你可能感兴趣的