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

 

 

第一节 存储技术

  • 三种常见存储技术:RAM、ROM、磁盘 

一、随机访问存储器RAM

随机存取
所谓“随机存取”,指的是当存储器中的数据被读取或写入时,所需要的时间与这段信息所在的位置或所写入的位置无关。相对的,读取或写入顺序访问(Sequential Access)存储设备中的信息时,其所需要的时间与位置就会有关系。它主要用来存放操作系统、各种应用程序、数据等。[1] 
易失性
当电源关闭时RAM不能保留数据。如果需要保存数据,就必须把它们写入一个长期的存储设备中(例如硬盘)。RAM和ROM相比,两者的最大区别
静态随机存取存储器
是RAM在断电以后保存在上面的数据会自动消失,而ROM不会自动消失,可以长时间断电保存。
对静电敏感
正如其他精细的集成电路,随机存取存储器对环境的静电荷非常敏感。静电会干扰存储器内电容器的电荷,引致数据流失,甚至烧坏电路。故此触碰随机存取存储器前,应先用手触摸金属接地。
访问速度
现代的随机存取存储器几乎是所有访问设备中写入和读取速度最快的,存取延迟
笔记本电脑内存
和其他涉及机械运作的存储设备相比,也显得微不足道。
需要刷新(再生)
现代的随机存取存储器依赖电容器存储数据。电容器充满电后代表1(二进制),未充电的代表0。由于电容器或多或少有漏电的情形,若不作特别处理,数据会渐渐随时间流失。刷新是指定期读取电容器的状态,然后按照原来的状态重新为电容器充电,弥补流失了的电荷。需要刷新正好解释了随机存取存储器的易失性。

2.动态DRAM(DRAM):将每个位存储为对电容的充电。电容约为30×10-15F。

 

动态RAM的工作原理 动态RAM也是由许多基本存储元按照行和列地址引脚复用来组成的。
3管动态RAM的工作原理3管动态RAM的基本存储电路如右图所示。在这个电路中,读选择线和写选择线是分开的,读数据线和写数据线也是分开的。
写操作时,写选择线为"1",所以Q1导通,要写入的数据通过Q1送到Q2的栅极,并通过栅极电容在一定时间内保持信息。
读操作时,先通过公用的预充电管Q4使读数据线上的分布电容CD充电,当读选择线为高电平有效时,Q3处于可导通的状态。若原来存有"1",则Q2导通,读数据线的分布电容CD通过Q3、Q2放电,此时读得的信息为"0",正好和原存信息相反;若原存信息为"0",则Q3尽管具备导通条件,但因为Q2截止,所以,CD上的电压保持不变,因而,读得的信息为"1"。可见,对这样的存储电路,读得的信息和原来存入的信息正好相反,所以要通过读出放大器进行反相再送往 数据总线。

二、非易失性存储器(ROM)

  • 区分:能被重编程的次数和对他们进行重编程所用的机制

    PROM:只能被编程一次。

    EPROM:可擦写可编程ROM,紫外线光照清除单元内容,可擦写次数数量级1000。

    E2PROM:电子可擦除PROM,可以直接在印制电路卡上编程,可擦写次数数量级10^5。

    FLASH:闪存,基于EEPROM。(固态硬盘SSD基于闪存)

 

三、访问主存

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

 2.读事务:从主存传送数据到CPU

汇编语句:movl A,%eax

3.写事务:从CPU传送数据到主存

汇编语句:movl %eax,A

四、磁盘存储

1.磁盘构造

2.磁盘容量:一个磁盘上可以记录的最大位数称为它的最大容量/容量。决定因素:

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

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

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

 公式:磁盘容量=字节数/扇区*平均盘区数/磁道*磁道数/表面*表面数/盘片*盘片数/磁盘

3.磁盘操作

磁盘用读写头来读写存储在磁性表面的位,而读写头连接到一个转动臂一端。寻道就是通过沿着半径轴前后移动这个转动臂,使得驱动器可以将读写头定位在盘面上的任何磁道上。

(1)动态特性

任何时刻,所有的读写头都位于同一柱面上。

磁盘以扇区大小的块来读写数据。

 (2)访问时间 =寻道时间+旋转时间+传送时间

a.寻道时间:为了读取某个目标扇区的内容,传动臂把读/写头首先定位到包含目标扇区的磁道上,所需时间即为寻道时间,约等于最大旋转时间。

寻道时间Tseek依赖于读写头以前的位置和转动臂在盘面上移动的速度。

b.旋转时间:定位到期望的磁道后,驱动器等待目标扇区的第一个位旋转到读/写头下。依赖于当读写头到达目标扇区时盘面的位置和磁盘旋转速度。

