存储器的层次结构
-
存储技术
- 随机访问存储器 RAM
- SRAM CPU 的高速缓存
- DRAM 主存
- 地址访问模型
- 单位存储器采用,阵列式寻址,需要的线路少,但需要两次寻址
- 多个单位存储器组合在一起,提供更大的空间,每个单位存储器存储部分比特位
- 平均响应时间在 ns 组
- 存储器的访问
- 系统总线
- 存储器总线
- IO 桥
- 存储器映射 I/O
- 直接存储器访问(Direct Memory Access, DMA)
- 机械硬盘
- 磁道,扇区,柱面
- 寻道时间,旋转时间,传送时间
- 平均响应时间在 ms 级
- 磁盘访问的抽象
- 抽象成 block
- 磁盘控制器将 block 映射成磁道、扇区和盘面的组合
- block 一般要多大?
- 固态硬盘 SSD
- 基于闪存的存储技术 EEPROM
- 最小访问单位为页,一页一般有 512B~4KB 等大小
- SSD 分为很多块(16KB512KB),每块包括很多页(32128)
- 修改(MODIFY)某一页的时候,要保证该块被擦除之后才能写入
- 需要将该块已有的页移动到其它空块
- 一旦一个块被擦除之后,其中的每个页就可以不需要再进行擦除就写一次(ADD)
- 随机访问存储器 RAM
-
程序的局部性
- 空间局部性
- 访问一个地址的时候,有很大概率会访问其相邻的地址
- 时间局部性
- 访问一个地址的时候,在接下来的一定时间内可能会多次访问这个地址
- 空间局部性
-
存储器的层次结构
-
缓存
- 缓存命中
- 缓存不命中与替换策略
- 缓存不命中的种类
- 冷不命中
- 冲突不命中
- 容量不命中,工作集,working set
- 缓存管理
- 编译器管理寄存器
- 硬件管理 L1,L2,L3
- 操作系统管理磁盘缓存
- write through 与 write back,一般采用 write back,write back 需要多余的状态位来判断是否被修改过,从而在驱逐的时候可以判断是否需要 write back。
-
寄存器 0 个时钟周期,4 字节或 8 字节
-
L1 4,64 字节块
-
L2 10,64 字节块
-
L3 40,64 字节块
-
内存,4KB 页
-
磁盘
-
网络存储
-
-
CPU 高速缓存
- 多个 CPU 访问导致的 false sharing
- 映射到相同的组导致的抖动不命中,本质上是冲突不命中
- 缓存友好的代码
- 关注调用次数最多的内循环
- 多用步长为 1 的引用,空间局部性
- 尽量增同一个变量的访问次数,时间局部性
网友评论