存储器层次结构
存储器层次结构
计算机程序的一个基本属性:局部性
存储器层次结构分类:
1 CPU寄存器:放在CPU里面的内存,特点:速度快,价格高
2 高速缓存存储器、主存储器、磁盘。特点:CPU之外,需要时访问调用,相对较慢
随机访问存储器(RAM)
两类RAM:
1 SRAM(静态) :
(1) 更快,更贵。
(2)作为高速缓存存储器,主要负责运算需要
(3) 双稳态的存储单元,抗干扰强
2 DARM(动态):
(1)用于主存以及图形系统的帧缓冲区
(2)抗干扰弱
(3)必须周期性更新
传统DRAM:类似于数电的选择控制器,操作单位为超单元,行R*列C=超单元D,步骤为集体复制,特定传出
增强DRAM:对于传送更多的数据信息提高速率
ROM(只读存储器):
弥补RAM数据不存储特性
总线是一组并行的导线,能携带地址、数据和控制信号
I/O桥将系统总线的电子信号翻译成存储器总线的电子信号,也将系统总线和存储器总线连接到I/O总线
磁盘存储
磁盘容量:磁盘上可以记录的最大位数,提高面密度或者磁盘体积可提高容量
局部体现——多区管理:
1 将柱面的集合分割成不相交的子集合(记录区),每个区包含一组连续的柱面
2 一个区中的每个柱面的每条磁道都有相同数量的扇区,这个扇区的数量由该区中最里面的磁道所能包含的扇区数确定
3 磁盘以扇区大小的块来读写数据
逻辑磁盘块结构:
盘面,磁道,扇区,这个三元组唯一的标识了对应的物理扇区
I/O总线
I/O总线:CPU与外界的桥梁连接了CPU,主存和I/O设备
固体磁盘
固态硬盘是一种基于闪存的存储技术,且为固定不可移动
闪存:ROM的一种,普遍用于电子设备存储需要数据
一个SSD包由一个或多个闪存芯片和闪存翻译层组成:
闪存芯片 ,闪存翻译层
局部性
分类:
1 时间局部性
2 空间局部性
对程序数据引用的局部性
步长为k的引用模式:
一个连续变量中,每隔k个元素进行访问,就被称为步长为k的引用模式
K=1的步长,利用顺序访问相当线性遍历
K>=2的步长,类似空间,例如数组的多维遍历规则,列遍历不利于空间局部性(由于与规定存储规格不符合)
取指令的局部性
程序指令是存放在存储器中的,CPU必须取出(读出)这些指令
空间局部性程度决定:
1 K的大小
2 循环次数多少
3 重复调用
存储器层次结构
缓存:使用高速缓存的过程称为缓存
数据处理方式单位:块处理
操作方式:
替换:随机替换策略-随机牺牲一个块,最近最少被使用替换策略LRU-牺牲最后被访问的时间距离现在最远的块。
高速缓存存储器
L1-L3高速缓存:时间周期增加
块偏移位:b
高速缓存的结构将m个地址划分成了t个标记位,s个组索引位和b个块偏移位。
高速缓存的大小/容量C:C=E*S*B
组相联高速缓存
E路组相联高速缓存:1<E<C/B
1.组选择
和直接的一样。
2.行匹配和字选择
形式是(key, value),用key作为标记和有效位去匹配,匹配上了之后返回value。
重要思想:组中的任意一行都可以包含任何映射到这个组的存储器块,所以告诉缓存必须搜索组中的每一行。
判断匹配的标准依旧是两个充分必要条件:
1.有效
2.标记匹配
3.行替换
有空行替换空行,没有空行,应用替换策略:
- 随机替换
- 最不常使用策略LFU:替换在过去某个时间窗口内引用次数最少的那一行。
- 最近最少使用策略LRU:替换最后一次访问时间最久远的那一行。
全相联高速缓存(E=C/B)
1.组选择
只有一个组,默认组0,没有索引位,地址只被划分成了一个标记和一个块偏移。
2.行匹配和字选择
同组相联。
只适合做小的高速缓存。
写不命中的处理方法
(1)写分配---通常写回对应:加载相应的低一层中的块到高速缓存中,然后更新这个高速缓存块。
(2)非写分配---通常直写对应:避开高速缓存,直接把这个字写在低一层中。
真实的高速缓存层次结构:
1 只保存指令的:i-cache
2 只保存程序数据的:d-cache
3 既保存指令又保存数据的:统一的高速缓存
高速缓存参数的性能影响
1.性能:
- 不命中率 = 不命中数量/引用数量
- 命中率 = 1 - 不命中率
- 命中时间
- 不命中处罚:因为不命中所需要的额外的时间
编写高速缓存友好的代码
1.基本方法:
- 让最常见的情况运行的快
- 在每个循环内部缓存不命中数量最小
2.重要问题:
- 对局部变量的反复引用是好的(时间局部性)
- 步长为1的引用模式是好的(空间局部性)
存储器山
每台计算机都有表明他存储器系统的能力特色的唯一的存储器山。
——就是把存储器系统的性能用关于时间和空间局部性的山表示。
想要达成的目的:使得程序运行在山峰而不是低谷
目标:利用时间局部性,使得频繁使用的字从L1中取出;利用空间局部性,使得尽可能多的字从一个L1高速缓存行中访问到。
参考资料:
课本
百度
闫佳歆