2017-2018-1 20155225 《信息安全系统设计基础》第九周学习总结
教材学习内容总结
6.1存储技术
- 随机访问存储器(RAM)
- 静态RAM(SRAM):SRAM比DRAM快,作为高速缓存存储器。
具有双稳定状态,只要有电,它就会永远地保存它的值。即使有干扰,当干扰消除时,它能很快地恢复到稳定值。
- 动态RAM(DRAM):作为主存,图形系统的帧缓冲区。
DRAM将每个位存储为对一个电容充电。对干扰非常敏感,电容的电压被干扰之后就永远不会恢复了。
- 传统的DRAM
传统的DRAM被组织成二维阵列,这样做的缺点死你必须分步发送地址,增加了访问时间。
- 内存模块
DRAM芯片封装在内存模块中,它插到主板的拓展槽上。
- 增强的DRAM
快页模式DRAM(FPM DRAM):允许对同一行连续地访问可以直接从行缓冲区得到服务。
拓展数据输出DRAM(EDO DRAM):允许各个CAS信号在时间上靠得更紧密一点。
同步DRAM(SDRAM):比异步的存储器更快地输出它的超单元内容。
双倍数据速率同步DRAM(DDR SDRAM):是对SDRAM的一种增强,通过使用两个时钟沿作为控制信号,使速度翻倍。
视频RAM(VRAM):用于图形系统的帧缓冲区中。
- 非易失性存储器
非易失性的意思断电后不会丢失信息。
- 访问主存
读事务:从内存传送数据到CPU;写事务:从CPU传送数据到主存。需要通过系统总线和内存总线。
- 磁盘存储
- 磁盘构造
磁盘(旋转磁盘)由一个或者多个叠放在一起的盘片组成,封装在一个固定的容器里。盘片有两个表面,盘片中央有一个可以旋转的主轴,固定速度5400~15000转每分钟。整个装置称为磁盘驱动器。
- 磁盘容量
磁盘可以记录的最大位数称为它的最大容量,由记录密度、磁道密度、面密度决定。
- 磁盘操作
磁盘用读/写头来读写存储在磁性表面的位。磁盘以扇区大小的块来读写数据,对扇区的访问时间有三个主要部分:寻道时间、旋转时间、传送时间。
时间主要花在寻道和旋转延迟上。
寻道时间和旋转延迟大致相等,一般直接寻道时间*2。
- 逻辑磁盘块
磁盘中封装有一个磁盘控制器,维护着逻辑块号和物理磁盘扇区之间的映射关系,将磁盘构造抽象为一个B个扇区大小的逻辑块的序列。
- 连接I/O设备
虽然I/O总线比系统总线和内存总线慢,但是它可以容纳种类繁多的第三方I/O设备。
- 访问磁盘
下面这幅图展示计算机如何通过总线访问磁盘。
- 固态硬盘(SSD)
是一种基于闪存的存储技术。读SSD比写要快。
- 存储技术趋势
6.2局部性
局部性原理:程序倾向于引用邻近于其他最近引用过的数据项或者就是最近引用过的数据项本身。
时间局部性:存储器位置多次被引用。
空间局部性:存储器位置附近的位置在不远的将来被引用。
- 对程序数据引用的局部性
步长为一的引用的模式为顺序引用模式。每隔K个元素进行访问,称为步长为K的引用模式。
-
取指令的局部性:循环体具有良好的时间和空间局部性
-
局部性小结
重复引用同一个变量的程序具有良好的时间局部性
对于步长为K的引用模式,K越小,空间局部性越好。
对于取指令,循环具有良好的时间和空间局部性。循环体越小,循环迭代次数越多,局部性越好。
6.3存储器层次结构
- 存储器层次结构中的缓存
高速缓存作为下一层(对它本身来说更大更慢的设备)的缓冲区域。使用高速缓存的过程叫做缓存。
存储器层次结构的中心思想:每层存储设备都是下一层的“缓存”。
- 缓存命中
程序需要K+1层的数据对象d,并且d刚好在K层的一个块中。
-
缓存不命中:与缓存命中相反。
-
缓存不命中的种类
强制性不命中:上一层缓存是空的导致的不命中,也被称为冷缓存。
冲突不命中:缓存够大,由于限制性的放置策略会使K+1层不同对象映射到K层同一个块引起的不命中。
容量不命中:缓存不够大引起的不命中。
- 缓存管理
缓存管理是指,某个东西要将缓存划分成块,在不同的层之间传送块,判定是命中还是不命中,并处理它们。
6.4高速缓存存储器
-
通用的高速缓存存储器结构
存储器地址有m位,形成M=2^m个不同的地址。
高速缓存组:S=2^s位
每组E行高速缓存行
每行1个B=2^b字节的数据块
标记位:t=m-(b+s):唯一标识高速缓存行的块
高速缓存大小C=S* E *B
-
直接映射高速缓存
1.直接映射高速缓存中的组选择
抽取目标地址的对应的S位组索引位。
2.直接映射高速缓存中的行匹配
有效位&&t位标记位和目标地址的标记匹配,同时为真则命中 不命中时的处理方法:行替换 先从下一层取出被请求的块,再在块中组索引,再行匹配(同时有效的话,就可以确认是这个对象了)。由于直接映射高速缓存每组只有一行,所以只需要将新的行替换当前行就行了。
3.直接映射高速缓存中的字选择
块偏移提供的是所需要的字的第一个字节的偏移。
-
以一个例子来理解高速缓存的全过程
在这个例子中,块0,4映射到组0,块1,5映射到组1;块2,6映射到组2;块3,7映射到组3。
1) 读地址0:组0还未加载任何内容进来,所以有效位是0.发生强制不命中。高速缓存从下一层取出块0.块0是由地址0和地址1两个部分组成。
2) 读地址1:命中。
3) 读地址13:属于块6,组2.强制不命中,然后读入块6,m[12],m[13].
4) 读地址8:属于块4,组0.冲突不命中,组0替换为m[8],m[9].
5) 读地址0:属于块0,组0,冲突不命中,组0替换为m[0],m[1]
-
4.直接映射高速缓存中的冲突不命中
-
在这个例子中,假设高速缓存只有组0和组1两个组,一个块是16字节(4个数组元素)。
该程序有很好空间局部性,可是还是会引起冲突不命中。(原因是:每个组只有一行这个限制)
第一次迭代应用X[0],组接下来是Y[0].导致冲突不命中。以后的每次饮用都导致冲突不命中。
解决方案,将代码中的X[8]改成X[12],有[8]改成y[12].这样x[i],y[i] 映射在不同的组,解决了问题。这样的方法叫做在数组后放入B字节的填充。
教材学习中的问题和解决过程
(一个模板:我看了这一段文字 (引用文字),有这个问题 (提出问题)。 我查了资料,有这些说法(引用说法),根据我的实践,我得到这些经验(描述自己的经验)。 但是我还是不太懂,我的困惑是(说明困惑)。【或者】我反对作者的观点(提出作者的观点,自己的观点,以及理由)。 )
- 问题1:XXXXXX
- 问题1解决方案:XXXXXX
- 问题2:XXXXXX
- 问题2解决方案:XXXXXX
- ...
代码调试中的问题和解决过程
- 问题1:XXXXXX
- 问题1解决方案:XXXXXX
- 问题2:XXXXXX
- 问题2解决方案:XXXXXX
- ...
代码托管
(statistics.sh脚本的运行结果截图)
上周考试错题总结
- 错题1及原因,理解情况
- 错题2及原因,理解情况
- ...
结对及互评
点评模板:
- 博客中值得学习的或问题:
- xxx
- xxx
- ...
- 代码中值得学习的或问题:
- xxx
- xxx
- ...
- 其他
本周结对学习情况
- [结对同学学号1](博客链接)
- 结对照片
- 结对学习内容
- XXXX
- XXXX
- ...
其他(感悟、思考等,可选)
第六章概念性的知识比较多,需要我们从抽象的对计算机的存储概念,深入到具体的物理实现方式。通过构建一个框图、结构层次图,可以理清思路。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 200/200 | 2/2 | 20/20 | |
第二周 | 300/500 | 2/4 | 18/38 | |
第三周 | 500/1000 | 3/7 | 22/60 | |
第四周 | 300/1300 | 2/9 | 30/90 |
尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。
-
计划学习时间:XX小时
-
实际学习时间:XX小时
-
改进情况:
(有空多看看现代软件工程 课件
软件工程师能力自我评价表)