20145223 《信息安全系统设计基础》第7周学习总结
教材学习内容总结
存储器层次结构
存储器系统是一个具有不同容量、成本和访问时间的存储设备的层次结构。
高速缓存存储器:作为CPU和主存之间的缓存区域。
存储技术
1.RAM——随机访问存储器
**静态的SRAM:**
作为高速缓存存储器,CPU片上或片下。
每个位存储在一个双稳态的存储器单元里面,每个单元用一个六晶体管电路来实现。
其属性是可以无限期保持在两个不同的电压配置或者状态之一,其他的任何状态都是不稳定的。
比DRAM用更多的晶体管,**存储快,只要有供电就保持不变密集度低,更贵,功耗更大,对干扰不敏感**。
**动态的DARM:**
作为主存以及图形系统的帧缓冲区。
将每个位存储为对一个电容的充电(这个电容很小)
**对干扰(如光线、噪音等)很敏感,当电容的电压被扰乱之后就永远不会恢复。**
**功耗小,成本低。**
传统的DRAM:
芯片中的单元位被分为d个超单元,每个超单元有w个DRAM单元组成
一个dxw的DRAM总共存储了dw位信息。超单元被组织成一个r行c列的长方形,即rc=d。每个超单元有形如(i, j)的地址,i表示行,j表示列。
每个DRAM芯片被连接到某个称为存储控制器的电路,这个电路可以一次传送w位到每个DRAM芯片或者依次从每个芯片传出w位。电路设计者将DRAM组织成二维而不是线性数组的一个原因是降低芯片上地址引脚的数量。
存储器模块:
DRAM芯片包装在存储器模块中,它是插到主版的扩展槽上的。
增强的DRAM:**每种都是基于DRAM单元**
快页模式-FPM DRAM
扩展数据输出-EDO DRAM
同步-SDRAM
双倍数据速率同步-DDR SDRAM
RDRAM
视频-VRAM
2.ROM——非易失性存储器,即使在关电后,也仍然保存着它们的信息ROM中有的类型既可以读又可以写,但整体上称为只读存储器,ROM是以它们能够被重编程的次数和进行重编程所用机制进行区分的。
**PROM(可编程ROM)**:只能被编程一次。
**可擦可写编程ROM(EPROM):**:被擦除和重写的次数可以达到10^3次
**E2PROM(电子可擦除PROM)**:不需要物理上独立编程设备,直接在印刷电路卡上编程,达到10^5次
**FLASH(基于EEPROM的重要的存储技术)**:基于此的磁盘驱动器称为固态硬盘
3.存储在ROM设备中的程序通常称为固件;当一个计算机系统通电之后,它会运行存储在ROM中的固件
4.RAM在断电后会丢失信息,ROM即使断电也能保存着信息。
5.访问主存
数据流通过总线的共享电子电路在处理器和DRAM之间来回;每次CPU和主存之间的数据传送是通过一系列步骤来完成的,称为总线事务。
读事务(从主存到CPU)
写事务(从CPU到主存)
**总线:**
是一股并行的线,可以携带数据、控制信号和地址(数据总线,地址总线,控制总线)。
6.计算机系统的配置
主要部件是CPU芯片、I/O桥芯片组、组成主存的DRAM存储器模块。这些部件由一对总线连接起来,其中一条总线是系统总线,它连接CPU和I/O桥,另一条总线是存储器总线,它连接I/O桥和主存。
I/O桥将系统总线的电子信号翻译成存储器总线的电子信号。
7.磁盘存储——磁盘是保存大量数据的存储设备;但读取速度慢。
8:磁盘结构
盘片:
磁盘由盘片构成,每个盘片有两个表面,表面上覆盖着磁性记录材料。盘片中央有一个可旋转的主轴,盘片以固定旋转速率旋转。
磁道:
每个表面由一组称为磁道的同心圆组成。
扇区:
磁道被划分为一组扇区,每个扇区包含相等数量的数据位。
间隙:
扇区之间由间隙分隔开,间隙不存储数据,标识扇区的格式化位。
磁盘驱动器:
磁盘由一个或多个叠放的盘片组成,被封装在一个密封的包装里,整个装置称为磁盘驱动器,即磁盘,也称旋转磁盘,区别与基于闪存的固态磁盘SSD。
柱面:
描述多个盘片驱动器的构造,指所有盘片表面上到主轴中心的距离想等的磁道的组合。即所有盘片表面到主轴中心距离相等的磁道的集合
9.磁盘容量——一个磁盘上可以记录的最大位数称为最大容量,即容量
由以下技术因素决定:
记录密度:磁道一英寸的段中可以放入的位数
磁道密度:从盘片中心出发半径上一英寸的段内可以有的磁道数
面密度:记录密度与磁道密度的乘积,**提高面密度即可提高容量**。
10.计算磁盘容量的公式:
磁盘容量 = 字节数/扇区 X 平均磁盘数/磁道 X 磁道数/表面 X 表面数/盘片 X 盘片数/磁盘
11.磁盘操作
磁盘用读/写头来读写存储在磁性表面的位,读写头连接到传动臂,通过沿着半径轴前后移动传动臂可以将读/写定位在盘面上的任何磁道上。这样的机械运动称为寻道。定位到了期望的磁道上,磁道旋转每个位通过它的下面时就可读写该位。多个盘片针对每一个都有独立的读写头,且位于同一柱面上。
12.对扇区的访问时间有三个主要部分:
寻道时间:将读写头定位到包含目标扇区的磁道上。Tseek取决于它以前的位置和传动臂在盘面上的移动速度。时间通常为3——9ms。
旋转时间:一旦读写头定位到了期望的磁道,驱动器等待目标扇区的第一个位旋转到读写头下面。平均旋转时间是最大时间(等磁盘旋转一圈)
传送时间:驱动器开始写或者读扇区的内容;时间长短取决于旋转速度和每条磁道的扇区数目。
**平均时延为 Tavg=1/RPM1/(平均扇区数/磁道)60secs/1min**
**最大旋转延迟=1/RPM X 60secs/1min (s)**
平均旋转时间是最大值的一半。
**访问一个磁盘扇区内容的平均时间为平均寻道时间,平均旋转延迟和平均传送时间之和。**
13.逻辑磁盘块——这个很重要,内存可以看成字节数组、磁盘可以看成块数组
磁盘中有一个小的硬件/固件设备,称为磁盘控制器,维护这逻辑块号和实际(物理)磁盘扇区之间的映射关系。
**逻辑块号翻译成的盘面、磁道、扇区的三元组唯一标示对应物理扇区**
14.连接到I/O设备
输入输出设备都是通过I/O总线连接到CPU和主存的。与系统总线和存储器总线不同,它可以设计成与CPU无关的。
I/O总线较慢,但可以容纳种类繁多的第三方I/O设备:
1:通用串行总线(USB)控制器是一个连接到USB总线的设备的中转机构。
2:图形卡(或适配器)包含硬件和软件逻辑,代表CPU在显示器上画像素。
3: 主机总线适配器将一个或多个磁盘连接到I/O总线,使用特别的主机总线接口定义的通信协议,两个常用的磁盘接口SCSI/SATA,SCSI更快更贵,可支持多个磁盘驱动器。其他设备,如网络适配器,插入到主板上空的扩展槽,从而连接到I/O总线。
15.访问磁盘
CPU从磁盘读数据,CPU使用**存储器映射I/O**的技术向I/O设备发出命令,过程中地址空间有一块是为与I/O设备通信保留的,称为I/O端口。当设备连接到总线时,它与一个或多个端口相关联。
16.局部性原理:计算机程序倾向于引用邻近于其他最近引用过的数据项的数据或其本身;这种倾向性,被称为局部性原理。包括:时间局部性,空间局部性。有良好局部性的程序比局部性差的程序运行的更快。
**时间局部性:**被引用过一次的存储器位置很可能在不远的将来再被多次引用。
**空间局部性:**如果一个存储器位置被引用了一次,那么很可能在不远的将来引用附近的一个存储器位置。p429“存储器山”
17.数据引用局部性
步长为k的引用模式:一个连续变量中,每隔k个元素进行访问,就被称为步长为k的引用模式。
步长为1的引用模式:就是顺序访问一个向量的每个元素,有时也被称为顺序引用模式,它是程序中 空间局部性常见和重要的来源。一般来说,随着步长增加,空间局部性下降。
18.取指令的局部性
程序指令是存放在存储器中的,CPU必须取出(读出)这些指令。
代码区别于程序数据的是在运行时是不能被修改的。
19.一个程序中局部性的简单原则:
1:重复引用同一个变量的程序有良好的时间局部性
2:对于具有步长为k的引用模式的程序,步长越小,空间局部性越好
3:对于取指令来说,循环有好的时间和空间局部性。循环体越小,循环迭代次数越多,局部性越好。
20.存储层次结构:系统观(1+1>2)(举一反三:对称不对称加密形成的混合加密系统,混合动力汽车...)
**中心思想:每层存储设备都是下一层的“缓存”**
对照p408的表理解:**越往上:更小、更快、成本更高,反之相反**
21.高速缓存结构(S,E,B,m):高速缓存组、高速缓存行、块
·作用:连接CPU和主存
·每个存储器地址有m位,形成M=2^m个不同地址。这m位被划分成t个标记位、s个组索引位和b个块偏移位。
这样一个机器的高速缓存被组织成S=2s个高速缓存组的数组;每个数组包含E个高速缓存行;每行由一个B=2b字节的数据块、一个有效位(指明这个行是否包含有效信息)、t=m-(b+s)个标记位(唯一标识存储在这个高速缓存行中的块)组成
高速缓存的结构可以用元组(S,E,B,m)来描述:
S:这个数组中有S=2^s个高速缓存组
E:每个组包含E个高速缓存行
B:每个行是由一个B=2^b字节的数据块组成的
m:每个存储器地址有m位,形成M=2^m个不同的地址
本周代码托管——链接
参考博客 - 代码驱动的程序设计学习,
·git对于程序员来说统计代码的功能是很有帮助的,除了可以用wc -l find src -name *.c
统计代码行数,还可以查询以前托管过的代码。
·在网上查了相关资料,对于git的强大功能又有了进一步的认识,比如这个命令git log --until=1.minute.ago
,可以查看一分钟以前的代码托管情况:
·除此之外还有很多类似的功能,这里就不一一列举。
思考
这个星期再一次体会到了博客和代码托管对于我们学习的帮助,本学期报了一门数据库的课程,上个学期java项目正好做了学生信息管理系统,想用来作为这门课的参考。但是过了一个假期有些地方忘了当时是怎么做的了,按照博客内容马上就回忆起来了,相当于一个学习笔记,而且也不怕上学期代码找不到了,直接git clone就可以。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 4000行 | 20篇 | 400小时 | |
第0周 | 0/0 | 1/1 | 5/5 | |
第1周 | 0/0 | 1/2 | 10/15 | |
第2周 | 300/300 | 1/3 | 15/30 | |
第3周 | 200/500 | 1/4 | 10/40 | |
第5周 | 150/650 | 1/5 | 10/50 | |
第6周 | 50/700 | 1/6 | 8/58 | |
第7周 | 0/700 | 1/7 | 8/64 |