定位到期望的磁道后,驱动器等待目标扇区的第一个位旋转到读/写头下。

最大旋转时间 = 1/最大旋转数率

平均旋转时间 = (1/2) * 最大旋转时间。

c.传送时间:当目标扇区的第一个位位于读写头下时,驱动器就可以开始读或者写该扇区的内容。依赖于旋转速度和每条磁道的扇区数目。

平均传送时间 = (1/最大旋转数率) * (1/每磁道的平均扇区数)

 

 

五、逻辑磁盘块

内存可以看成字节数组、磁盘可以看成块数组

 

  • 现代磁盘构造复杂,有多个盘面,这些盘面上有不同的记忆区。为了对操作系统隐藏这样的复杂性,现代磁盘将他们的构造呈现为一个简单的试图,一个B个扇区大小的逻辑块的序列,编号为0,1,...,B-1。

  • 磁盘中有一个小的硬件/固件设备,称为磁盘控制器,维护着逻辑块号和实际(物理)扇区之间的映射关系。

  • 控制器上的固件执行一个快速表查找,将一个逻辑块号翻译一个(盘面、磁道、扇区)的三元组,这个三原则唯一地表示了对应的物理扇区。控制器上的硬件解释这个三元组,将读写头移动到适当的煮面,等待扇区移动到读写头下,将读写头感知到的位放在控制器上的一个小缓冲区中,然后将他们拷贝到主存中。

 

六、连接到I/O设备

图形卡、监视器、鼠标、键盘和磁盘这样的输入输出设备,都是通过I/O总线连接到CPU和主存的。

系统总线和存储器总线是与CPU相关的,I/O总线设计成与底层CPU无关。

I/O总线比系统总线比存储器总线慢,但是它可以容纳种类繁多的第三方I/O设备。

 

  • 三个设备连接到总线:

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

图形卡(适配器)

主机总线适配器

 

七、访问磁盘

CPU使用一种存储器映射I/O技术来向I/O设备发出命令,在使用存储器映射I/O的系统中,地址空间中有一块地址是为与I/O设备通信保留的,称为I/O端口。当一个设备连接到总线时,它与一个或多个端口相连。

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

八、固体磁盘:基于闪存的存储技术

一个SSD包由一个或多个闪存芯片和闪存翻译层组成,闪存芯片替代传统旋转磁盘中机械驱动器;闪存翻译层(一个硬件/固件设备)替代磁盘控制器,将对逻辑块的请求翻译成对底层物理设备的访问。

 

1.性能特性

顺序读和写(CPU按顺序访问逻辑磁盘块)性能相当,顺序读比顺序写稍快一点。

随机顺序访问逻辑块时,写比读慢一个数量级。

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

 

2.优点

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

随机访问时间比旋转磁盘要快、能耗低、结实

 

3.缺点:易磨损、更贵

 第二节 局部性

 

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

 

(1)两种形式:空间局部性和时间局部性

 

(2)有良好局部性的程序比局部性差的程序运行得更快

硬件层:局部性原理允许计算机设计者通过引入高速缓存存储器来保存最近被引用的指令和数据项,从而提高对主存的访问速度。

操作系统级:局部性原理允许系统使用主存作为虚拟地址空间最近被引用块的高速缓存,用主存来缓存磁盘文件系统中最近被使用的磁盘块。

应用程序中:例如,Web浏览器将最近被引用的文档放在本地磁盘上。

 

二、对程序数据引用的影响

 

1.步长为k的引用模式

定义:一个连续变量中,每隔k个元素进行访问。

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

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

 2.多维数组程序

 C语言中数组在存储器中是按照行顺序存放的,所以按照行优先顺序执行的代码的局部性要好于按列优先顺序的代码。

 

三、取指令的局部性

程序指令是存放在存储器中的,CPU必须取出(读出)这些指令。

代码区别于程序数据的一个重要属性是在运行时它是不能被修改的。当程序正在执行时,CPU只从存储器中读出它的指令,CPU绝不会重写或修改这些指令。

 

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

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

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

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

 

 

 第三节 存储器层次结构

 

一、存储技术和计算机软件

存储技术:不同的存储技术的访问时间差异很大,速度较快的技术每字节的成本要比速度较慢的技术高,而且容量较小,CPU和主存之间的速度差距在增大。

计算机软件:一个编写良好的程序倾向于展示出良好的局部性。


高层往底层走,存储设备变的更慢、更便宜、更大。每一层存储设备都是下一层的缓存。

 

二、缓存

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

存储器层次结构的中心思想:对于每个k,位于k层的更快更小的存储设备作为位于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):选择最后被访问的时间距现在最远的块

 

