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

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

    第6章 存储器层次结构

    存储器系统是一个具有不同容量、成本和访问时间的存储设备的层次结构。CPU寄存器保存着最常用的数据。靠近CPU的小的、快速的高速缓存存储器作为一部分存储在相对慢速的主存储器中数据和指令的缓冲区域。主存暂时存放存储在容量较大的、慢速磁盘上的数据,而这些磁盘常常又作为存储在通过网络连接的其他机器的磁盘或磁带上的数据的缓冲区域。

    6.1存储技术

    6.1.1随机访问存储器

    随机访问存储器(RAM,Random-access memory)

    • 静态RAM(SRAM)

    (1)静态RAM(SRAM)比动态RAM(DRAM)更快,但也贵很多。SRAM用来作为高速缓存存储器,即可以在CPU芯片上,也可以不在CPU芯片上。DRAM用来作为主存以及图形系统的帧缓冲区。

    (2)SRAM将每个位存储在一个双稳态存储器单元中。每个单元是用一个六晶体管电路来实现的。这个电路的一个属性是:它可以无限制地保持在两个不同的电压配置或状态之一。其他任何状态都是不稳定的——从不稳定状态开始,电路会迅速转移到两个稳定状态中的一个。

    (3)由于SRAM的双稳态特性,只要有电,它就会永远地保持它的值,即使有干扰,如电子噪音,来扰乱电压,当干扰消除时,电路也能恢复到稳定值。

    • 动态RAM(DRAM)

    (1)DRAM将每个位存储为对电容的充电。电容约为30×10-15F。

    (2)DRAM存储器单元对干扰非常敏感。

    (3)当电容的电压被扰乱之后就永远不会恢复。

    (4)优势是密集度低,成本低。

    • 传统的DRAM

    (1)DRAM的芯片中的单元被分成d个超单元,每个超单元都由w个DRAM单元组成。一个d*w的DRAM总共存储了dw位的信息。超单元被组织成一个r行c列的长方形阵列,这里rc = d。信息通过引脚的外部连接器流入和流出芯片。

    (2)信息通过称为引脚的外部连接器流入/流出芯片,每个引脚携带一个1位信号。

    (3)每个DRAM信号被连接到称为存储控制器的电路,电路每次传输量为8位。行地址i,RAS请求;列地址j,CAS请求共享相同的DRAM地址引脚。

    • 存储器模块

    (1)双列直插存储器模块(Dual Inline Memory Module,DIMM):168个管脚,它以64位为块传送数据到存储控制器和从存储控制器传出数据;

    (2)单列直插存储器模块(Single Inline Memory Module,SIMM):72个管脚,它以32位为块传送数据。

    • 增强的DRAM

    (1)快页模式DRAM:允许对同一行连续的访问可以直接从行缓冲区得到服务,避免内部行缓冲区使用一个丢弃其他的现象。

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

    (3)同步DRAM:用驱动存储控制器相同的外部时钟信号的上升沿来替代许多的异步信号,速度更快。

    (4)双倍数据速率同步DRAM:通过使用两个时钟沿作为控制信号,使得DRAM的速度翻倍。

    (5)RambusDRAM:增大了最大带宽

    (6)视频RAM:用在图形系统的帧缓冲区中,允许对存储器并行的读和写。

    • 非易失性存储器

    (1)如果断电,DRAM和SRAM都会丢失信息,非易失性存储器——只读存储器:ROM。ROM是以他们能够被重编程的次数和对他们重编程的机制来区分的。

    (2)可编程ROM(PROM):只能被编程一次。PROM每个存储单元有一种熔丝,只能用高电流熔断一次。

    (3)闪存是一个类小的非易失性存储器,基于EEPROM,支持插拨。

    (4)存储在ROM设备中的程序通常称为固件。

    • 访问主存

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

    (2)读事务(read transaction)从主存传送数据到CPU;写事务(write transcation)从CPU传送数据到主存。

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

    6.1.2磁盘存储

    • 磁盘构造:磁盘由盘片构成,表面覆盖着磁性记录材料,中央有一个可以旋转的主轴 ,旋转速率大约为5400-15000每分钟。磁盘的每个表面是一组称为磁道的同心圆组成,每个磁道被划分为一组扇区,扇区之间由一些间隙隔开,间隙存储用来标识扇区的格式化位。

    • 磁盘容量:

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

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

    面密度(位/平方英寸):记录密度与磁道密度的乘积。

    • 磁盘操作:磁盘用读/写头来读写存储在磁性表面的位,而读写头连接到一个传动臂 一端,通过移动转动臂将读写头定位在磁道上的机械运动称为寻道。磁盘以扇区大小的块来读写数据,对扇区的访问时间有三个主要的组成部分:

    • 寻道时间:转动臂将读/写头定位到包含目标扇区的磁道上所需时间。

    • 旋转时间:驱动器等待目标扇区的第一个位旋转到读/写头下的时间。最大为

    • 传送时间:读写并传送该扇区内容的时间。平均传送时间为:

    • 逻辑磁盘块:现代磁盘将盘面的构造视为一个B个扇区大小的逻辑块序列,磁盘控制器维护着逻辑块号和实际磁盘扇区之间的映射关系。逻辑块号可识别为一个盘面、磁道、扇区三元组,唯一的标识了相对应的物理扇区。操作系统是以逻辑块号为单位进行寻址操作的。

    • 连接到I/O设备:所有的I/O设备都是通过I/O总线连接到CPU和主内存。有三种不同类型:

    (1)通用串行总线:一个广泛的使用标准,用于连接各种外围I/O设备。

    (2)图形卡(或适配器):包含硬件和软件逻辑,代表CPU在显示器上画像素。

    (3)主机总线适配器: 将一个或者多个磁盘连接到I/O总线,使用一个特别的主机总线接口定义的通信协议。

    • 访问磁盘

    发起磁盘读:

    (1)第一条指令是发送一个命令字。

    (2)第二条指令指名应该读的逻辑块号。

    (3)第三条指令指明应该存储磁盘扇区内容的主存地址。

    6.1.3固态硬盘

    固态硬盘是一种基于闪存的存储技术,在某些情况下是传统旋转磁盘的极有吸引力的替代产品。 一个SSD包由一个或多个闪存芯片和闪存翻译层组成,闪存芯片——对应旋转磁盘中机械驱动器,而闪存翻译层是一个硬件/固件设备,扮演与磁盘控制器相同的角色。

    6.1.4存储技术趋势

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

    SRAM比DRAM快一点,而DRAM比磁盘要快很多。

    快速存储总是比慢速存储要贵的。SRAM每字节的造价比DRAM高,DRAM的造价又比磁盘高得多。SSD位于DRAM和旋转磁盘之间。

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

    6.2 局部性

    局部性原理:一个编写良好的计算机程序倾向于引用邻近于其他最近引用过的数据项,或者最近引用过的数据项本身。

    • 局部性有两种形式:时间局部性(temporal locality):在一个具有良好时间局部性的程序中,被引用过一次的存储器位置很可能在不远的将来再被多次引用;

    • 空间局部性(spatial locality):在一个具有良好空间局部性的程序中,如果一个存储器位置被引用了一次,那么程序很可能在不远的将来引用附近的一个存储器位置。

    6.2.1对程序数据引用的局部性

    • 程序指令是存放在存储器中的,CPU读取这些指令的过程中评价一个程序关于取指令的局部性。

    • 代码区别与程序数据的一个重要属性是:在运行时指令是不能被修改的。

    6.2.2取指令的局部性

    • 计算机程序倾向于引用邻近于其他最近引用过的数据项的数据或其本身;这种倾向性,被称为局部性原理。包括:时间局部性,空间局部性。有良好局部性的程序比局部性差的程序运行的更快。

    • 体现:在硬件层,局部性原理允许计算机设计者通过引入称为高速缓存器的小而快的存储器来保存最近被引用的指令和数据项;在操作系统级,局部性原理允许系统使用主存作为虚拟地址空间最近被使用的磁盘块。

    • 重复引用一个变量的程序具有良好的时间局部性;对于取指令来说,循环具有良好的时间和空间局部性。循环体越小,循环迭代次数越多,局部性越好。

    6.3存储器层次结构

    6.3.1存储器层次结构中的缓存

    • 存储器层次结构的中心思想是:对于每个k,位于k层的更快更小的存储设备作为位于(k+1)层的更大更慢的存储设备的缓存。数据总是以块大小作为传送单元在第k层和k+1层之间来回拷贝的。

    • 第(k+1)层的存储器被划分成连续的数据对象片,称为块;数据总是以块大小为传送单元在相邻两层之间来回拷贝的;在任何时刻,第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)层取出包含该数据的块,有可能会覆盖现有的块。覆=决定替换哪个块是由缓存的替换策略来控制的;例如,一个具有随机替换策略的缓存会随机选择;而LRU替换策略会选择被访问时间距今最远的块

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

    6.4高速缓存存储器

    6.4.1通用的高速缓存存储器结构

    6.4.2直接映射高速缓存

    每组只有一行(E=1)的高速缓存称为直接映射高速缓存。高速缓存确定一个请求是否命中,然后抽取出被请求字的过程分为三步:1)组选择,2)行匹配,3)字抽取。

    • 直接映射高速缓存中的组选择:高速缓存从要抽取的字的地址中抽取出S个组索引位,这些位被解释成一个对应于一个组号的无符号整数。

    • 直接映射高速缓存中的行匹配:当且仅当设置了有效位,而且高速缓存行标记与w的地址中的行标记相匹配时,这一行中包含w的一个拷贝。

    • 直接映射高速缓存中的字抽取:块偏移位提供了所需要的字的第一个字节的偏移。

    • 直接映射高速缓存中不命中时的行替换:需要从存储器层次结构中的下一层取出被请求的块,然后将新的块存储在组索引位指示的组中的一个高速缓存行中。

    6.4.3组相连高速缓存

    • 组相连高速缓存中的组选择:与直接映射高速缓存中的组选择一样,组索引位标识组。

    • 组相连高速缓存中的行匹配和字选择:把每个组看做一个小的相关联存储器,是一个(key,value)对的数组,以key为输入,返回对应数组中的value值。高速缓存必须搜索组中的每一行,寻找有效的行其标记与地址中的相匹配。

    • 组相连高速缓存中不命中时的行替换:最简单的替换策略是随机选择要替换的行,其他复杂的策略则使用了局部性原理,例如最不常使用、最近最少使用等。

    6.4.4全相连高速缓存

    • 全相连高速缓存中的组选择:只有一个组,没有组索引位。

    • 全相连高速缓存中的行匹配和字选择:与组相连高速缓存是一样的,但规模大很多,因此只适合做小的高速缓存,例如虚拟存储系统中的翻译备用缓冲器。

    6.4.5有关写的问题

    写回,尽可能推迟存储器更新,只有当替换算法要驱逐已更新的块时,才把它写回存储器。

    处理不命中:写分配(write-allocate),即加载相应的存储器块到高速缓存中,然后更新这个高速缓存器。

    6.4.6一个真实的高速缓存层次结构的解剖

    到目前为止,我们一直假设高速缓存只保存程序数据。不过实际上,也保存指令。

    只保存指令的高速缓存程序数据称为i-cache。只保存程序数据的高速缓存称为d-cache。既保存指令又包括数据的高速缓存称为统一的高速缓存。

    现代处理器包括独立的i-cahce和d-cache。这样做有很多原因。有两个独立的高速缓存,处理器能够同时读一个指令字和一个数据字。i-caChe通常是只读的,因此比较简单。通常会对不同的访问模式来优化这两个高速缓存,它们可以有不同的块大小、相联度和容量。有不同的高速缓存也确保了数据访问不会与指令访问形成冲突不命中,反过来也是一样,代价就是可能会引起容量不命中增加。

    6.4.7高速缓存参数的性能影响

    有许多指标来衡量高速缓存的性能:

    • 不命中率:它是这样计算的:不命中数量/引用数量

    • 命中率:命中的存储器引用比率

    • 命中时间:命中时间的数量级是几个时钟周期

    • 不命中处罚

    6.5编写高速缓存友好的代码

    确保代码高速缓存友好的基本方法:

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

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

    对局部变量的反复引用是好的,因为编译器能够将它们缓存在寄存器文件中(时间局部性)。

    步长为1的引用模式是好的,因为存储器层次结构中所有层次上的缓存都是将数据存储为连续的块(空间局部性)。

    6.6.1存储器山

    一个程序从存储系统中读数据的速率称为读吞吐量,或者读带宽,通常以兆字节每秒(MB/s)为单位。

    读带宽的时间和空间局部性的二维函数称为存储器山。

    6.6.2重新排列循环以提高空间局部性

    6.6.3在程序中利用局部性

    • 将你的注意力集中在内循环上,大部分计算和存储器访问都发生在这里。

    • 通过按照数据对象存储在存储器中的顺序、以步长为1的来读数据,从而使得你程序中的空间局部性最大。

    • 一旦从存储器中读入了一个数据对象,就尽可能多地使用它,从而使得程序中的时间局部性最大。

    体会

    这一章的学习让我对存储器的内部结构有了更深的了解,这一章理论知识比较多,比较记忆还是较好理解的,我对最后存储器山的知识还是有些不太明确,对山峰山脊山谷等没有概念,为什么通过山脊来体现时间局部性斜坡代表空间局部性,这里还希望老师在课上较多讲解一下。感觉自己做题还要经常对比例题的做法,以及翻看公式,还不是很熟练,我还要勤加练习,才能掌握的更好。

    参考资料:

    1.教材:《深入理解计算机系统》

    2.《深入理解计算机系统》https://www.shiyanlou.com/courses/413

  • 相关阅读:
    在MyEclipse中运行tomcat报错 严重: Error starting static Resources
    MyEclipse 2015 运行tomcat 内存溢出的解决方法
    (转)Tomcat内存设置详解
    Object调用控件的办法
    Hibernate主键生成方式之hilo
    (转)“中国第一程序员” 求伯君的传奇经历
    雷军相识求伯君
    (转)雷军重掌金山幕后:与求伯君暗战三年两次逼宫
    华军软件发展及盈利模式
    中年人编程
  • 原文地址:https://www.cnblogs.com/bonjourvivi/p/4912908.html
Copyright © 2011-2022 走看看