20155234第九周《信息安全系统设计基础》学习总结
第六章 存储器结构层次
CPU执行指令,而存储器系统为CPU存放指令和数据。
存储器系统是一个线性的字节数组。
实际上,存储器系统是一个具有不同的容量、成本和访问时间的存数设备的层次结构。靠近CPU的小的、成本和访问时间的存储设备的层次结构。
高速缓存存储器是作为主存储器的数据和指令的缓冲区域。
主存暂时存放存储在容量较大的、慢速磁盘上的数据,而这些磁盘常常又作为存储在通过网络连接的其他机器的磁盘或磁带的数据的缓冲区。
局部性的基本属性:具有良好局部性的程序倾向于一次又一次地访问相同的数据集合,或是倾向于访问邻近的数据集合。具有良好局部性的程序比局部性差的程序更多地倾向于从存储器层次结构中较高层次处访问数据,因此运行的更快。
6.1 存储技术
- 6.1.1 随机访问存储
随机访问存储器分为两类:静态和动态。
SRAM比DRAM更快,但也贵得多。
SRAM用来作为高速缓存存储器,既可以在CPU芯片上,也可以在片下。
DRAM用来作为主存以及图形系统的帧缓冲区。
SRAM和DRAM
SRAM将每个位存储在一个双稳态存储器单元里。它可以无限期的保存两个不同的电压配置。
DRAM将每位存储为对一个电容的充电。
SRAM抗干扰强,存取比DRAM快,更贵,耗功更大。
传统的DRAM
一个DRAM芯片分为d个超单元切划分成r行c列,每个超单元有w个DRAM单元组成。DRAM芯片芯片被连接到存储控制器的电路,这个电路一次可以传送w位到芯片或从芯片传出w位。
电路设计者将DRAM组织成二维列阵而不是线性数组的一个原因降低芯片上引脚的数量。
DRAM芯片包装在存储器模块中,它是插在主板的扩展槽上的。一个超单元存储一个字节。
非易失性存储器
如果断电,SRAM和DRAM都会丢失他们的信息。
PROM可编程一次
EPROMM 1000次
EEPROM 10的5次方
闪存是一类非易失性存储器,基于EEPROM,固态硬盘基于EEPROM。
存储在ROM设备中的程序称为固件。
访问主存
总线事物:从主存中传送到CPU是读事务,从CPU传送到主存叫写事务。
总线是一组并行的导线,能携带地址、数据和控制信号。取决于总线的设计,数据和地址信号可以共享同一组导线,也可以使用不同的。
系统总线连接CPU和I/O桥,存储器总线连接I/O桥和主存。
读事务三个步骤:
CPU将地址A放在系统总线上,I/O桥将信号传递到存储器总线。其次主存感觉到存储器总线上的地址信号,从存储器总线上读出地址,从DRAM取出数据字,并将数据写道存储器总线。
I/O桥将存储器总线信号翻译成系统总线信号,然后沿着系统总传递。
最后,CPU感觉到系统总线上的数据,并将数据拷贝到相应的寄存器上。
写事务三个步骤:
CPU将地址放到系统总线上,存储器从存储总线上读出地址,并等待数据到达。
CPU将相应寄存器的数据字拷贝到系统总线。
主存从存储器总线上读出数据字,并将这些位存储到DRAM中。
- 6.1.2 磁盘存储
磁盘是由一个或多个盘片组成,他们被封装在一个密封的包装里,每个盘片有两个表面,每个表面有一组成为磁道的同心圆,每个磁道被划分为一组扇区,每个扇区包含相等数量的数据位。
磁盘容量=扇区字节数扇区数磁道数表面数盘片数
Taccess=Tavg seek +Tavg rotation +Tavg transfer
4.连接到I/O设备
外围设备通过I/O总线连接到CPU和主存。
通用串行总线控制器是连接到USB设备的中转机构。USB是广泛使用的一个标准。
图形卡(或适配器)也连接I/O总线上。
主机总线适配器将一个或者多个磁盘连接在I/O总线上,使用的是一个特别的主机总线接口定义的通信协议。
访问磁盘
CPU使用一种称为存储器映射I/O的技术来向I/O设备发出命令,在使用存储映射I/O的系统中,地址空间有一块地址是为与I/O设备通信保留的。每个这样的地址称为端口。当一个设备连接到总线时,它与一个或者多个端口相关联。
磁盘读
第一条指令是发送一个命令字,告诉磁盘发起一个读,同时还发送了其它的参数。
第二条指令应该读的逻辑块号。
第三条指令指明应该存储盘扇区的内容的主存地址。
逻辑块号翻译一个扇区地址,然后将内容传送到主存,而不需要CPU干涉,这个过程称为直接存储器访问。这种数据传送称为DMA传送。
磁盘扇区的被容被安全存储在主存以后,磁盘控制器通过给CPU发送一个中断信号来通知CPU。
- 6.2 局部性
良好的计算机程序具有良好的局部性。
局部性有两种不同的形式:时间局部性和空间局部性。
时间局部性:被引用过一次的寄存器位置,在不久的将来多次被引用。
空间局部性:如果一个存储器位置被引用了一次,那么很可能在不远的将来引用附近的一个存储器位置。
- 6.2.1、对程序数据引用的局部性
步长为k的引用模式:一个连续变量中,每隔k个元素进行访问,就被称为步长为k的引用模式。
步长为1的引用模式:就是顺序访问一个向量的每个元素,有时也被称为顺序引用模式,它是程序中 空间局部性常见和重要的来源。一般来说,随着步长增加,空间局部性下降。
- 6.2.2、取指令的局部性
程序指令是存放在存储器中的,CPU必须取出(读出)这些指令。
代码区别于程序数据的是在运行时是不能被修改的。
- 6.2.3、局部性小结
一个程序中局部性的简单原则:
重复引用同一个变量的程序有良好的时间局部性
对于具有步长为k的引用模式的程序,步长越小,空间局部性越好
对于取指令来说,循环有好的时间和空间局部性。循环体越小,循环迭代次数越多,局部性越好。
- 6.3存储器层次结构
用相互补充的性质想到的一种组织存储器系统的方法:存储器层次结构。一般而言,从高层往底层走,存储设备变得更慢、更便宜和更大。
即:每层存储设备都是下一层的“缓存”
- 6.3.1 存储器层次结构中的缓存
高速缓存是一个小而快速的存储设备,作为存储在更大、也更慢的设备中的数据对象的缓冲区域。使用高速缓存的过程称为缓存。
存储器层次结构的中心思想是:层次结构中的每一层都缓存来自较低一层的数据对象。
第k+1层的存储器被划分为连续的数据对象片,称为块。每个块都有唯一的地址和名字。类似第k层也被划分为较少的块的集合,块的大小与k+1层是一样的,第k层的缓存包含第k+1层块的一个子集的拷贝。
数据总是以块大小为传送单元在第k层与第k+1层之间来回拷贝。任一对相邻的层次之间块大小是固定的,但是其他的层次对之间可以有不同的块大小。
缓存命中:当程序需要第k+1层的某个数据对象d时,首先在当前存储在第k层的一个块中查找d,如果d刚好缓存在第k层中,就称为缓存命中。该程序直接从第k层读取d,比从第k+1层中读取d更快。
缓存不命中:即第k层中没有缓存数据对象d。这时第k层缓存会从第k+1层缓存中取出包含d的那个块。如果第k层缓存已满,就可能会覆盖现存的一个块。
决定该替换哪个块又缓存的替换策略控制,如随机替换策略,最近最少被使用LRU替换策略。
缓存不命中的种类
1、强制性不命中/冷不命中
第k层的缓存为空(称为冷缓存),任何访问都会不命中。这种通常是短暂的事件
2、冲突不命中
放置策略为将第k+1层的块限制放置在第k层块的一个小的子集中。
3、容量不命中
当工作集的大小超过缓存的大小时,缓存会经历容量不命中,就是说缓存太小了,不能处理这个工作集。
缓存管理
存储器层次结构的本质是每一层存储设备都是较低一层的缓存。在每一层上,某种形式的逻辑必须管理缓存,而管理缓存的逻辑可以是硬件、软件,或者两者的结合。
- 6.3.2存储器层次结构概念小结
基于缓存的存储器层次结构行之有效,因为较慢的存储设备更便宜。
利用时间局部性
利用空间局部性
- 6.4 高速缓存存储器
CPU和主存之间差距太大,插入一个小的SRAM高速缓存存储器,称为L1高速缓存:2-4个时钟周期。L2高速缓存:10个时钟周期。L3高速缓存:30~40个时钟周期
- 6.4.1通用的高速缓存存储器结构
高速缓存的结构可以用元组(S,E,B,m)来描述:
S:这个数组中有S=2^s个高速缓存组
E:每个组包含E个高速缓存行
B:每个行是由一个B=2^b字节的数据块组成的
m:每个存储器地址有m位,形成M=2^m个不同的地址
有效位:每个行有一个有效位,指明这个行是否包含有意义的信息
标记位:t=m-(b+s)个,唯一的标识存储在这个高速缓存行中的块
组索引位:s
块偏移位:b
高速缓存的结构将m个地址划分成了t个标记位,s个组索引位和b个块偏移位。
高速缓存的大小/容量C指所有块的大小的和,不包括标记位和有效位,所以:
C=SEB
- 6.4.2直接映射高速缓存
每个组只有一行的高速缓存称为直接映射高速缓存。
高速缓存确定一个请求是否命中,然后抽取出被请求的字的过程:1、组选择2、行匹配3、字抽取
直接映射高速缓存中的组选择
从地址中抽取s个组索引位,解释成一个对应于一个组号的无符号整数,选择相应组。
直接映射高速缓存中的行匹配
直接映射高速缓存每个组只有一行,当设置了有效位并且行中的标记与地址中的标记相匹配时,我们得到缓存命中。
直接映射高速缓存中的字选择
块偏移位b提供了所需要的字的第一个字节的偏移。
直接映射高速缓存中不命中时的行替换
缓存不命中时,需要从下一层取出被请求的块存储在组索引位指示的组中的高速缓存行中。若组中都是有效行时。需要替换,直接映射高速缓存每组只有一行,就可直接替换。
综合:运行中的直接映射高速缓存
直接映射高速缓存中的冲突不命中
当程序访问大小为2的幂的数组时,直接映射高速缓存中通常会发生冲突不命中。
- 6.4.3 组相联高速缓存
一个 1<E<C/B 的高速缓存通常称为E路组相联高速缓存。
组相联高速缓存中的组选择
与直接映射高速缓存的组选择一样,组索引位标识组
组相联高速缓存中的行匹配和字选择
形式是(key, value),用key作为标记和有效位去匹配,匹配上了之后返回value。
重要思想:组中的任意一行都可以包含任何映射到这个组的存储器块,所以告诉缓存必须搜索组中的每一行。
判断匹配的标准依旧是两个充分必要条件:
1.有效
2.标记匹配
四、组相联高速缓存中不命中时的行替换
缓存不命中时,高速缓存从存储器中取出包含这个字的块,替换行时,如果没有空行,按照替换策略替换。复杂的局部性利用了局部性原理,以使在比较近的将来引用被替换的行的几率最小。
- 6.4.4 全相联高速缓存(E=C/B)
一个全相联高速缓存由一个包含所有高速缓存行的组(即E=C/B)组成的。
全相联高速缓存中的组选择
只有一个组,地址中没有组索引位,地址只被划分成了一个标记和一个块偏移。
全相联高速缓存中的行匹配和字选择
与前面的一样,区别主要是规模大小的问题
全相联高速缓存只适合做小的高速缓存,例如虚拟存储器系统中的翻译备用缓存器TLB。
- 6.4.5 有关写的问题
更新低一层中的拷贝的方法:
(1)直写:立即将w的高速缓存块协会到紧接着的低一层中
缺点是每次写都会引起总线流量。
(2)写回:只有当替换算法要驱逐更新过的块时,才写到紧接着的低一层中
优点:由于局部性,写回能显著的减少总线流量
缺点:增加了复杂性,必须为每个高速缓存行维护一个额外的修改位
写不命中的处理方法
(1)写分配:加载相应的低一层中的块到高速缓存中,然后更新这个高速缓存块。
(2)非写分配:避开高速缓存,直接把这个字写在低一层中。
- 6.4.6 真实的高速缓存层次结构:
既保存指令又包括数据的高速缓存称为统一的高速缓存。
- 6.4.7 高速缓存参数的性能影响
有许多指标来衡量高速缓存的性能:
不命中率
命中率
命中时间
不命中处罚
代码托管
结对搭档
感想
本次的内容是学习第六章,学习了各种不同的存储器,了解了不同级别的存储器之间的区别,理解为什么计算机最后采用金字塔形状的存储结构。
学习进度条
代码行数(新增/累积) 博客量(新增/累积) 目标 5000行 30篇 第一周 6/6 1/1 第三周 150/156 2/3 第四周 77/233 1/4 第七周 1988/2221 2/6 第九周 642/2863 2/6 参考资料
- 《深入理解计算机系统V3》学习指导