ICS
六、存储器层次结构
6.1 存储技术
随机访问存储器(RAM)分为两类:静态的和动态的
静态(SRAM)具有双稳态特性,每位有6个晶体管,价格高,存取快,对光电不敏感,用于高速缓存存储器;动态(DRAM)每位一个晶体管,价格低,功耗更小,对光电敏感,用于主存和帧缓冲区。
非易失性存储器(ROM)的发展:PROM->EPROM->EEPROM
RAM有电才能存储数据
磁盘存储:
磁盘由盘片构成,每个盘片有2面或者称为表面,表面覆盖磁性记录材料,盘中央有一个可以旋转的主轴,使得盘片以固定的旋转速率旋转。每个表面是由一组称为磁道的同心圆组成的,每个磁道被划分为一组扇区,扇区之间由一组 间隙分隔开。
抽象化成逻辑块序列。
磁盘容量=(字节数/扇区)x(平均扇区数/磁道)x(磁道数/表面)x(表面数/盘片)x(盘片数/磁盘)
磁盘访问时间=寻道时间+旋转时间+传送时间
旋转时间=1/RPM x 60s/1min x 1/2
传送时间 = 1/RPM x 1/(平均扇区数/磁道)x 60s/1min
磁盘没电也能存储数据
固态硬盘(SSD):
基于闪存芯片(半导体存储器)的存储技术,读比写快,以页为单位进行读写
速度: SRAM>DRAM>DISK
6.2 局部性
时间局部性:被引用过的内存位置在不远的将来再次被多次引用
空间局部性:一个内存位置被引用,那么不远的将来引用其附近的内存位置
重复引用相同变量的程序拥有良好的时间局部性
步长为K的引用模式,步长越小,空间局部性越好
取指令循环具有好的时间与空间局部性
存储器层次结构:
思想:速度快容量小的存储设备作为速度慢容量大的存储设备的缓存
6.3 高速缓存(cache)
第k+1层的存储器被划分成连续的数据对象组块,称为块 数据以块为单位来回复制
缓存命中
当程序需要读取第k+1层的某个数据对象d时,首先在当前存储在k层的一个块中查找d,若d刚好存储在第k层中,那就是缓存命中。程序直接从第k层读取d。
缓存不命中
第k层的缓存就从k+1层去除包含d的那个块,若k层已满,覆盖现存的一个块。这个过程叫做替换或者驱逐这个块。被驱逐的称为牺牲块,决定替换哪个由替换策略控制。
分类:
冷不命中(强制性不命中):第k层为空(称为冷缓存)
冲突不命中:限制性的防治策略社对象映射到同一个缓存块
容量不命中:缓存太小了
高速缓存存储器
早期计算机系统的存储器层次结构只有三层:CPU寄存器,DRAM主存储器和磁盘。后插入了小的SRAM高速缓存,称为L1高速缓存
对于下列只讨论仅有L1高速缓存
考虑一个计算机系统,每个存储器地址有m位,形成M=个不同的地址。被组织成个高速缓存组的数组。每个组包含E个高速缓存行。每个行由个字节的数据块构成
将m个地址分为t位的标记位,s位的组索引,b位的块偏移
标记为表示取自哪个块群,有效位可以理解为是否缓存了东西
cache容量 (所有块的大小 ): C=SxExB
直接映射高速缓存
每个组只有一行(E=1),称为直接映射高速缓存
高速缓存确定一个请求是否命中,然后抽取出被请求的字的过程,分为三步:
1.组选择
从w的地址中取出s个组索引
2.行匹配
只有一行,直接比对标记是否一致
最终结果:命中/不命中
3.字抽取(缓存命中)
把块看成一个字节的数组,字节偏移是到这个数组的一个索引
行替换(缓存不命中)
从下一层取出被请求的块放入高速缓存行中,代替当前行
组相连高速缓存
1<EC/B
组选择:和上述一样
行匹配和字选择:检查多个行的标记位与有效位
行替换:空行优先,否则用策略替换LRU,FIFO(先进先出)LFU,随机替换
全相连高速缓存
E=C/B
一个组包含所有的行
组选择:只有一个组
行匹配和字选择:同上
写: 只写:立即将高速缓存块协会到低一层中;写回:推迟更新
写分配:加载入高速缓存。非写分配:避开高速缓存
不命中率=不命中数量/引用数量
6.5 编写高速缓存友好的代码
1.让最常见的情况运行最快
2.尽量减小每个循环内部的缓存不命中数量
6.6 高速缓存对程序性能的影响
读吞吐量:从存储系统中读数据的速率 v=n/s
重排列循环以提高空间局部性
LAB:
此章节后完成cachelab(60.0/60.0)
