参考文献地址(中文翻译)
RAM类型
RAM类型主要分为静态RAM(SRAM)和动态RAM(DRAM),两者功能相同,但是SRAM更快,与之对应价格更贵
静态RAM
- 一个单元有6个晶体管 => 结构复杂,成本和实现难度更大
- 状态稳定,可以快速在两个稳定状态(0/1)转换
动态RAM
- 一个单元只有一个晶体管和一个电容器,结构简单,成本和实现难度更低
- 状态读取依赖电容充放电,需要花时间等待,所以DRAM的速度比SRAM更慢
DRAM访问细节
- DRAM访问的三个阶段:
- 寻址:通过地址总线设置行地址 + 列地址(串行,且都在一个地址总线上),寻址结束
- 传输准备:找到地址后,RAM芯片需要一些准备时间,成为CAS时延(CL)
- 数据传输:准备完成后,通过数据总线进行数据传输
CPU高速缓存
高速缓存出现的背景:
- 25年前,CPU的频率和内存内存总线的频率基本在一个层面上,内存的访问速度仅比寄存器慢一点点
- 上世纪90年代,CPU频率得到快速提升,但内存总线的频率和内存芯片的性能却没有得到成比例的提升(达到CPU频率的内存造价非常昂贵)
- 通过配置大量 DRAM 的同时,我们还可以配置少 量 SRAM。将地址空间的某个部分划给 SRAM,剩下的部分划给 DRAM。一般来说,SRAM 可以当作扩展的寄存器来使用
- 这种方式看起来可行,但是将SRAM映射到进程的虚拟地址空间是一个非常复杂的工作,进程需要同时管理DRAM和SRAM的地址映射问题,管理成本非常之大
基于以上原因,SRAM不暴露给OS和用户,而是由处理器直接使用和管理。SRAM 用于对存储在主存中、即将使用的数据进行临时拷贝(换句话说,缓存)。这种做法的依据是程序代码和数据具有时间局部性和空间局部性。也就是说,在一段较短的时间内,同一份代码和数据有很大的可能被重复使用。对代码来说,是循环,即同一段代码被反复执行。对数据来说,是反复访问某一小片区域中的数据。
这里的SRAM即CPU高速缓存
高速缓存的位置
下图表示一个CPU核心的三级缓存的示意图
其中:
L1d
表示一级数据缓存L1i
表示一级指令缓存L2d
、L3d
分别表示2级、3级缓存
对于多处理器多核心的告诉缓存结构如下:
其中:
- 暗灰色表示一个处理器,即一个处理器独享高速缓存
- 橘色为一个CPU核心
- 亮绿为一级缓存,即每个CPU核心独享一级缓存,共享二三级缓存
高速缓存的操作
- 缓存条目并不存储单个字,而是存储若干连续字组成的“线”
- 用字作为缓存的粒度显然毫无效率;由于空间局部性的存在,与当前地址相邻 的地址有很大可能会被一起访问
缓存操作类型
- 独占型缓存(以AMD处理器为代表)
- 缓存写入只需要写一级缓存;写入时有利
- 缓存空间不够的情况下,缓存更新需要逐级剔除;从L1d => L2d => L3d => 主存
- 包容型缓存(以Intel处理器为代表)
- 缓存写入同步L1d、L2d、L3d
- 缓存更新只用剔除L1d即可;逐出时有利