2019-2020-1 20175320 《信息安全系统设计基础》第七周学习总结
一、教材学习内容总结
本周我们了解了存储器的层次结构,了解了存储器的种类以及工作方式,并知道了程序代码应该对高速缓存友好。以下是对本章内容的总结。
存储技术
1、随机访问寄存器:
随机访问存储器可分为静态随机访问存储器以及动态随机访问存储器。静态RAM速度快、成本高,通常用作高速缓存,动态RAM对干扰较为敏感,速度较慢,成本较为低廉,常用作系统内存。
- 静态RAM将每个位存储在一个双稳态的存储器单元中,只要有电,它就会永远地保持它的值。DRAM将每个位存储为对一个电容的充电,电容要周期性地进行刷新,且只要有供电,SRAM就会保持不变。
- DRAM中有d个超单元,每个超单元都由w个DRAM组成,而d个超单元的组织为r行c列的组织。
- DRAM中的行地址与列地址使用相同的DRAM地址引脚,且是先将行的内容复制到内部行缓冲区,然后哦再根据列地址找到相应的列。这样虽然减少了地址引脚的数量,但是增加了访问时间。
2、磁盘存储以及固态硬盘
磁盘由盘片组成,一个盘片有两个面,一个面中又包含磁道、扇区以及间隙。一个磁盘的容量等于字节数乘以扇区数乘以磁道数乘以表面数乘以盘片数。固态硬盘由一个或多个闪存芯片和闪存翻译层组成。
- 对扇区的访问时间主要有三个部分:寻到时间、旋转时间和传送时间
- 磁盘中有一个小的硬件/固件设备,称为磁盘控制器,维护着逻辑块号和实际磁盘扇区之间的映射关系
- 闪存由块组成,一个块由页组成,块在写的时候会磨损,且固态硬盘的读取速度快于写的速度
局部性
局部性是指程序倾向于引用邻近于其他最近引用过的数据项的数据项,或者最近引用过的数据项本身。这种倾向性,被称为局部性。局部性通常有两种不同的形式:时间局部性和空间局部性。在一个具有良好时间局部性的程序中,被引用过一次的内存位置很可能在不远的将来再被多次引用。在一个具有良好空间局部性的程序中,如果一个内存位置被引用了一次,那么程序很可能在不远的将来引用附近的一个内存位置。局部性良好的程序可以更加高效地利用存储器。
存储器层次结构
在存储器的层次结构中,一般而言,从高层往低层走,存储设备变得更慢、更便宜和更大,从高层到低层,访问周期越来越长。对于第k层,它作为第k+1层的缓存,第k层的缓存包含第k+1层的一个子集的副本。
- 当程序需要第k+1层的某个数据对象d时,它首先在当前存储在第k层的一个块中查找d。如果d刚好缓存在第k层中,那么这就是缓存命中。
- 当第k层中没有缓存数据对象d,那么就是缓存不命中,当发生缓存不命中时,第k层的缓存从第k+1层缓存中取出包含d的那个块,如果第k层的缓存已经满了,可能就会覆盖现存的一个块。不命中又分为冷不命中、冲突不命中以及容量不命中,我们在编程时首要考虑的就是代码会不会使得高速缓存多次发生冲突不命中。
高速缓存存储器
高速缓存通常被组织为一个有着S个高速缓存组的数组,每个组包含E个高速缓存行,每行有B个字节数据块组成。而每组又有一个有效位,用于标记该行是否有效,t个标记位,用于表示不同的行。
- 高速缓存的大小C可表示为C=S* E * B
- m位地址可找到对应的高速缓存,其中有t位标记,用于表示每组不同的行,s位组索引,;用于表示不同的组,b位块偏移,用于找到所需内容的开始位置。
- 而在实际使用中,高速缓存可分为直接映射高速缓存、组相联高速缓存以及全相联高速缓存。直接映射高速缓存即一个组中只有一个行,组相联高速缓存即一个组中可以有多个行,全相联高速缓存即只有一个组,一个组中有多个行。
- 高速缓存有直写与写回两种情况,而不命中又有写分配与非写分配两种。直写多对应非写分配,写回多是写分配的
- 高速缓存块的大小不宜太大或太小,太大传送时间比较长,太短空间局部性不好,相连度太高会增加命中时间,太低会提高冲突不命中的情况
编写高速缓存友好的代码
对高速缓存友好的代码会让最常见的情况运行的块,且会尽量减小每个循环内部的缓存不命中数量。由于高速缓存读取以及修改的特点,我们在编写代码时尽量确保对局部变量的反复引用,且多使用步长为1的引用模式。
二、教材学习中的问题和解决过程
多为基础概念,没有遇到较大困难。
三、代码调试中的问题和解决过程
本周主要是理论内容,代码量不大,运行过程中并没有碰到问题。
四、代码托管
五、上周考试错题总结
六、其他(感悟、思考等,可选)
本章的内容主要介绍了存储器组织结构,以及高速缓存的运行方式。虽然内容并不是很多,难度也不是很大,但涉及了许多的基础概念,如果基础概念以及名词不太清楚,那么后面基于一些专有名词的内容就会变得比较困难。
七、学习进度条
博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|
目标 | 30篇 | 400小时 | |
第三周 | 1/1 | 13/13 | |
第四周 | 1/2 | 22/35 | |
第五周 | 1/3 | 30/65 | |
第六周 | 1/4 | 25/90 | |
第七周 | 1/5 | 22/112 |
尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。 耗时估计的公式 :Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。
- 计划学习时间:XX小时
- 实际学习时间:XX小时
- 改进情况:
(有空多看看现代软件工程 课件 软件工程师能力自我评价表)