20145221 《信息安全系统设计基础》第7周学习总结
存储器层次结构
存储技术
随机访问存储器
- 随机访问存储器分为:静态的SRAM、动态的DRAM
- 静态RAM:
- SRAM的特点:存储器单元具有双稳态特性,只要有电就会永远保持它的值,干扰消除时,电路就会恢复到稳定值。
- 动态RAM:
- DRAM的特点:每一位的存储是对一个电容的充电;对干扰非常敏感。
- 用途:数码照相机和摄像机的传感器
- DRAM存储不稳定的应对机制:
- 存储器系统必须周期性地通过读出,或者重写来刷新存储器的每一位;
- 使用纠错码
- SRAM和DRAM的区别
- 只要有电,SRAM就会保持不变,而DRAM需要不断刷新;
- SRAM比DRAM快;
- SRAM对光和电噪声等干扰不敏感;
- SRAM比DRAM需要使用更多的晶体管,所以更昂贵
- 传统的DRAM
- DRAM芯片中的单元(位)被分成了d个超单元,每个超单元都由w个DRAM单元组成, 一个d*w的DRAM共存储dw位信息。超单元被组织成一个r行c列的长方形阵列,rc=d。每个超单元的地址用
(i,j)
来表示(从零开始)。设计成二维矩阵是为了降低芯片上地址引脚的数量。 - 信息通过称为引脚的外部连接器流入/流出芯片,每个引脚携带一个1位信号。
- 每个DRAM信号被连接到称为存储控制器的电路,电路每次传输量为8位。行地址i,RAS请求;列地址j,CA
- 请求共享相同的DRAM地址引脚。组织成二维阵列而不是线性数组的一个原因是降低芯片上地址引脚的数量。
二维阵列阻止的缺点是必须分两步发送地址,这增加了访问时间。
- DRAM芯片中的单元(位)被分成了d个超单元,每个超单元都由w个DRAM单元组成, 一个d*w的DRAM共存储dw位信息。超单元被组织成一个r行c列的长方形阵列,rc=d。每个超单元的地址用
- 存储器模块
- 双列直插存储器模块(DIMM):168个引脚,以64位为块传入/传出数据到存储控制器。
- 单列直插存储器模块(SIMM):72个引脚,以32位为块传入/传出数据到存储控制器。
- 增强的DRAM
- 快页模式DRAM(FPM DRAM):异步控制信号,允许对同一行连续的访问可以直接从行缓冲区得到服务。
- 扩展数据输出DRAM(EDO DRAM):异步控制信号,允许单独的CAS信号在时间上靠的更紧密一点
- 同步DRAM(SDRAM):同步的控制信号,比异步的快
- 双倍数据速率同步DRAM(DDR SDRAM):使用两个时钟沿作为控制信号,使DRAM速度翻倍。
- Rambus DRAM(RDRAM):一种私有技术
- 视频RAM(VRAM):用在图形系统的帧缓冲区中。
- 非易失性存储器
- 存储在ROM中的程序通常称为固件。
- 可编程ROM(PROM):只能被编程一次
- 可擦写可编程ROM(EPROM):使用紫外线实现
- 电子可擦除PROM(EEROM):使用印制电路卡实现
- 闪存(FM):非易失性存储设备
- 访问主存
- 读事务:从主存传送数据到CPU
- 写事务:从CPU传送数据到主存
- 总线:一组并行的导线,能携带地址、数据和控制信号。
- 系统总线:连接总线接口和I/O桥
- 存储器总线:连接I/O桥和主存
磁盘存储
- 磁盘构造:磁盘由盘片构成,表面覆盖着磁性记录材料,中央有一个可以旋转的主轴 ,旋转速率大约为5400-15000每分钟。磁盘的每个表面是一组称为磁道的同心圆组成,每个磁道被划分为一组扇区,扇区之间由一些间隙隔开,间隙存储用来标识扇区的格式化位。
- 磁盘容量由以下技术因素决定:
- 记录密度(位/英寸):磁道一英寸的段中可以放入的位数。
- 磁道密度(道/英寸):从盘片中心出发半径上一英寸的段内可以有的磁道数
- 面密度(位/平方英寸):记录密度与磁道密度的乘积。
- 现代大容量磁盘使用一种称为多区记录的技术,柱面的集合被分割称为不相交的子集合,称为记录区,每个区包含一组连续的柱面。
- 磁盘操作:磁盘用读/写头来读写存储在磁性表面的位,而读写头连接到一个传动臂一端,通过移动转动臂将读写头定位在磁道上的机械运动称为寻道。
- 磁盘以扇区大小的块来读写数据,对扇区的访问时间有三个主要的组成部分:
- 寻道时间:转动臂将读/写头定位到包含目标扇区的磁道上所需时间。
- 旋转时间:驱动器等待目标扇区的第一个位旋转到读/写头下的时间。最大为:
- 平均旋转时间是Tmax的一半。
- 传送时间:读写并传送该扇区内容的时间。平均传送时间为:
- 逻辑磁盘块:
- 现代磁盘将盘面的构造视为一个B个扇区大小的逻辑块序列,磁盘控制器维护着逻辑块号和实际磁盘扇区之间的映射关系。逻辑块号可识别为一个盘面、磁道、扇区三元组,唯一的标识了相对应的物理扇区。
- 内存可以看成字节数组、磁盘可以看成块数组。
- I/O总线连接了CPU,主存和I/O设备
固态硬盘
- 固态硬盘是一种基于闪存的存储技术。一个硬盘包由一个或者多个闪存芯片和内存翻译层组成,闪存芯片替代旋转磁盘中的机械驱动器,而闪存翻译层将对逻辑块的请求翻译成对底层物理设备的访问
- SSD比旋转磁盘
- 优点:随机访问时间比旋转磁盘块,能耗更低,更结实。
- 缺点:闪存翻译层中的平均磨损逻辑试图通过将擦除平均分布在所有的块上来最大化每个块的寿命。
存储技术趋势
- 不同的存储技术有不同的价格和性能折中。
- 不同存储技术的价格和性能属性以截然不同的速率变化着
- DRAM和磁盘的性能滞后于CPU的性能。
局部性
- 局部性原理:一个编写良好的计算机程序倾向于引用邻近于其他最近引用过的数据项,或者最近引用过的数据项本身。有良好局部性的程序比局部性差的程序运行的更快,在硬件层引入高速缓存存储器就体现了局部性原理。
对程序数据引用的局部性
- 时间局部性(temporal locality):被引用过一次的存储器位置在未来会被多次引用(通常在循环中)。
- 空间局部性(spatial locality):如果一个存储器的位置被引用,那么将来他附近的位置也会被引用。
- 一个连续向量中,每隔k个元素进行访问,被称为步长为k的引用模式,具有步长为1的引用模式称为顺序引用模式,随着步长增加空间局部性下降。
- 双重嵌套循环按照行优先顺序读取数组元素。(因为C数组在存储器中是按照行顺序来存放的)
取指令的局部性
- 程序指令是存放在存储器中的,CPU读取这些指令的过程中评价一个程序关于取指令的局部性。
- 代码区别与程序数据的一个重要属性就是在运行时指令是不能被修改的。
局部性小结
- 重复引用同一个变量的程序有良好的时间局部性
- 对于具有步长为k的引用模式的程序,步长越小,空间局部性越好。
- 对于取指令来说,循环具有良好的时间和空间局部性。循环体越小,迭代次数越多局部性越好。
存储器层次结构
存储器层次结构中的缓存
- 高速缓存确定一个请求是否命中,然后抽取出被请求的字的过程,分为三步
- 1、组选择
- 2、行匹配
- 3、字抽取
- 直接映射高速缓存中不命中时,每个组只包含有一行,替换策略是:用心取出的行替换当前的行。
- 一个
1 < E < C/B
的告诉缓存通常称为E路组相联高速缓存
存储器层次结构概念小结
- 存储技术:不同的存储技术的访问时间差异很大,速度较快的技术每字节的成本要比速度较慢的技术高,而且容量较小,CPU和主存之间的速度差距在增大。
- 计算机软件:一个编写良好的程序倾向于展示出良好的局部性。
高速缓存存储器
通用的高速缓存存储器结构
- 一个计算机系统每个存储地址有
m
位,形成M=2^m
个不同的地址。 - 高速缓存被组织成一个有
S=2^s
个高速缓存组的数组,每个组包含E
个高速缓存行,每个行是由一个B=2^b字节的数据块、一位有效位以及t=m-(b+s)
个标记位组成,唯一标识存储在这个高速缓存行中的块。 - 高速缓存的结构用元组
(S,E,B,m)
来描述,高速缓存的大小C = S * E * B
。
直接映射高速缓存
- 直接映射高速缓存:每个组只有一行的高速缓存。
- 组选择:
- 高速缓存从w的地址中间抽取出s个组索引位
- 组索引位:一个对应于一个组号的无符号整数。
- 行匹配:
- 判断缓存命中的两个充分必要条件:该行设置了有效位;高速缓存行中的标记和w的地址中的标记相匹配
- 字选择:确定所需要的字在块中是从哪里开始的。
组相联高速缓存
- 组相连高速缓存中的组选择:与直接映射高速缓存中的组选择一样,组索引位标识组。
- 组相连高速缓存中的行匹配和字选择:把每个组看做一个小的相关联存储器,是一个(key,value)对的数组,
以key为输入,返回对应数组中的value值。高速缓存必须搜索组中的每一行,寻找有效的行其标记与地址中的相匹配。 - 组相连高速缓存中不命中时的行替换:最简单的替换策略是随机选择要替换的行,其他复杂的策略则使用了局部性原理,例如最不常使用、最近最少使用,等。
全相联高速缓存
- 全相连高速缓存中的组选择:只有一个组,没有组索引位。
- 全相连高速缓存中的行匹配和字选择:与组相连高速缓存是一样的,但规模大很多,因此只适合做小的高速缓存,例如虚拟存储系统中的翻译备用缓冲器。
有关写的问题
- 直写:
- 立即将w的高速缓存块写回到紧接着的第一层中
- 缺点是每次写都会引起总线流量。
- 写回:
- 只有当替换算法要驱逐更新过的块时,才能把它写到紧接着的低一层中,由于局部性,写回能显著减少总线流量。
- 缺点是增加了复杂性。
- 另一个问题是如何处理写不命中。
- 写分配:加载相应的低一层中的块到高速缓存中,然后更新这个高速缓存块。 缺点是每次不命中都会导致一个块从低一层传送到高速缓存。
- 非写分配:避开高速缓存,直接把这个字写到低一层中。
高速缓存参数的性能影响
- 不命中率:不命中数量/引用数量
- 命中率:1-不命中率
- 命中时间:从高速缓存传送一个字到CPU所需的时间,包括组选择,行匹配,字抽取的时间。
- 不命中处罚:由于不命中所需要的额外时间。
综合:高速缓存对程序性能的影响
存储器山
- 一个程序从存储系统中读数据的速率称为读吞吐量,或者读带宽,通常以兆字节每秒(MB/s)为单位。
- 读带宽的时间和空间局部性的二维函数称为存储器山。
教材学习中的问题和解决过程
本周代码托管
-
重新组织代码如下:
-
本周托管代码:
-
代码统计如下:
其他(感悟、思考等,可选)
- 存储器是系统是一个具有不同容量、成本和访问时间的存储设备的层次结构。计算机技术的成功很大程度上源自于存储技术的巨大进步。所以,学习存储器结构更清楚的了解了存储器的分类,更深入了解了数据传送的过程。
- 不过对于书中的一些概念讲解理解的还是不够透彻,要通过课后习题以及同学们的博客总结巩固巩固。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 200/200 | 2/2 | 20/20 | 学习了Linux常用命令 |
第二周 | 79/279 | 1/3 | 30/50 | 了解vim,gcc,gdb基本操作 |
第三周 | 182/461 | 1/4 | 25/75 | 更深层次了解信息处理 |
第四周 | 36/497 | 2/6 | 3/78 | 第二章知识简单的运用 |
第五周 | 194/691 | 1/7 | 28/106 | 汇编知识与了解逆向 |
第六周 | 520/1211 | 1/8 | 27/133 | Y86处理器,了解ISA抽象 |
第七周 | 85/1296 | 1/9 | 21/153 | 理解了局部性原理 |