种类:

强制性不命中/冷不命中:即第k层的缓存是空的(称为冷缓存),对任何数据对象的访问都不会命中。通常是短暂事件,不会在反复访问存储器使得缓存暖身之后的稳定状态中出现。

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

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

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

 

第四节 高速缓存存储器

 

一、简介

1.早期的计算机系统的存储器层次结构:CPU寄存器、DRAM主存储器和磁盘存储

2.CPU与主存之间插入 

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

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

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

3.高速缓存存储器的典型总线结构

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

高速缓存是一个高速缓存组的数组,高速缓存的结构将m个地址划分成了t个标记位,s个组索引位和b个块偏移位。它的结构可以用元组(S,E,B,m)来描述


 

   
   m 每个存储器地址有m位,形成M=2^m个不同的地址
   S 这个数组中有S=2^s个高速缓存组
   E 每个组包含E个高速缓存行
   B 每个行是由一个B=2^b字节的数据块组成的
 标记位 t=m-(b+s)个,唯一的标识存储在这个高速缓存行中的块
有效位 每个行有一个有效位,指明这个行是否包含有意义的信息
 高速缓存的大小/容量C C=S*E*B。指所有块的大小的和,不包括标记位和有效位。

    

 

 

三、直接映射高速缓存

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

        高速缓存确定一个请求是否命中,然后取出被请求的字的过程,分为三步:
组选择、行匹配、字抽取 

 组选择

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

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

行匹配

        判断缓存命中的两个充分必要条件:

        该行设置了有效位

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

字选择

           确定所需要的字在块中是从哪里开始的。

 

2.缓存不命中时的行替换:用新取出的行替换当前的行。

 

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

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

    因为有8个存储块,4个高速缓存组,多个块映射到同一个高速缓存组(因为他们有相同的组索引)。

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

 4.CPU执行一系列读的步骤:

    用索引位,确定针对的是哪个组

    然后看对应的组是否有效:

        如果无效则缓存不命中,高速缓存从存储器或低一层中取出要找的块,存储在对应的组中,再把有效位置1,返回需要的值

        如果有效,再根据标记找是否有匹配的标记:如果有,则缓存命中,返回需要的值;如果没有,则替换行,返回。 

 

 

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

原因:在块之间抖动,即这些块被映射到了同一个高速缓存组。 

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

 四、组相连高速缓存

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

 

2.行匹配和字选择

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

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

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

 3.组相连高速缓存中不命中时的行替换:随机替换

    最不常使用策略LFU:替换在过去某个时间窗口内引用次数最少的那一行。

    最近最少使用策略LRU:替换最后一次访问时间最久远的那一行。

五、全相连高速缓存

1.组选择:只有一个组,没有组索引位。

 

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

 六、写

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

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

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

写回:只有当替换算法要驱逐更新过的块时,才写到紧接着的低一层中。

    优点:符合局部性原理,显著的减少总线流量

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

 2.写不命中的处理方法

    写分配(对应写回):加载相应的低一层中的块到高速缓存中,然后更新这个高速缓存块。

    非写分配(对应直写):避开高速缓存,直接把这个字写在低一层中。

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

1.性能

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

    命中率 = 1 - 不命中率

    命中时间:从高速缓存传送一个字到CPU所需的时间,包括组选择,行匹配,字抽取的时间。

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

 

2.具体影响 

    高速缓存大小:较大的高速缓存可能会提高命中率,但使大存储器运行的更快是更难一些的。

    块大小:较大的块能利用程序中可能存在的空间局部性,帮助提高命中率;但块越大意味着高速缓存行较少,损害时间局部性。

    相联度:相联度较大(E值较大)优点是降低了高速缓存由于冲突不命中出现抖动的可能性,但成本较高。

    写策略:直写高速缓存易实现,而且能使用独立于高速缓存的写缓冲区,用来更新存储器,不命中开销小。写回高速缓存引起的传送比较少,允许更多的到存储器的宽带用于执行DMA的I/O设备。越下层,越可能用写回而不是直写。

 

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

 

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

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

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

 两种局限性:空间、时间

1.对局部变量的反复引用是好的,因为编译器能够将他们缓存在寄存器文件中

 

2.步长为1的引用模式是好的,因为存储器层次结构中所有层次上的缓存都是将数据存储为连续的块

 

 

 

 

参考资料:1.《深入理解计算机系统》第六章

     2.实验楼课程-深入理解计算机系统 实验七

         

 
 
 
 
posted @ 2015-10-26 18:26  20135226黄坤  阅读(144)  评论(0编辑  收藏  举报