Table of Contents
之前我们将内存当作字节数组,但实际上内存是一个非常复杂的设备层次结构.
存储技术和趋势 Link to 存储技术和趋势
随机访问存储器(Random-Access Memory) Link to 随机访问存储器(Random-Access Memory)
- 特点
- RAM被打包成芯片
- 基本存储单元,一个单元存储一个bit
- 多个内存条构成了主存
RAM分为SRAM和DRAM SRAM(Stactic RAM) DRAM(Dynamic RAM)
非易失性存储器 RAM断电后就失去了所有信息,称为易失性存储器.相对的非易失性存储器就是只读存储器(ROM).
CPU读写内存操作
CPU加载内存
CPU存储内存
磁盘 Link to 磁盘
- 几何描述
- 磁盘是由盘片组成的,一个盘片有上表面和下表面两面.
- 每个表面包含一系列同心圆,称之为磁道.
- 每一个磁道包含很多个扇区,扇区存储512字节数据.
- 扇区之间有空隙分隔.
- 盘片在主轴上是对齐的,轨道在不同表面上的集合称为柱面.
容量 磁盘容量 = 每个扇区字节数 * 磁道平均扇区数 * 表面磁道数 * 盘片盘面数 * 磁盘盘片数量
操作 一个磁盘一个磁臂,一个磁臂上有多个读写头,对应每个盘片
磁盘访问时间
- 寻道时间:将读写头移动到需要的磁道上,通常需要3~9ms
- 旋转延迟:将磁盘旋转到需要的扇区上,平均需要½旋转周期
- 传输时间:读取字节需要的时间
- CPU读取磁盘操作: 首先,CPU通过编写三元组(read指令,逻辑块号,目的内存地址)来启动此读取行为
然后,磁盘控制器读取与该逻辑块对应的扇区,取得总线的控制权,通过I/O桥直接复制到主存中
最后,一旦数据传输完成,磁盘控制器使用中断机制来通知CPU
固态硬盘(SSD) Link to 固态硬盘(SSD)
页:4KB
512KB,块:32128页 需要将页擦除后才能写入. 一个块经过10万次重复写入后就坏掉了
局部性(Locality) Link to 局部性(Locality)
程序倾向于使用其地址接近或等于最近使用过的数据和指令的那些数据和指令
- 时间局部性:最近访问的位置可能在不久的将来再次被引用的属性
- 空间局部性:如果访问了一个位置,那么将来可能访问临近的位置
C
123456
int sum_array(int *a){
int sum = 0;
for(int i=0;i<n;i++)
sum += a[i];
return sum;
}
这段代码中,
- 数据使用 对数组元素的引用体现空间局部性;对sum的引用体现时间局部性.
- 指令使用 顺序执行一系列指令体现空间局部性;循环中的指令体现时间局部性.
作为一名程序员,能够在看到代码时获得一些代码局部性的定性感觉是非常重要的.要避免局部性差的情况.
存储器层次结构 Link to 存储器层次结构
存储空间越小,越快越贵;存储空间越大越慢,越便宜.
级别 | 存储器 |
---|---|
L0 | 寄存器 |
L1 | L1缓存(SRAM) |
L2 | L2缓存(SRAM) |
L3 | L3缓存(SRAM) |
L4 | 主存(DRAM) |
L5 | 本地二级存储(如磁盘) |
L6 | 远程二级存储(如网盘) |
我的电脑的”任务管理器”->“性能”->“CPU”中的缓存情况 | |
![]() | |
在存储器层次结构中的每一层都包含从下一个较低级别层级获取的数据 |
缓存 Link to 缓存
缓存:一个更小更快的存储设备,充当更慢的设备中的数据的暂存区域. 所以缓存是一个相对的概念,第k级存储器是第k+1存储器的缓存. 根据局部性原理,相比于第k+1级存储器,程序更倾向于访问第k级存储器. 所以如果访问第k+1级存储器,我们会将其复制到第k级(缓存),很可能将再次访问它. 因为我们不经常访问级别第的存储,所以可以用慢的便宜的设备存储.
概念 如果CPU请求的数据块在缓存中称为hit;反之称为miss
缓存不命中的类型
- cold(compulsory miss) 缓存是空的,设备刚刚加电
- capacity miss 缓存的大小是有限的,工作集(被程序不断访问的块)比缓存大
- conflict miss 块号为i只能放在i mod 缓存大小处,如果缓存大小是4,却需要块号为0,4,8的块,虽然小于缓存大小,但每次都不命中.这是硬件映射算法的问题
存储器层次结构中的缓存
Thanks for reading!