20135223何伟钦—信息安全系统设计基础第七周学习总结
第六章 存储器层次结构
【学习时间:6小时】
【学习任务:《深入理解计算机系统》第六章】
6.1存储技术
6.1.1随机访问存储器
分为两类:静态(SRAM)和动态(DRAM)。
(1)SRAM:高速缓存存储器,既可以在CPU芯片上,也可以在片下。
(2)DRAM:主存以及图形系统的帧缓冲区。
1.静态RAM
SRAM将每个位存储在一个双稳态的存储器单元里。每个单元是用一个六晶体管电路来实现的。该电路有一个属性:可以无限期地保持在两个不同的电压配置或状态之一。
2.动态RAM
|
每位晶体管数 |
相对访问时间 |
持续的? |
敏感的? |
相对花费 |
应用 |
SRAM |
6 |
1x |
是 |
否 |
100xx |
高速缓存存储器 |
DRAM |
1 |
10x |
否 |
是 |
1x |
主存,帧缓冲器 |
3.传统的DRAM
(1)单元(位)被分成d个超单元,每个超单元都由w个DRAM单元组成。
(2)一个d*w的DRAM总共存储了dw位信息。
(3)超单元被组织成一个r行c列的长方形阵列,rc=d.每个超单元有形如(i,j)的地址。
(4)行地址i:RAS ;列地址:CAS
注意:RAS和CAS请求共享相同的DRAM地址引脚。
4.存储器模块
(1)双列直插存储器模块:168个引脚,以64位为块传送数据到存储控制器和从存储控制器传出数据。
(2)单列直插存储器模块:72个引脚,以32位为块传送数据。
5.增强的DRAM
- 快页模式DRAM
- 扩展数据输出DRAM
- 同步DRAM
- 双倍数据速率同步DRAM
- Rambus DRAM
- 视频DRAM
6.非易失性存储器
只读存储器ROM
(1) 区分:以它们能够被重编程的次数和对他们进行重编程所用的机制来区分的。
PROM(可编程ROM):只能被编程一次。
EPROM(可擦写可编程ROM):
(1) 紫外线光照射过窗口,EPROM单元就被清除为0.
(2) 通过使用一种把1写入EPROM的特殊设备来完成对EPROM编程。
EEPROM(电子可擦除PROM):
(1) 不需要一个物理上独立的编程设备。
(2) 能够被编程的次数的数量级可以达到10^5.
FLASH(闪存):
固态硬盘:基于闪存的磁盘驱动器。
7.访问主存
(1)总线:一组并行的导线,能携带地址、数据、和控制信号。
6.1.2磁盘存储
1.磁盘构造
(1)由盘片构成,每个盘片有两面或者称为表面,表面覆盖着磁性记录材料,盘中央有一个可以旋转的主轴,使得盘片以固定的旋转速率旋转,磁盘通常包含一个或者多个这样的盘片,冰封装在一个密封的容器内。
(2)每个表面由一组称为磁道的同心圆组成的。每个磁道被划分为一组扇区,每个扇区包含相等数量的数据位(512字节),扇区之间由一些间隙分隔开,间隙间不存储数据位。间隙存储用来标识扇区的格式化位。
2.磁盘容量
(1)最大容量(容量):一个磁盘上可以记录的最大位数。
(2)决定因素:
- 记录密度:磁道一英寸的段中可以放入的位数。
- 磁道密度:从盘片中心出发半径上一英寸的段内可以有的磁道数。
- 面密度:记录密度与磁道密度的乘积。
(1)公式:
3.磁盘操作
(1)磁盘是以扇区大小的块来读写数据。
(2)访问时间:
- 寻道时间:移动传动臂所需的时间。通常3~9ms,一次寻道的最大时间可达20ms。
- 旋转时间:依赖于当读/写头到达目标磁道时盘面的位置和磁盘的旋转速度。
最大旋转延迟:T(max rotation) = (1/RPM)*(60secs/1min)
平均旋转时间:T(avg rotation)=1/2T(max rotation)
l 传送时间:一个扇区的传送时间依赖于旋转速度和每条磁道的扇区数目。
T(avg transfer)= (1/RPM)*(1/(平均扇区数/磁道))*(60secs/1min)
注意:
- 访问一个磁盘扇区中512个字节的时间主要是寻道时间和旋转延迟。
- 寻道时间和旋转延迟大致相等,估计磁盘访问时间可将寻道时间x2
4.逻辑磁盘块
(1)一个B个扇区大小的逻辑快的序列,编号为0,1,….,B-1。
(2)磁盘中有一个小的硬件/固件设备,称为磁盘控制器。维护着逻辑块号和实际磁盘扇区之间的映射关系。
5.连接到I/O设备
(1)系统总线和存储器总线是与CPU相关的。
(2)第三方I/O设备
- 通用串行总线控制器:是一个连接到USB总线的设备的中转机构。
- 图形卡(适配器):包含硬件和软件逻辑,负责CPU在显示器上画像素。
- 主机总线适配器:将一个或多个磁盘连接到IO总线,使用的是一个特别的主机总线接口定义的通信协议。
6.访问磁盘
a)CUP通过将命令、逻辑块号和目的存储器地址写到与磁盘相关联的存储器映射地址,发起一个磁盘读。
b)直接存储器访问:磁盘控制器读扇区,并执行到主存的DMA传送
c)当DMA传送完成时,磁盘控制器用中断的方式通知CPU
6.2局部性
两种形式:时间局部性和空间局部性
6.2.1对程序数据引用的局部性
1.顺序引用模式:步长为1的引用模式。
2.c数组在存储器中是按照行顺序来存放的。
6.2.2取指令的局部性
1.代码区别于程序数据的一个重要属性是在运行时它是不能被修改的。
2.当程序正在执行时,CPU只从存储器中读出它的指令。CPU决不会重写或修改这些指令。
6.2.3局部性小结
- 重复引用同一个变量的程序有良好的时间局部性。
- 对于具有步长为k的引用模式的程序,步长越小,空间局部性越好。具有步长为1的引用模式的程序有很好的空间局部性。在存储器中以大步长跳来跳去的程序空间局部性会很差。
- 对于取指令来说,循环有好的空间和时间局部性。循环体越小,循环迭代次数越多,局部性越好。
6.3存储器层次结构
存储技术:不同存储技术的访问时间差异很大。速度较快的技术每字节的成本要比速度较慢的技术高,而且容量较小。CPU和主存之间的速度差距子在增大。
计算机软件:一个编写良好的程序倾向于展示出良好的局部性。
6.3.1存储器层次结构中的缓存
存储器层次结构的中心思想:对于每个k,位于k层的更快更小的存储设备作为位于k+1层的更大更慢的存储设备的缓存。
1.缓存命中
当程序需要第k+1层的某个数据对象d时,首先在当前存储在第k层的一个块中查找d,如果d刚好缓存在第k层中,就称为缓存命中。
2.缓存不命中
(1)即第k层中没有缓存数据对象d。
这时第k层缓存会从第k+1层缓存中取出包含d的那个块。如果第k层缓存已满,就可能会覆盖现存的一个块
覆盖一个现存的块的过程称为替换或驱逐。
3.缓存不命中的种类
(1)强制性不命中/冷不命中
即第k层的缓存是空的(称为冷缓存),对任何数据对象的访问都不会命中。
(2)冲突不命中
由于一个放置策略:将第k+1层的某个块限制放置在第k层块的一个小的子集中,这就会导致缓存没有满,但是那个对应的块满了,就会不命中。
(3)容量不命中
当工作集的大小超过缓存的大小时,缓存会经历容量不命中,就是说缓存太小了,不能处理这个工作集。
4.缓存管理
某种形式的逻辑必须管理缓存,而管理缓存的逻辑可以是硬件、软件,或者两者的集合。
6.3.2存储器层次结构概念小结
6.4高速缓存存储器
早期计算机系统的存储器层次结构只有三层:CPU寄存器、DRAM主存储器和磁盘存储。
L1高速缓存(一级缓存):SRAM高速缓存存储器。位于CPU寄存器文件和主存之间,访问速度2-4个时钟周期。
L2高速缓存:位于L1高速缓存和主存之间,访问速度10个时钟周期
L3高速缓存:位于L2高速缓存和主存之间,访问速度30或40个时钟周期
6.4.1通用的高速缓存存储器结构
1.高速缓存是一个高速缓存组的数组(S,E,B,m)
S:这个数组中有S=2^s个高速缓存组
E:每个组包含E个高速缓存行
B:每个行是由一个B=2^b字节的数据块组成的
m:每个存储器地址有m位,形成M=2^m个不同的地址
2.标记位和有效位
(1)有效位:每个行有一个有效位,指明这个行是否包含有意义的信息
(2)标记位:t=m-(b+s)个,唯一的标识存储在这个高速缓存行中的块
(3)组索引位:s
(4)块偏移位:b
6.4.2直接映射高速缓存
每个组只有一行(E=1)的高速缓存称为直接映射高速缓存。
高速缓存确定一个请求是否命中,然后取出被请求的字的过程,分为三步:
- 组选择
- 行匹配
- 字抽取
1.组选择
(1)高速缓存从w的地址中间抽取出s个组索引位。
组索引位:一个对应于一个组号的无符号整数。
2.行匹配
注意,判断缓存命中有两个充分必要条件:
- 该行设置了有效位
- 高速缓存行中的标记和w的地址中的标记相匹配
3.字选择
4.缓存不命中时的行替换
5.后台运行中的直接映射高速缓存
- 标记位和索引位连起来唯一的标识了存储器中的每个块
- 映射到同一个高速缓存组的块由标记位唯一地标识
6直接映射高速缓存中的冲突不命中
(1)抖动:高速缓存反复的加载和驱逐相同的高速缓存块的组。
(2)原因:这些块被映射到了同一个高速缓存组。
(3)解决方法:在每个数组的结尾放B字节的填充(B字节是一个块的长度,一行是一个块,相当于分开了行)从而使得他们映射到不同的组。
6.4.3组相联高速缓存
E路组相联高速缓存:1<E<C/B
1.组选择
和直接的一样。
2.行匹配和字选择
(1) key:标记和有效位。
(2) value:块的内容。
3.不命中时的行替换
有空行替换空行,没有空行,应用替换策略:
(1) 随机替换
(2) 最不常使用策略LFU:替换在过去某个时间窗口内引用次数最少的那一行。
(3) 最近最少使用策略LRU:替换最后一次访问时间最久远的那一行。
6.4.4全相联高速缓存
1.组选择
只有一个组,默认组0,没有索引位,地址只被划分成了一个标记和一个块偏移。
2.行匹配和字选择
(1)同组相联。
(2)只适合做小的高速缓存。
6.4.5有关写的问题
1.直写:立即将w的高速缓存块写回到紧接着的低一层中。
(1)缺点:每次写都会引起总线流量。
2.写回;尽可能的推迟存储器更新,只有当替换算法要驱逐更新过的块时,才把它写到紧接着的低一层中。
(1)优点:由于局部性,显著得减少总线流量。
(2)缺点:增加了复杂性。
3.写不命中的处理方法
(1)写分配:加载相应的低一层中的块到高速缓存中,然后更新这个高速缓存块。
(2)非写分配:避开高速缓存,直接把这个字写在低一层中。
6.4.6一个真实的高速缓存层次结构的解剖
1.高速缓存既保存数据,也保存指令。
- 只保存指令的:i-cache
- 只保存程序数据的:d-cache
- 既保存指令又保存数据的:统一的高速缓存
6.4.7高速缓存参数的性能影响
- 不命中率 = 不命中数量/引用数量
- 命中率 = 1 - 不命中率
- 命中时间
- 不命中处罚:因为不命中所需要的额外的时间
6.5编写高速缓存友好的代码
1.基本方法:
- 让最常见的情况运行的快
- 在每个循环内部缓存不命中数量最小
2.重要问题:
- 对局部变量的反复引用是好的(时间局部性)
- 步长为1的引用模式是好的(空间局部性)
6.6存储器山
每台计算机都有表明他存储器系统的能力特色的唯一的存储器山。
——就是把存储器系统的性能用关于时间和空间局部性的山表示。
想要达成的目的:使得程序运行在山峰而不是低谷
目标:利用时间局部性,使得频繁使用的字从L1中取出;利用空间局部性,使得尽可能多的字从一个L1高速缓存行中访问到
学习体会:
这一章虽然没有很多需要动手操作的代码编译和实现,可是概念和理论太多,虽然书本编辑得很有条理,可是个人觉得还是需要保持极大地耐心去浏览和理解。
参考资料
1.《深入理解计算机系统》书本和PDF第六章
2.http://www.cnblogs.com/lwr-/p/4908540.htm 司马欧阳博客