第六章——存储器层次结构
1、存储器层次结构
看这一章,首先了解存储器层次结构是什么。
2、局部性:
在存储器层次结构的基础之上引出了一个很重要的思想,也是计算机程序里面一个很基本的属性”局部性“。局部性又分为两 个方面:1、 时间局部性:有良好的时间局部性程序中,被引用过一次的存储器很有可能在不久的将来再被多次调用;2、 空间局部 性:有良好空间局部性程序中,被引用过一次的存储器,很有可能在不久的将来引用其附近临近的存储器。由此可以给出量化评价 一个程序局部性的简单原则:1、重复引用一个变量的程序有良好的时间局部性;2、对于步长为k的引用模式的程序,步长越小, 程序的空间局部性越好;3、对于取指令来说,循环有好的时间和空间局部性。
3、缓存:
第k层总是作为第k+1层存储设备的数据对象的缓冲区域,使用高速缓存这个过程称为缓存。在这过程中,总是以传送单元(块)在第k层与第k+1层之间来回拷贝数据。
上图给出了通用高速缓存存储器的结构(S,E,B,m):S为高速缓存组数组,每个高速缓存组包含E个高速缓存行,每行由B字节的数据块组成,有效位说明该行数据是否包含有意义的信息,还有t=m-(b+s)个标记位,它们唯一地标识存储在这个高速缓存行中的块。缓存容量大小:C=S*E*B
这个部分需要注意的是:为什么高速缓存用中间的位作为组索引,而不是用高位。这是因为使用高位一些连续的存储器会映射在相同的高速缓存块中,造成冲突不命中的情况。
4.1 有关读写的问题
有关读的问题比较简单,读命中了就不需要什么操作了;读不命中,就需要重新从下一级存储器拷贝就OK了。
对于写就相对复杂一点,在字w写命中的时候,有直写“在需要写的时候立即将w的高速缓存写回到紧接着的低一层中去”和写回“尽可能的推迟存储器更新,只有当替换算法要替换掉这一个块的时候,才把w写回紧接着的低一层去”两种方式。
写不命中时,有两种处理方法:写分配“加载相应的低一层的快到高速缓存,然后更新这个高速缓存块”和非写分配“直接写入到低一层去,避开高速缓存”。
5.存储器山的理解
当时间局部性很差的时候空间局部性仍能补救。