存储器层次结构

存储器层次结构

计算机程序的一个基本属性:局部性

存储器层次结构分类:

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高速缓存行中访问到。

参考资料:

课本

百度

闫佳歆

原文地址:https://www.cnblogs.com/chuishi/p/4908897.html