Back

6-存储器层次结构6-存储器层次结构

ICS


六、存储器层次结构

6.1 存储技术

\quad 随机访问存储器(RAM)分为两类:静态的和动态的

\quad 静态(SRAM)具有双稳态特性,每位有6个晶体管,价格高,存取快,对光电不敏感,用于高速缓存存储器;动态(DRAM)每位一个晶体管,价格低,功耗更小,对光电敏感,用于主存和帧缓冲区。

\quad 非易失性存储器(ROM)的发展:PROM->EPROM->EEPROM

\quad RAM有电才能存储数据

磁盘存储:

\quad 磁盘由盘片构成,每个盘片有2面或者称为表面,表面覆盖磁性记录材料,盘中央有一个可以旋转的主轴,使得盘片以固定的旋转速率旋转。每个表面是由一组称为磁道的同心圆组成的,每个磁道被划分为一组扇区,扇区之间由一组 间隙分隔开。

\quad 抽象化成逻辑块序列。

\quad 磁盘容量=(字节数/扇区)x(平均扇区数/磁道)x(磁道数/表面)x(表面数/盘片)x(盘片数/磁盘)

\quad 磁盘访问时间=寻道时间+旋转时间+传送时间

\quad 旋转时间=1/RPM x 60s/1min x 1/2

\quad 传送时间 = 1/RPM x 1/(平均扇区数/磁道)x 60s/1min

\quad 磁盘没电也能存储数据

\quad 固态硬盘(SSD):

\quad 基于闪存芯片(半导体存储器)的存储技术,读比写快,以页为单位进行读写

\quad 速度: SRAM>DRAM>DISK

6.2 局部性

\quad 时间局部性:被引用过的内存位置在不远的将来再次被多次引用

\quad 空间局部性:一个内存位置被引用,那么不远的将来引用其附近的内存位置

\quad 重复引用相同变量的程序拥有良好的时间局部性

\quad 步长为K的引用模式,步长越小,空间局部性越好

\quad 取指令循环具有好的时间与空间局部性

存储器层次结构: \quad 思想:速度快容量小的存储设备作为速度慢容量大的存储设备的缓存

6.3 高速缓存(cache)

\quad 第k+1层的存储器被划分成连续的数据对象组块,称为块 数据以块为单位来回复制

缓存命中

\quad 当程序需要读取第k+1层的某个数据对象d时,首先在当前存储在k层的一个块中查找d,若d刚好存储在第k层中,那就是缓存命中。程序直接从第k层读取d。

缓存不命中

\quad 第k层的缓存就从k+1层去除包含d的那个块,若k层已满,覆盖现存的一个块。这个过程叫做替换或者驱逐这个块。被驱逐的称为牺牲块,决定替换哪个由替换策略控制。

分类:

\quad 冷不命中(强制性不命中):第k层为空(称为冷缓存)

\quad 冲突不命中:限制性的防治策略社对象映射到同一个缓存块

\quad 容量不命中:缓存太小了

高速缓存存储器

\quad 早期计算机系统的存储器层次结构只有三层:CPU寄存器,DRAM主存储器和磁盘。后插入了小的SRAM高速缓存,称为L1高速缓存

\quad 对于下列只讨论仅有L1高速缓存

\quad 考虑一个计算机系统,每个存储器地址有m位,形成M=2m2^m个不同的地址。被组织成S=2sS=2^s个高速缓存组的数组。每个组包含E个高速缓存行。每个行由B=2bB=2^b个字节的数据块构成

\quad 将m个地址分为t位的标记位,s位的组索引,b位的块偏移

\quad 标记为表示取自哪个块群,有效位可以理解为是否缓存了东西 \quad cache容量 (所有块的大小 ): C=SxExB

直接映射高速缓存

\quad 每个组只有一行(E=1),称为直接映射高速缓存

\quad 高速缓存确定一个请求是否命中,然后抽取出被请求的字的过程,分为三步:

1.组选择

\quad 从w的地址中取出s个组索引

2.行匹配

\quad 只有一行,直接比对标记是否一致

\quad 最终结果:命中/不命中

3.字抽取(缓存命中)

\quad 把块看成一个字节的数组,字节偏移是到这个数组的一个索引

\quad \quad 行替换(缓存不命中)

\quad \quad 从下一层取出被请求的块放入高速缓存行中,代替当前行

组相连高速缓存

\quad 1<EC/B

\quad 组选择:和上述一样

\quad 行匹配和字选择:检查多个行的标记位与有效位

\quad 行替换:空行优先,否则用策略替换LRU,FIFO(先进先出)LFU,随机替换

全相连高速缓存

\quad E=C/B

\quad 一个组包含所有的行

\quad 组选择:只有一个组

\quad 行匹配和字选择:同上

写: \quad 只写:立即将高速缓存块协会到低一层中;写回:推迟更新

\quad 写分配:加载入高速缓存。非写分配:避开高速缓存

\quad 不命中率=不命中数量/引用数量

6.5 编写高速缓存友好的代码

\quad 1.让最常见的情况运行最快

\quad 2.尽量减小每个循环内部的缓存不命中数量

6.6 高速缓存对程序性能的影响

\quad 读吞吐量:从存储系统中读数据的速率 v=n/s

\quad 重排列循环以提高空间局部性


LAB:

此章节后完成cachelab(60.0/60.0)

6-存储器层次结构
https://www.aki-yzh.cn/blog/6-存储器层次结构
AuthorAki
Update dateFebruary 18, 2023
评论加载中…