2017-2018-1 20155205 《信息安全系统设计基础》第九周学习总结
学习目标
1.了解常见的存储技术(RAM、ROM、磁盘、固态硬盘等)
2.理解局部性原理
3.理解缓存思想
4.理解局部性原理和缓存思想在存储层次结构中的应用
5.高速缓存的原理和应用
教材学习内容总结
一、随机访问存储器
随机存取存储器(RAM,Random-Access Memory)有两种类型:SRAM和DRAM,SRAM非常快,不需要定期刷新,通常用在处理器作缓存,但是比较贵;DRAM需要刷新,通常用作主存。无论是SRAM还是DRAM,一旦不通电,所有的信息都会消失。
静态RAM
SRAM将每个位存储在一个双稳态(bistable)的存储器单元里。
每个单元是用一个六晶体管电路来实现的。它可以无限期地保持在两个不同的电压配置(configuration)或状态(state)之一。
动态RAM
DRAM将每个位存储为对一个电容的充电。
二、磁盘存储
磁盘以扇区大小的块来读写数据。对扇区的访问时间主要有三个部分:
- 寻道时间 seek time
- 旋转时间 rotational time
- 传送时间 transfer time
磁盘的访问时间是SRAM的40000倍,是DRAM的2500倍。
设备可以自己执行读或者写总线事务,而不需要CPU干涉的过程,这个过程称为直接存储器访问(Direct Memory Access,DMA)
三、局部性
局部性通常有两种形式:
-
时间局部性(temporal locality)
时间局部性指的是:被引用过一次的存储器位置在未来会被多次引用(通常在循环中)。
-
空间局部性(spatial locality)
如果一个存储器的位置被引用,那么将来他附近的位置也会被引用。
四、高速缓存存储器
-
CPU寄存器文件和主存之间插入一个小的SRAM高速缓存存储器——L1高速缓存(一级缓存)
-
在L1高速缓存和主存之间插入一个更大的高速缓存——L2高速缓存
-
比L2更大的高速缓存——L3高速缓存
教材学习中的问题和解决过程
-
问题1:局部性原理在存储层次结构中是怎样应用的?
-
问题1解决方案:
- 利用时间局部性:由于时间局部性,同一数据对象可能会多次被使用。一旦一个数据对象在第一次不命中时被拷贝到缓存中,就会期望后面对该目标有一系列的访问命中。因为缓存比第一层的存储设备更快,对后面的命中的服务会比最开始的不命中快很多。
- 利用空间局部性:块通常包含有多个数据对象。由于空间局部性,我们会期望后面对该块中其他对象的访问能够补偿不命中后拷贝该块的花费。
-
问题2:高速缓存中读取的具体步骤?
-
问题2解决方案:
具体在从缓存中读取一个地址时,首先我们通过set index确定要在那个set中寻找,确定后利用tag和同一个set中的每个line进行对比,找到tag相同的那个line,最后再根据block offset确定要从line的那个位置读起。
当E = 1时,也就是每个set只有一个line的时候,称之为直接映射高速缓存(Direct Mapped Cache),如下图所示:
直接映射高速缓存的过程分为三步:组选择、行匹配、字抽取。
如果缓存不命中,那么它需要从存储器层次结构的下一层取出被请求的块,然后将新的块存储在组索引位指示的组中的一个高速缓存行中。
代码调试中的问题和解决过程
本周未遇到代码调试问题。
代码托管
上周考试错题总结
- 错题1:
关于代码 int main(){} 说法正确的是()
A .返回值是0
B .返回值不确定
C .会调用exit(0)
D .返回值大于0
E .上面代码运行完,在命令行中运行echo $? 的值是0
-
分析:选A、C、E。main中不调用exit,会补上exit(0)
-
错题2:x86-64 Linux中,用户模式进程无法访问内核数据结构的内容。
-
分析:是错的。根据p510的内容,/proc文件系统允许用户模式进程访问内核数据结构的内容。
-
错题3:异步异常是同处理器外部的I/O设备中的事件产生的(硬件产生),同步异常是执行一条指令的直接产物(软件产生)。下面是同步异常的是()
A . 中断
B . 陷阱
C . 故障
D . 终止
- 分析:除了中断是异步发生的,其他三个都是同步的!
结对及互评
点评模板:
- 博客中值得学习的或问题:
- xxx
- xxx
- ...
- 代码中值得学习的或问题:
- xxx
- xxx
- ...
- 其他
本周结对学习情况
- [20155218](博客链接)
- 结对照片
- 结对学习内容
- XXXX
- XXXX
- ...
其他(感悟、思考等,可选)
这一章重点是掌握书本上的知识。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 65/65 | 1/1 | 10/10 | |
第三周 | 120/185 | 2/3 | 15/15 | |
第五周 | 375/560 | 3/6 | 14/29 | |
第六周 | 287/847 | 1/7 | 14/43 | |
第七周 | 575/1422 | 2/8 | 13/56 | |
第八、九周 | 500/1922 | 3/11 | 30/86 |
尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。
-
计划学习时间:12小时
-
实际学习时间:12小时
-
改进情况:
(有空多看看现代软件工程 课件
软件工程师能力自我评价表)