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

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

第6章 存储器层次结构

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

6.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,支持插拨。

  • 访问主存
    (1)总线:总线是一组并行的导线,能携带地址、数据和控制信号。
    (2)读事务(read transaction)从主存传送数据到CPU;写事务(write transcation)从CPU传送数据到主存。
    (3)总线是一组并行的导线,能携带地址、数据的控制信号。

磁盘存储

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

  • 磁盘容量:

  • 磁盘操作:磁盘用读/写头来读写存储在磁性表面的位,而读写头连接到一个传动臂一端,通过移动转动臂将读写头定位在磁道上的机械运动称为寻道。

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

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

固态硬盘

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

6.2 局部性

  • 局部性原理:一个编写良好的计算机程序倾向于引用邻近于其他最近引用过的数据项,或者最近引用过的数据项本身。
  • 局部性有两种形式:时间局部性(temporal locality):在一个具有良好时间局部性的程序中,被引用过一次的存储器位置很可能在不远的将来再被多次引用。
  • 空间局部性(spatial locality):在一个具有良好空间局部性的程序中,如果一个存储器位置被引用了一次,那么程序很可能在不远的将来引用附近的一个存储器位置。

对程序数据引用的局部性

  • 程序指令是存放在存储器中的,CPU读取这些指令的过程中评价一个程序关于取指令的局部性。
  • 代码区别与程序数据的一个重要属性是:在运行时指令是不能被修改的。

取指令的局部性

  • 计算机程序倾向于引用邻近于其他最近引用过的数据项的数据或其本身;这种倾向性,被称为局部性原理。包括:时间局部性,空间局部性。有良好局部性的程序比局部性差的程序运行的更快。
  • 体现:在硬件层,局部性原理允许计算机设计者通过引入称为高速缓存器的小而快的存储器来保存最近被引用的指令和数据项;在操作系统级,局部性原理允许系统使用主存作为虚拟地址空间最近被使用的磁盘块。
  • 重复引用一个变量的程序具有良好的时间局部性;对于取指令来说,循环具有良好的时间和空间局部性。循环体越小,循环迭代次数越多,局部性越好。

6.3存储器层次结构

  • 存储器层次结构的中心思想是:对于每个k,位于k层的更快更小的存储设备作为位于(k+1)层的更大更慢的存储设备的缓存。数据总是以块大小作为传送单元在第k层和k+1层之间来回拷贝的。第(k+1)层的存储器被划分成连续的数据对象片,称为块;数据总是以块大小为传送单元在相邻两层之间来回拷贝的;在任何时刻,第k层的缓存包括第(k+1)层块的一个子集的拷贝。

6.4高速缓存存储器

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

直接映射高速缓存

  • 每组只有一行(E=1)的高速缓存称为直接映射高速缓存。高速缓存确定一个请求是否命中,然后抽取出被请求字的过程分为三步:组选择/ 行匹配/ 字抽取
  • 直接映射高速缓存中的组选择:高速缓存从要抽取的字的地址中抽取出S个组索引位,这些位被解释成一个对应于一个组号的无符号整数。
  • 直接映射高速缓存中的行匹配:当且仅当设置了有效位,而且高速缓存行标记与w的地址中的行标记相匹配时,这一行中包含w的一个拷贝。
  • 直接映射高速缓存中的字抽取:块偏移位提供了所需要的字的第一个字节的偏移。
  • 直接映射高速缓存中不命中时的行替换:需要从存储器层次结构中的下一层取出被请求的块,然后将新的块存储在组索引位指示的组中的一个高速缓存行中。

组相连高速缓存

  • 组相连高速缓存中的组选择:与直接映射高速缓存中的组选择一样,组索引位标识组。
  • 组相连高速缓存中的行匹配和字选择:把每个组看做一个小的相关联存储器,是一个(key,value)对的数组,以key为输入,返回对应数组中的value值。高速缓存必须搜索组中的每一行,寻找有效的行其标记与地址中的相匹配。
  • 组相连高速缓存中不命中时的行替换:最简单的替换策略是随机选择要替换的行,其他复杂的策略则使用了局部性原理,例如最不常使用、最近最少使用等。

全相连高速缓存

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

有关写的问题

  • 直写:立即将w的高速缓存块写回到紧接着的低一层中。
  • 写回: 尽可能推迟存储器更新,只有当替换算法要驱逐已更新的块时,才把它写回存储器。
  • 写分配:即加载相应的存储器块到高速缓存中,然后更新这个高速缓存器。

高速缓存参数的性能影响

  • 有许多指标来衡量高速缓存的性能:
    (1)不命中率:它是这样计算的:不命中数量/引用数量
    (2)命中率:命中的存储器引用比率
    (3)命中时间:命中时间的数量级是几个时钟周期
    (4)不命中处罚

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

  • 确保代码高速缓存友好的基本方法:
    (1)让最常见的情况运行的快。
    (2)在每个循环内部缓存不命中数量最小。

6.6高速缓存对程序性能的影响

存储器山

  • 一个程序从存储系统中读数据的速率称为读吞吐量,或者读带宽,通常以兆字节每秒(MB/s)为单位。
  • 读带宽的时间和空间局部性的二维函数称为存储器山。

在程序中利用局部性

  • 将你的注意力集中在内循环上,大部分计算和存储器访问都发生在这里。
  • 通过按照数据对象存储在存储器中的顺序、以步长为1的来读数据,从而使得你程序中的空间局部性最大。
  • 一旦从存储器中读入了一个数据对象,就尽可能多地使用它,从而使得程序中的时间局部性最大。

本周代码托管链接

https://git.oschina.net/20145227/IS-Design-20145227/tree/master/ch07

本周代码总数

根据代码驱动的程序设计学习建立的项目结构

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

这一章的学习让我对存储器的内部结构有了更深的了解。这一章理论知识比较多,需要记忆的东西比较多,但还是较好理解的。对有些概念的理解还不是很透彻,所以我会再把本章内容看一遍。感觉自己做题时还要经常对比例题的做法,以及翻看公式,并不是很熟练,所以我还要勤加练习,才能掌握的更好。练习的过程就是学得更透彻的过程,加油!

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 0 2/2 20/20
第二周 100/100 1/3 20/40
第三周 200/300 1/4 22/62
第五周 200/500 1/5 22/84
第六周 274/774 1/6 22/106
第七周 127/901 2/8 22/128

参考资料

posted @ 2016-10-29 22:27  20145227鄢曼君  阅读(213)  评论(2编辑  收藏  举报