zoukankan      html  css  js  c++  java
  • 20145203 《信息安全系统设计基础》第七周学习总结

    20145203 《信息安全系统设计基础》第七周学习总结

    第六章 存储器层次结构

    教材学习内容总结

    绪论

    存储器系统是一个具有不同容量、成本和访问时间的存储设备的层次结构。

    第一节 存储技术

    一、随机访问存储器(RAM)

    RAM分类:

    静态的SRAM-更快,更贵,作为高速缓存存储器,CPU片上或片下

    动态的DARM-作为主存以及图形系统的帧缓冲区

    1.传统的DRAM

    (1)超单元

    ①芯片中的单元位被分为d个超单元,每个超单元有w个DRAM单元组成,一个dxw的DRAM总共存储了dw位信息。

    ②超单元被组织成一个r行c列的长方形,即rc=d。

    ③每个超单元有形如(i, j)的地址,i表示行,j表示列。

    (2)信息的流入流出

    信息通过引脚流入流出芯片,每个引脚携带一个1位的信号。

    (3)存储控制器

    (这个电路可以一次传入或传出w位。)

    ① RAS-行访问选通脉冲-行地址i

    ②CAS-列访问选通脉冲-列地址j

    ③AS和CAS请求,共享相同的DRAM地址引脚

    【具体过程范例】

    目的:读取(i, j)处的内容
    步骤:
    1.存储控制器发送行地址i
    2.DRAM响应,将行i的整个内容拷贝到一个内部行缓冲区
    3.存储控制器发送列地址j
    4.DRAM响应,从行缓存区中拷贝出超单元(i, j)中的内容,并把它们发送到存储控制器。
    

    2.存储器模块

    DRAM芯片包装在存储器模块中,是插在主板的扩展槽上的。

    ①168个引脚的双列直插存储器模块-以64位为块传送或传出数据。

    ②72个引脚的单列直插存储器模块-以32位为块传送数据。

    3.增强的DRAM

    快页模式-FPM DRAM:允许对同一行连续的访问可以直接从行缓冲区得到服务。

    扩展数据输出-EDO DRAM:允许单独的CAS信号在时间上靠的更紧密一点。

    同步-SDRAM:用与驱动存储控制器相同的外部时钟信号的上升沿来代替许多这样的控制信号-比异步的更快。

    双倍数据速率同步-DDR SDRAM:通过使用两个时钟沿作为控制信号,从而使DRAM的速度翻倍。分类:DDR(2位),DDR2(4位),DDR3(8位)

    RDRAM:最大带宽较高。

    视频-VRAM:用在图形系统的帧缓存区中,思想类似FPM DRAM,区别:

    	1.VRAM的输出是通过依次对内部缓冲区的整个内容进行移位得到的
    
    	2.VRAM允许对存储器并行的读和写。
    

    4.非易失性存储器——ROM

    RAM断电丢失数据,是易失的

    ROM是非易失的,统称为只读存储器

    (1)分类

    ①PROM-可编程ROM,只能被编程一次

    ②EPROM-可擦写可编程ROM,能够被擦除和编写的次数的数量级大概为1000次

    ③EEPROM,电子可擦除PROM,能够被编程的次数的数量级在10的五次方。

    (2)闪存FLASH

    基于EEPROM,为大量的电子设备提供快速而持久的非易失性存储。

    存在于:数码相机、手机、音乐播放器、PDA、笔记本、台式机、服务器计算机系统

    (3)固件

    存储在ROM设备中的程序通常被称为固件,当一个计算机系统通电以后,他会运行存储在ROM中的固件。

    5.访问主存

    (1)总线

    总线是一组并行的导线,能携带地址、数据和控制信号。

    总线分类:

    a.系统总线——连接CPU和I/O桥
    b.存储器总线——连接I/O桥和主存
    c.I/O总线

    I/O桥将系统总线的电子信号翻译成存储器总线的电子信号,也将系统总线和存储器总线连接到I/O总线。

    二、磁盘存储

    1.磁盘构造

    • 盘片
    • 表面:每个盘片有两个表面
    • 主轴:盘片中央,可旋转
    • 旋转速率:通常5400~15000/min
    • 磁道:同心圆们
    • 扇区:每个磁道被划分为一组扇区
    • 数据位:每个扇区包含相等数量的~,通常为512字节
    • 间隙:存储用来标识扇区的格式化位
    • 磁盘驱动器-磁盘-旋转磁盘
    • 柱面:所有盘片表面上到主轴中心的距离相等的磁道的集合。

    2.磁盘容量——一个磁盘上可以记录的最大位数

    (1)影响因素:

    ①记录密度:磁道一英寸的段中可以放入的位数。

    ②磁道密度:从盘片中心出发半径上一英寸的段内可以有的磁道数。

    ③面密度:记录密度和磁道密度的乘积。

    提高面密度即可提高容量。

    (2)现代大容量磁盘——多区记录技术

    ①将柱面的集合分割成不相交的子集合(记录区),每个区包含一组连续的柱面;

    ②一个区中的每个柱面的每条磁道都有相同数量的扇区,这个扇区的数量由该区中最里面的磁道所能包含的扇区数确定

    注意:软盘仍是使用老式方法,每条磁道的扇区数是常数

    (3)计算公式:

    3.磁盘操作

    磁盘用读/写头来读写储存在磁性表面的位,以扇区大小的块来读写数据。

    访问时间的分类:

    (1)寻道时间——移动传动臂所用的时间。

    依赖于读/写头以前的位置和传动臂在盘面上移动的速度。

    通常为3-9ms,最大可达20ms。

    (2)旋转时间——驱动器等待目标扇区的第一个位旋转到读/写头下

    依赖于盘面位置和旋转速度。

    最大旋转延迟=1/RPM X 60secs/1min (s)=(60secs/n RPM)*1000ms/sec

    平均旋转时间是最大值的一半。

    (3)传送时间——依赖于旋转速度和每条磁道的扇区数目

    平均传送时间= 1/RPM x 1/(平均扇区数/磁道) x 60s/1min

    访问一个磁盘扇区内容的平均时间为平均寻道时间,平均旋转延迟和平均传送时间之和。

    总结:

    ①主要时间是寻道时间和旋转延迟。

    ②将寻道时间x2是估计磁盘访问时间的简单而合理的方法。

    3.逻辑磁盘块

    盘面,磁道,扇区,这个三元组唯一的标识了对应的物理扇区。

    4.连接到I/O设备(I/O总线)

    I/O总线连接了CPU,主存和I/O设备。

    ①通用串行总线USB:2.0最大带宽60MB/S,3.0最大带宽600MB/S

    ② 图形卡(适配器):CPU在显示器上画像素

    ③主机总线适配器

    5.访问磁盘

    DMA传送:直接存储器访问
    ——设备可以自己执行读或者写总线事务,而不需要CPU干涉的过程。

    三、固体磁盘

    固态硬盘:是一种基于闪存的存储技术。(区别于旋转磁盘:固态磁盘没有移动的部分。)

    1.组成

    一个SSD包由一个或多个闪存芯片和闪存翻译层组成:

    ①闪存芯片——对应旋转磁盘中机械驱动器
    
    ②闪存翻译层(硬件/固件设备)——对应磁盘控制器
    

    2.读/写

    (读和写的性能差别是由底层闪存基本属性决定)

    ①顺序读写:速度相当,顺序读比顺序写稍微快一点

    ②随机读写:写比读慢一个数量级

    ③闪存:一个闪存由B个块的序列组成,每个块由P页组成。通常页的大小是5124kb,块是由32128页组成的,块的大小为16kb~512kb。

    ④数据是以为单位读写的。

    3.优缺点:

    优点:

    ①由半导体构成,没有移动的零件

    ②随机访问时间比旋转磁盘要快

    ③能耗更低

    ④更结实

    缺点:

    ①更容易磨损

    ②更贵

    四、存储技术优势

    ①不同的存储技术有不同的价格和性能折中

    ②不同存储技术的价格和性能属性以截然不同的速率变化着

    ③增加密度从而降低成本比降低访问时间更容易

    ④DRAM和磁盘的性能滞后于cpu的性能

    第二节 局部性

    局部性原理:一个编写良好的计算机程序,常常倾向于引用临近于其他最近引用过的数据项的数据项,或者最近引用过的数据项本身。(局部性好的程序要比局部性差的程序运行的更快)

    分类:

    • 时间局部性
    • 空间局部性

    应用:

    1.硬件层:

    通过引入高速缓存存储器来保存最近被引用的指令和数据项,从而提高对主存的访问速度。

    2.操作系统级:

    系统使用主存作为虚拟地址空间最近被引用块的高速缓存,用主存来缓存磁盘文件系统中最近被使用的磁盘块

    3.应用程序中:

    Web浏览器将最近被引用的文档放在本地磁盘上。

    一、对程序数据引用的局部性

    步长为1的引用模式:

    ①就是顺序访问一个向量的每个元素,有时也被称为顺序引用模式,它是程序中 空间局部性常见和重要的来源

    ②一般来说,随着步长增加,空间局部性下降。

    ③因为循环体会被执行多次,所以它也有很好的时间局部性。

    注意代码区别于程序数据的一个重要属性是:在运行时它是不能被修改的。

    二、局部性小结

    量化评价一个程序中局部性的简单原则:

    ①重复引用同一个变量的程序有良好的时间局部性

    ②对于具有步长为k的引用模式的程序,步长越小,空间局部性越好

    ③对于取指令来说,循环有好的时间和空间局部性。循环体越小,循环迭代次数越多,局部性越好。

    第三节 存储器层次结构

    注意:每层存储设备都是下一层的“缓存”

    一、缓存

    ①高速缓存:是一个小而快速的存储设备,它作为存储在更大、更慢的设备中的数据对象的缓冲区域。

    ②缓存:使用高速缓存的过程称为缓存。

    ③数据总是以块大小为传送单元在第k层与第k+1层之间来回拷贝。任一对相邻的层次之间块大小是固定的,但是其他的层次对之间可以有不同的块大小。

    ④一般来说:层越低,块越大。

    1.缓存命中

    当程序需要第k+1层的某个数据对象d时,首先在当前存储在第k层的一个块中查找d,如果d刚好缓存在第k层中,就称为缓存命中。

    该程序直接从第k层读取d,比从第k+1层中读取d更快。

    2.缓存不命中

    即第k层中没有缓存数据对象d,这时第k层缓存会从第k+1层缓存中取出包含d的那个块。如果第k层缓存已满,就可能会覆盖(替换/驱逐)现存的一个块

    替换策略:

    ①随机替换策略-随机牺牲一个块

    ②最近最少被使用替换策略LRU-牺牲最后被访问的时间距离现在最远的块。

    3.缓存不命中的种类

    ①强制性不命中/冷不命中:即第k层的缓存是空的(称为冷缓存),对任何数据对象的访问都不会命中。

    注意: 通常是短暂事件,不会在反复访问存储器使得缓存暖身之后的稳定状态中出现。

    ②冲突不命中:由于一个放置策略:将第k+1层的某个块限制放置在第k层块的一个小的子集中,这就会导致缓存没有满,但是那个对应的块满了,就会不命中。

    ③容量不命中:当工作集的大小超过缓存的大小时,缓存会经历容量不命中,就是说缓存太小了,不能处理这个工作集。

    4.缓存管理

    某种形式的逻辑必须管理缓存,而管理缓存的逻辑可以是硬件、软件,或者两者的集合。

    二、存储器层次结构概念小结

    第四节 高速缓存存储器

    分类:

    ①L1高速缓存:位于CPU寄存器文件和主存之间,访问速度2-4个时钟周期

    ②L2高速缓存:位于L1高速缓存和主存之间,访问速度10个时钟周期

    ③L3高速缓存:位于L2高速缓存和主存之间,访问速度30或40个时钟周期

    一、通用的高速缓存存储器结构

    高速缓存是一个高速缓存组的数组,它的结构可以用元组(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个块偏移位。

    1.高速缓存的大小/容量C

    指所有块的大小的和,不包括标记位和有效位,所以:

    C=S*E*B
    

    二、直接映射高速缓存

    根据E( 每个组的高速缓存行数)划分高速缓存为不同的类,E=1的称为直接映射高速缓存,以此为例:

    高速缓存确定一个请求是否命中,然后取出被请求的字的过程,分为三步:

    ①组选择
    
    ②行匹配
    
    ③字抽取
    

    1.组选择

    高速缓存从w的地址中间抽取出s个组索引位

    组索引位:一个对应于一个组号的无符号整数。
    

    类比:高速缓存-关于组的一位数组,组索引位就是到这个数组的索引。

    2.行匹配

    注意,判断缓存命中有两个充分必要条件:

    ①该行设置了有效位

    ②高速缓存行中的标记和w的地址中的标记相匹配

    3.字选择

    同样的一个类比:块-关于字节的数组,字节偏移是到这个数组的一个索引。

    4.缓存不命中时的行替换

    ——用新取出的行替换当前的行。。

    5.后运行中的直接映射高速缓存

    ①标记位和索引位连起来唯一的标识了存储器中的每个块

    ② 映射到同一个高速缓存组的块由标记位唯一地标识

    6.直接映射高速缓存中的冲突不命中

    (1)抖动:

    ——高速缓存反复的加载和驱逐相同的高速缓存块的组

    (2)原因:

    这些块被映射到了同一个高速缓存组。

    (3)解决方法:

    在每个数组的结尾放B字节的填充(B字节是一个块的长度,一行是一个块,相当于分开了行)从而使得他们映射到不同的组。

    三、组相联高速缓存

    条件:E路组相联高速缓存:1<E<C/B

    1.组选择

    同直接映射高速缓存

    2.行匹配和字选择

    形式是(key, value),用key作为标记和有效位去匹配,匹配上了之后返回value。

    注意:组中的任意一行都可以包含任何映射到这个组的存储器块,所以告诉缓存必须搜索组中的每一行。

    判断匹配的标准依旧是两个充分必要条件:

    1.有效
    2.标记匹配
    

    3.行替换

    有空行替换空行,没有空行,应用替换策略:

    四、全相联高速缓存

    条件:E=C/B

    1.组选择

    只有一个组,默认组0,没有索引位,地址只被划分成了一个标记和一个块偏移。

    2.行匹配和字选择

    同组相联。

    只适合做小的高速缓存。

    五、写

    1.写命中时,更新低一层中的拷贝的方法:

    (1)直写,立即将w的高速缓存块协会到紧接着的低一层中

    缺点:每次写都会引起总线流量。

    (2)写回,只有当替换算法要驱逐更新过的块时,才写到紧接着的低一层中
    • 优点:符合局部性原理,显著的减少总线流量

    • 缺点:增加了复杂性,必须为每个高速缓存行维护一个额外的修改位

    2.写不命中的处理方法

    (1)写分配---通常写回对应

    加载相应的低一层中的块到高速缓存中,然后更新这个高速缓存块。

    (2)非写分配---通常直写对应

    避开高速缓存,直接把这个字写在低一层中。

    六、真实的高速缓存层次结构:

    高速缓存既保存数据,也保存指令。

    ①只保存指令的:i-cache

    ②只保存程序数据的:d-cache

    ③既保存指令又保存数据的:统一的高速缓存

    七、高速缓存参数的性能影响

    1.性能:

    ①不命中率 = 不命中数量/引用数量

    ②命中率 = 1 - 不命中率

    ③命中时间

    ④不命中处罚:因为不命中所需要的额外的时间

    2.具体影响:

    ①高速缓存大小:命中率+,命中时间+

    ②块大小:空间局部性+,命中率+,高速缓存行数-,时间局部性-,不命中处罚+

    ③相联度:E值大,抖动-,价格+,命中时间+,不命中处罚+,控制逻辑+【折中为不命中处罚低的,相联度低,不命中处罚高的,使用高相联度】

    ④写策略:越往下,越可能用写回而不是直写

    第五节 编写高速缓存友好的代码

    1.基本方法:

    ①让最常见的情况运行的快

    ②在每个循环内部缓存不命中数量最小

    2.重要问题:

    ①对局部变量的反复引用是好的(时间局部性)

    ②步长为1的引用模式是好的(空间局部性)

    第六节 存储器山

    每台计算机都有表明他存储器系统的能力特色的唯一的存储器山。——就是把存储器系统的性能用关于时间和空间局部性的山表示。

    想要达成的目的:使得程序运行在山峰而不是低谷

    目标:利用时间局部性,使得频繁使用的字从L1中取出;利用空间局部性,使得尽可能多的字从一个L1高速缓存行中访问到。

    教材学习中的问题和解决过程

    问题1:为什么用中间位做索引?

    解答:参看415页习题6.12和416页旁注。高位的话,任何时刻高速缓存都只保存着一个块大小的数组内容。

    问题2:在这一节中好几个概念很容易混淆,在做题时就会产生错误。区分如下:
    解答:

    本周代码托管链接

    代码链接

    其他(感悟、思考等,可选)

    通过这一章的学习我对存储器的模式有了更深入的了解。但是做习题的过程中发现还不够熟练,对知识的掌握不牢靠需要反复回去翻书,只能说过了一遍知识点还没能完全消化,还是需要多做实践在实践中复习和巩固!

    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
    目标 5000行 30篇 400小时
    第一周 150/150 1/2 20/20
    第二周 200/350 1/2 24/44
    第三周 150/500 1/3 20/64
    第五周 300/800 1/4 15/79
    第六周 500/1300 1/5 20/99
    第七周 200/1500 1/6 21/120

    参考资料

  • 相关阅读:
    Spring URL重写
    DOUBLE精度问题
    激光推送一
    log4j打印debug日志问题
    dpkg:处理 xxx (--configure)时出错解决办法,也可用于卸载软件出错的情况
    Ubuntu中配置tomcat
    Ubuntu16.04安装Eclipse
    删除mysql数据库后django重建数据库
    MySQL修改root密码
    django1.9和mysql
  • 原文地址:https://www.cnblogs.com/GZSdeboke/p/6014312.html
Copyright © 2011-2022 走看看