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

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

    存储器层次结构

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

    6.1存储技术

    6.1.1随机访问存储器

    随机存取存储器—RAM  **
    RAM(random access memory,随机存取存储器)。存储单元的内容可按需随意取出或存入,且存取的速度与存储单元的位置无关的存储器。
    这种存储器在断电时将丢失其存储内容,故主要用于存储短时间使用的程序。** 按照存储信息的不同,随机存储器又分为静态随机存储器(Static RAM,SRAM)和动态随机存储器(Dynamic RAM,DRAM)。

    SRAM

    • SRAM(Static RAM,静态随机存储器),不需要刷新电路,数据不会丢失,而且,一般不是行列地址复用的。但是他集成度比较低,不适合做容量大的内存,一般是用在处理器的缓存里面。像S3C2440的ARM9处理器里面就有4K的SRAM用来做CPU启动时用的。

    • SRAM其实是一种非常重要的存储器,它的用途广泛。SRAM的速度非常快,在快速读取和刷新时能够保持数据完整性。SRAM内部采用的是双稳态电路的形式来存储数据。所以SRAM的电路结构非常复杂。制造相同容量的SRAM比DRAM的成本高的多。正因为如此,才使其发展受到了限制。因此目前SRAM基本上只用于CPU内部的一级缓存以及内置的二级缓存。仅有少量的网络服务器以及路由器上能够使用SRAM。

    DRAM

    • Dynamic RAM,动态随机存取存储器,每隔一段时间就要刷新一次数据,才能保存数据。而且是行列地址复用的,许多都有页模式。SDRAM是其中的一种。

    • 特点及优势:

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

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

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

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

    SDRAM

    • SDRAM(Synchronous DRAM,同步动态随机存储器),即数据的读写需要时钟来同步。其存储单元不是按线性排列的,是分页的。

    • DRAM和SDRAM由于实现工艺问题,容量较SRAM大。但是读写速度不如SRAM。

    • 一般的嵌入式产品里面的内存都是用的SDRAM。电脑的内存也是用的这种RAM,叫DDR SDRAM,其集成度非常高,因为是动态的,所以必须有刷新电路,每隔一段时间必须得刷新数据。

    非易失性存储器—ROM

    • Read-Only Memory,只读存储器的总称。

    • 在微机的发展初期,BIOS都存放在ROM(Read Only Memory,只读存储器)中。ROM内部的资料是在ROM的制造工序中,在工厂里用特殊的方法被烧录进去的,其中的内容只能读不能改,一旦烧录进去,用户只能验证写入的资料是否正确,不能再作任何修改。如果发现资料有任何错误,则只有舍弃不用, 重新订做一份。ROM是在生产线上生产的,由于成本高,一般只用在大批量应用的场合。

    几种特殊的ROM

    • PROM(可编程只读存储器),只能写一次,写错了就得报废,现在用得很少了,好像那些成本比较低的OPT单片机里面用的就是这种存储器吧。

    • EPROM(Erasable Programmable ROM,可擦除可编程ROM)芯片可重复擦除和写入,解决了PROM芯片只能写入一次的弊端。

      • EPROM芯片有一个很明显的特征,在其正面的陶瓷封装上,开有一个玻璃窗口,透过该窗口,可以看到其内部的集成电路,紫外线透过该孔照射内部芯片就可以擦除其内的数据,完成芯片擦除的操作要用到EPROM擦除器。
      • EPROM内资料的写入要用专用的编程器,并且往芯片中写内容时必须要加一定的编程电压(VPP=12—24V,随不同的芯片型号而定)。EPROM的型号是以27开头的,如27C020(8*256K)是一片2M Bits容量的EPROM芯片。
      • EPROM芯片在写入资料后,还要以不透光的贴纸或胶布把窗口封住,以免受到周围的紫外线照射而使资料受损。 EPROM芯片在空白状态时(用紫外光线擦除后),内部的每一个存储单元的数据都为1(高电平)。
    • EEPROM (Electrically Erasable Programmable ROM,电可擦可编程只读存储器)一种掉电后数据不丢失的存储芯片。

      • EEPROM是可用户更改的只读存储器,其可通过高于普通电压的作用来擦除和重编程(重写),即可以在电脑上或专用设备上擦除已有信息并重新编程。不像EPROM芯片,EEPROM不需从计算机中取出即可修改,是现在用得比较多的存储器,比如24CXX系列的EEPROM。
    • 在一个EEPROM中,当计算机在使用的时候是可频繁地重编程的,EEPROM的寿命是一个很重要的设计考虑参数。

    • EEPROM的一种特殊形式是闪存,其应用通常是个人电脑中的电压来擦写和重编程。

    • EEPROM一般用于即插即用(Plug & Play),常用在接口卡中,用来存放硬件设置数据,也常用在防止软件非法拷贝的"硬件锁"上面。

    • 访问主存

    (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 >> 磁盘

    • 每字节造价:SRAM > DRAM > SSD >> 磁盘

    受到读写速度、每字节造价及使用要求的影响,储存技术正在有针对地向读写速度、造价达到均衡的介质发展。

    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.6一个真实的高速缓存层次结构的解剖

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

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

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

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

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

    • 不命中率:它是这样计算的:不命中数量/引用数量
    • 命中率:命中的存储器引用比率
    • 命中时间:命中时间的数量级是几个时钟周期
    • 不命中处罚

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

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

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

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

    • 高速缓存友好代码分析

    #include<stdio.h>
    void main()
    {
      int a[4]={1,2,3,4};
      int i;
      int sum=0;
      for(i=0;i<4;i++)
        sum+=a[i];
    }
    

    该程序具有良好的时间局部性,因为i,sum均被重复使用多次;该程序也具有良好的空间局部性,因为依次读取数组a的4个元素,由于int类型占据4个字节,因此只要高速缓存块大小大于16个字节(intel i7的块大小为64Bytes,因此足够),它们就可以一起被读入高速缓存块中,而仅仅是a[0]发生了高速缓存不命中,因为它第一个被读取需要加载,而后面3个量均为高速缓存命中。

    • 高速缓存不友好代码分析

    #include<stdio.h>
    void main()
    {
      int a[2][2]={{1,2},{3,4}};
      int i,j,sum=0;
      for(int j=0;j<2;j++) {
        for(int i=0;i<2;i++) {
          sum+=a[i][j];
        }
      }
    }
    

    由于C语言是按行优先顺序来存储的,所以这个循环的步长不是以1为单位的,并且每次读取都要换行,所以所有的读取都发生了缓存不命中情况,程序运行效率会比高速缓存友好的程序慢一倍!

    6.6.1存储器山

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

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

    6.6.3在程序中利用局部性

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

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

    课后作业

    习题6.2

    计算这样一个磁盘的容量。它有2个盘片,10 000个柱面,每条磁道平均有400个扇区,每个扇区平均有512个字节

    磁盘容量 = (512/400)*400*10000*2*2= 8 192 000 000 字节 = 8.192GB
    

    习题6.3

    估计访问下面的一个磁盘上的一个扇区需要的时间(以ms为单位)。旋转速率:15000RPM;Taveseek = 8ms;每条磁道的平均扇区数:500

    访问时间 = Taveseek+Taverotation+Tavetransfer = 8ms+0.51/15000RPM60secs.min1000ms/s+1/15000RPM1/50060secs/min1000ms/s=8ms+2ms+0.008ms=10.008ms
    

    习题6.4

    假设1MB的文件由512字节的逻辑块组成,存储在有如下特性的磁盘驱动器上(旋转速率:10 000RPM,Taveseek=5ms,平均扇区/磁道 = 1000)。

    (1)最好的情况:给定逻辑块到磁盘扇区的最好的可能的映射(即,顺序的),估计读这个文件需要的最优时间

    (2)随机的情况:如果块是随机地映射到磁盘扇区的,估计读这个文件需要的时间

    (1)T=Taveseek+Taverotation+2Tmaxrotation=5ms+3ms+26ms=20ms
    
    (2)在这种情况下,块被随机的映射到扇区上,读2000块的每一块都需要Taveseek+Tavgrotation=8ms。所以读这个文件的总时间为
    T =8ms*2000=16000ms=16s
    

    习题6.11

    在前面dotprod的例子中,在我们对数组x做了填充之后,所有对x和y的引用的命中率是多少?

     在填充了之后,对于x和y数组,只有在引用第0个和第4个元素的时候发生不命中。因而命中率为75%
    

    本周代码托管截图

    Linux/week07

    感悟与思考

    这一章学习结束之后,对于计算机系统中存储器的分类及各类存储器的作用。并了解到了不同类存储器的优缺点以及性能、每字节造价方面的具体指标。

    本章内容将计算机存储器与编程紧密结合,并分析了如何才能算作是高速缓存优好的编程方式。学习这一章的开始,对于许多概念不甚理解,但通过对于书本范例、图解的阅读,在学习结束之后达到了基本理解的程度。

    在查阅资料的过程中,看到了娄老师曾经提出的“估算学习时间”与”实际学习时间“的对比(参见http://www.cnblogs.com/java-stx/p/4899314.html)了解到了自己在将计划转换为实际的学习成果上还存在一定的问题,在今后的学习中努力做到计划转换为实际的效率能够得到进一步的提升。

    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
    目标 5000行 30篇 400小时
    第一周 0/0 1/2 15/30
    第二周 56/56 2/3 15/45
    第三周 89/145 1/4 20/65
    第五周 500/645 1/6 20/85
    第六周 150/795 1/7 20/105
    第七周 124/919 1/8 15/120

    参考资料

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

    2.《深入理解计算机系统》

    3.如何编写高速缓存有好的代码

  • 相关阅读:
    Ubuntu 16.04 安装 Apache, MySQL, PHP7
    Ubuntu下apache2启动、停止、重启、配置
    织梦-数据库-表和字段说明手册
    DEDECMS去除后门隐患和漏洞以及冗余代码的方法
    Express使用html模板
    windows系统 安装MongoDB
    linux搭建node.js环境
    配置vuejs加载模拟数据
    安卓高级5 zXing
    安卓高级5 传感器和震动 模仿微信摇一摇Ui效果
  • 原文地址:https://www.cnblogs.com/xxy745214935/p/6014263.html
Copyright © 2011-2022 走看看