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

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

教材学习内容总结

一、了解三种常见存储技术:RAM/ROM/磁盘

1.随机访问存储器RAM

  • 1.存储器系统是一个具有不同容量、成本和访问时间的存储设备的层次结构。
  • 2.随机访问存储器
    SRAM(静态):高速缓存存储器。将每个位存储在一个双稳态的存储器单元里面。(每个单元用一个六晶体管电路来实现;其属性是可以无限期保持在两个不同的典雅配置或者状态之一,其他的任何状态都是不稳定的)

    DRAM(动态):将每个位存储为对一个电容的充电(这个电容很小)。存储单元对干扰(如光线、噪音等)很敏感;当电容的电压被扰乱之后就永远不会恢复。优势是密集度低,成本低。
  • 3.关于DRAM
每个DRAM芯片被连接到某个称为存储控制器的电路,这个电路可以一次传送w位到每个DRAM芯片或者依次从每个芯片传出w位。电路设计者将DRAM组织成二维而不是线性数组的一个原因是降低芯片上地址引脚的数量。
DRAM芯片包装在存储器模块中,它是插到主版的扩展槽上的。```
![](http://images2015.cnblogs.com/blog/877181/201610/877181-20161030193440328-1009518820.png)

- 4.DRAM的访问
如下图所示是访问(2,1)超单元的信息。
1、开始存储控制器发送地址行2,DRAM将第2行信息全部拷贝到一个内部缓存区。
2、然后存储控制器发送地址列1,DRAM从行缓冲区中拷贝出单元(2,1)的8位
3、将(2,1)中的信息发送到存储控制器。
![](http://images2015.cnblogs.com/blog/877181/201610/877181-20161030195144125-426146125.png)

- 5.SRAM和DRAM的比较:
![](http://images2015.cnblogs.com/blog/877181/201610/877181-20161030195220031-91022566.png)

<font size=3>**2.非易失型存储器ROM**</font>
- 1.PROM:只能被编程一次。
- 2.可擦可写编程ROM(EPROM):被擦除和重写的次数可以达到10^3次。
- 3.电子可擦除PROM(EEPROM):能够被编程的次数可以达到10^3次。
- 4.闪存:基于EEPROM。基于此的磁盘驱动器称为固态硬盘 存储在ROM设备中的程序通常称为固件;当一个计算机系统通电之后,它会运行存储在ROM中的固件。

**注:数据流通过总线的共享电子电路在处理器和DRAM之间来回;包括读事务(从主存到CPU)和写事务。总线是一股并行的线,可以携带数据、控制信号和地址(数据总线,地址总线,控制总线)。**

<font size=3>**2.磁盘**</font>

**盘片**
1.盘片正反两面,表面覆盖着磁性记录材料。
2.每个表面是由磁道构成。磁道又被划分为扇区和间隙。
![](http://images2015.cnblogs.com/blog/877181/201610/877181-20161030195418593-1458774988.png)

3.磁盘是由多个盘片构成。
![](http://images2015.cnblogs.com/blog/877181/201610/877181-20161030195518609-21050197.png)

- 1.磁盘制造
```a.每个表面是由一组称为磁道(track)的同心圆组成;每个磁道被划分成一组扇区(sector);```
```b.每个扇区包含相等数量的数据位(通常是512字节);```
```c.这些数据编码在扇区上的磁性材料中。扇区之间由一些间隙(gap)分隔开,这些间隙中不存在数据位。间隙存储用来标识扇区的格式化位。```

- 2.磁盘容量列表项
磁盘容量是由以下技术因素决定的:记录密度、磁道密度、面密度
```记录密度:磁道一英寸的段可以放入的位数。```
```磁道密度:从盘片中心出发半径上一英寸的段内可以有的磁道数。```
```面密度:记录密度与磁道密度的乘积。```

- 3.磁盘容量
1.一个磁盘上可以记录的最大位数称为它的最大容量/容量。
2.磁盘容量的决定因素:
3.磁盘容量计算公式:
![](http://images2015.cnblogs.com/blog/877181/201610/877181-20161030195819187-929088522.png)

- 4.磁盘操作
**(1)任何时刻,所有的读写头都位于同一柱面上。**
**(2)在传动臂末端的读/写头在磁盘表面高度约0.1微米处一层薄薄的气垫上飞翔,速度大约为80km/h。磁盘以扇区大小的块来读写数据。**
**(3)对扇区的访问时间有三个主要部分组成:**
```1.寻道时间(seek time):为了读取某个目标扇区的内容,传动臂把读/写头首先定位到包含目标扇区的磁道上。所需时间即为寻道时间,约等于最大旋转时间。```
```2.旋转时间(rotational latency):定位到期望的磁道后,驱动器等待目标扇区的第一个位旋转到读/写头下。 Tmax rotation = 1/最大旋转数率 Tavg rotation = (1/2) × Tmax rotation```
```3.传送时间(transfer time):Tavg transfer = (1/最大旋转数率) × (1/每磁道的平均扇区数)```
**(4)补充:访问一个磁盘扇区的512字节的主要时间在于寻道和旋转延迟。访问时间:磁盘>DRAM>SRAM**
- 5.逻辑磁盘块
现代磁盘构造复杂,有多个盘面,这些盘面上有不同的记录区。为了对操作系统隐藏这样的复杂性,现代磁盘将它们的构造简化为一个b个扇区大小的逻辑块的序列,编号为0,1,2,...b-1。磁盘中有一个小的硬件/固件设备,称为磁盘控制器,维护着逻辑块号的和实际(物理)磁盘扇区之间的映射关系。


<font size=4>**二、局部性**</font>

<font size=3>**1.局部性原理**</font>
- 1.计算机程序倾向于引用邻近于其他最近引用过的数据项的数据或其本身,这种倾向性,被称为局部性原理。
- 2.局部性原理包括时间局部性,空间局部性。
<font size=3>**2.评价一个程序中局部性的简单原则:**</font>
- 1.重复引用同一个变量的程序有良好的时间局部性。
- 2.对于具有步长为k的引用模式的程序,步长越小,空间局部性越好;在存储器中以大步长跳来跳去的程序空间局部性会很差。
- 3.对于取指令来说,循环有很好的时间和空间局部性。循环体越小,循环迭代次数越多,局部性越好。
- 4.有良好局部性的程序比局部性差的程序运行得更快


<font size=4>**三、存储器层次结构——缓存**</font>

![](http://images2015.cnblogs.com/blog/877181/201610/877181-20161030195907687-216466616.png)

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

<font size=3>**2.缓存命中及缓存不命中**</font>

- 1.缓存命中:当程序需要第(k+1)层的数据对象d的时候,首先会在第k层找d;如果d刚好缓存在第k层,那么就叫做缓存命中;反之,不命中
- 2.如果缓存不命中,那么第k层缓存就从第(k+1)层取出包含该数据的块,有可能会覆盖现有的块。覆=决定替换哪个块是由缓存的替换策略来控制的;例如,一个具有随机替换策略的缓存会随机选择;而LRU替换策略会选择被访问时间距今最远的块

<font size=3>**3.缓存管理**</font>

- 1.在每一层上,某种形式的逻辑必须管理缓存;
- 2.可以是硬件也可以是硬件、软件的结合。

<font size=3>**4.高速缓存存储器(S,E,B,m)**</font>

- 1.作用:连接CPU和主存
- 2.每个存储器地址有m位,形成M=2^m个不同地址。这m位被划分成t个标记位、s个组索引位和b个块偏移位。
- 3.一个机器的高速缓存被组织成S=2^s个高速缓存组的数组;每个数组包含E个高速缓存行;每行由一个B=2^b字节的数据块、一个有效位(指明这个行是否包含有效信息)、t=m-(b+s)个标记位(唯一标识存储在这个高速缓存行中的块)组成。
- 4.理解:从高向低来看,M=2^m个地址平均分给S=2^s个组,每组获得2^(m-s)个地址,即(m-s)位;减去t位用于标记块,还有2^(m-t-s)个地址可以表示一个块,也就是说,一个块可以有2^(m-t-s)个字节的信息。

<font size=3>**5.直接映射高速缓存**</font>

- 1.高速缓存确定一个请求是否命中,然后抽搐被请求字的过程,分为:组选择,行匹配,字抽取
- 2.组选择:从w的地址中抽取组索引;这些位被解释成对应于一个组号的无符号整数
![](http://images2015.cnblogs.com/blog/877181/201610/877181-20161030193602953-1313180539.png)
- 3.行匹配:对于直接映射高速缓存,行匹配是容易而且快的;因为每个组只有一行
![](http://images2015.cnblogs.com/blog/877181/201610/877181-20161030193625734-1554714397.png)
- 4.字匹配:块偏移提供的是这个字的第一个字节是从哪个位置开始的

<font size=3>**6.缓存不命中的种类**</font>

**1.缓存不命中的种类:**
- 1.强制性不命中/冷不命中:即第k层的缓存是空的(称为冷缓存),对任何数据对象的访问都不会命中。通常是短暂事件,不会在反复访问存储器使得缓存暖身之后的稳定状态中出现。
- 2.冲突不命中:由于一个放置策略:将第k+1层的某个块限制放置在第k层块的一个小的子集中,这就会导致缓存没有满,但是那个对应的块满了,就会不命中。
- 3.容量不命中:当工作集的大小超过缓存的大小时,缓存会经历容量不命中,就是说缓存太小了,不能处理这个工作集。
**2.缓存管理:某种形式的逻辑必须管理缓存,而管理缓存的逻辑可以是硬件、软件,或者两者的集合。**
![](http://images2015.cnblogs.com/blog/877181/201610/877181-20161030194235906-1107490827.png)

<font size=3>**三、编写高速缓存友好的代码**</font>

- 1.对局部变量的反复引用是好的,因为编译器能够将它们缓存在寄存器文件中(时间局部性)。
- 2.步长为1的引用模式是好的,因为存储器层次结构中所有层次上的缓存都是将数据存储为连续的块(空间局部性)。


## 教材学习

<font size=3>**1.P394 T6.4**</font>

假设1MB的文件由512字节的逻辑块组成,存储在有如下特性的磁盘驱动器上(旋转速率:10 000RPM,Taveseek=5ms,平均扇区/磁道 = 1000)。
(1)最好的情况:给定逻辑块到磁盘扇区的最好的可能的映射(即,顺序的),估计读这个文件需要的最优时间
(2)随机的情况:如果块是随机地映射到磁盘扇区的,估计读这个文件需要的时间

1MB=2^20字节,即数据存储在2000个逻辑块中;对于磁盘,Taverotation=0.51/10000RPM60secs/1min*1000ms/s=3ms
则:
(1)T=Taveseek+Taverotation+2Tmaxrotation=5ms+3ms+26ms=20ms
(2)在这种情况下,块被随机的映射到扇区上,读2000块的每一块都需要Taveseek+Tavgrotation=8ms。
所以读这个文件的总时间为T = 8ms*2000=16000ms=16s

<font size=3>**2.P415 T6.11**</font>
```在前面dotprod的例子中,在我们对数组x做了填充之后,所有对x和y的引用的命中率是多少?```
在填充了之后,对于x和y数组,只有在引用第0个和第4个元素的时候发生不命中。因而命中率为75%

<font size=3>**3.根据P413图6-32,可以得出:**</font>

1.标记位和索引位连起来唯一地标识了存储器中的每个块
2.当储存块多于缓存组(每组一行)的时候,多个块映射到一个组;这样的块由标记位唯一标识(可能会产生冲突不命中)

## 本周代码托管
<font size=4>**代码驱动的程序设计学习:建立的项目结构**</font>
![](http://images2015.cnblogs.com/blog/877181/201610/877181-20161030204121796-892711131.png)
![](http://images2015.cnblogs.com/blog/877181/201611/877181-20161102210013893-925782450.png)
![](http://images2015.cnblogs.com/blog/877181/201611/877181-20161102210019861-1075193687.png)

<font size=3>**-  [链接](http://git.oschina.net/alovera/week07)**</font>


## 学习进度条

|            | 代码行数(新增/累积)| 博客量(新增/累积)|学习时间(新增/累积)|重要成长|
| --------   | :----------------:|:----------------:|:---------------:  |:-----:|
| 目标        | 5000行            |   30篇           | 400小时            |       |
| 第一周      | 0/0           |   1/2            | 10/10             |   使用虚拟机安装linux系统   |
| 第二周      | 341/341           |   1/3           | 20/30             |   掌握核心的linux命令    |
| 第三周      | 177/518          |   2/5            | 16/46             |  学会了虚拟机上的VC编程     |
| 第五周      | 161/679          |   1/6            | 15/61             |      |
| 第六周      | 73/752         |   1/7            | 15/76             |    安装了Y86处理器   |
| 第七周      | 134/886         |   1/8            | 12/88             |   建立了项目结构   |


## 参考资料
-  [《深入理解计算机系统V2》学习指导](http://www.cnblogs.com/rocedu/p/5826467.html)
-  [代码驱动的程序设计学习](http://www.cnblogs.com/rocedu/p/5927306.html)
-  [深入理解计算机系统](http://www.tuicool.com/articles/Zv6v6n)
posted @ 2016-10-30 20:59  20145212罗天晨  阅读(194)  评论(2编辑  收藏  举报