每个程序员都应该了解的内存知识(简要笔记,持续更新)

参考文献地址(中文翻译)

RAM类型

RAM类型主要分为静态RAM(SRAM)和动态RAM(DRAM),两者功能相同,但是SRAM更快,与之对应价格更贵

静态RAM

  1. 一个单元有6个晶体管 => 结构复杂,成本和实现难度更大
  2. 状态稳定,可以快速在两个稳定状态(0/1)转换

动态RAM

  1. 一个单元只有一个晶体管和一个电容器,结构简单,成本和实现难度更低
  2. 状态读取依赖电容充放电,需要花时间等待,所以DRAM的速度比SRAM更慢

DRAM访问细节

  1. DRAM访问的三个阶段:
    • 寻址:通过地址总线设置行地址 + 列地址(串行,且都在一个地址总线上),寻址结束
    • 传输准备:找到地址后,RAM芯片需要一些准备时间,成为CAS时延(CL)
    • 数据传输:准备完成后,通过数据总线进行数据传输

CPU高速缓存

高速缓存出现的背景:

  1. 25年前,CPU的频率和内存内存总线的频率基本在一个层面上,内存的访问速度仅比寄存器慢一点点
  2. 上世纪90年代,CPU频率得到快速提升,但内存总线的频率和内存芯片的性能却没有得到成比例的提升(达到CPU频率的内存造价非常昂贵)
  3. 通过配置大量 DRAM 的同时,我们还可以配置少 量 SRAM。将地址空间的某个部分划给 SRAM,剩下的部分划给 DRAM。一般来说,SRAM 可以当作扩展的寄存器来使用
    • 这种方式看起来可行,但是将SRAM映射到进程的虚拟地址空间是一个非常复杂的工作,进程需要同时管理DRAM和SRAM的地址映射问题,管理成本非常之大

基于以上原因,SRAM不暴露给OS和用户,而是由处理器直接使用和管理。SRAM 用于对存储在主存中、即将使用的数据进行临时拷贝(换句话说,缓存)。这种做法的依据是程序代码和数据具有时间局部性空间局部性。也就是说,在一段较短的时间内,同一份代码和数据有很大的可能被重复使用。对代码来说,是循环,即同一段代码被反复执行。对数据来说,是反复访问某一小片区域中的数据。

这里的SRAM即CPU高速缓存

高速缓存的位置

下图表示一个CPU核心的三级缓存的示意图
在这里插入图片描述

其中:

  1. L1d表示一级数据缓存
  2. L1i表示一级指令缓存
  3. L2dL3d分别表示2级、3级缓存

对于多处理器多核心的告诉缓存结构如下:

在这里插入图片描述

其中:

  1. 暗灰色表示一个处理器,即一个处理器独享高速缓存
  2. 橘色为一个CPU核心
  3. 亮绿为一级缓存,即每个CPU核心独享一级缓存,共享二三级缓存

高速缓存的操作

  1. 缓存条目并不存储单个字,而是存储若干连续字组成的“线”
    • 用字作为缓存的粒度显然毫无效率;由于空间局部性的存在,与当前地址相邻 的地址有很大可能会被一起访问

缓存操作类型

  1. 独占型缓存(以AMD处理器为代表)
    • 缓存写入只需要写一级缓存;写入时有利
    • 缓存空间不够的情况下,缓存更新需要逐级剔除;从L1d => L2d => L3d => 主存
  2. 包容型缓存(以Intel处理器为代表)
    • 缓存写入同步L1d、L2d、L3d
    • 缓存更新只用剔除L1d即可;逐出时有利
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值