2018-2019-1 20165226 《信息安全系统设计基础》第5周学习总结
目录
教材学习内容总结
**** ### 1、存储技术易失性存储器
- SRAM和DRAM
- 传统的DRAM与增强的DRAM
- 传统DRAM
①DRAM芯片中的单元(位)被分成了d个超单元,每个超单元都由w个DRAM单元组成, 一个d*w的DRAM共存储dw位信息。超单元被组织成一个r行c列的长方形阵列,rc=d。每个超单元的地址用(i,j)来表示(从零开始)。设计成二维矩阵是为了降低芯片上地址引脚的数量。
②信息通过称为引脚的外部连接器流入/流出芯片,每个引脚携带一个1位信号。
③每个DRAM信号被连接到称为存储控制器的电路,电路每次传输量为8位。行地址i,RAS请求;列地址j,CA
④请求共享相同的DRAM地址引脚。组织成二维阵列而不是线性数组的一个原因是降低芯片上地址引脚的数量。二维阵列阻止的缺点是必须分两步发送地址,这增加了访问时间。
- 增强的DRAM
快页模式DRAM(FPM DRAM):异步控制信号,允许对同一行连续的访问可以直接从行缓冲区得到服务。
扩展数据输出DRAM(EDO DRAM):异步控制信号,允许单独的CAS信号在时间上靠的更紧密一点
同步DRAM(SDRAM):同步的控制信号,比异步的快
双倍数据速率同步DRAM(DDR SDRAM):使用两个时钟沿作为控制信号,使DRAM速度翻倍。
Rambus DRAM(RDRAM):一种私有技术
视频RAM(VRAM):用在图形系统的帧缓冲区中。
-
存储器模块
- 双列直插存储器模块(DIMM):168个引脚,以64位为块传入/传出数据到存储控制器。
- 单列直插存储器模块(SIMM):72个引脚,以32位为块传入/传出数据到存储控制器。
-
访问主存
- 读事务:从主存传送数据到CPU
- 写事务:从CPU传送数据到主存
- 总线:一组并行的导线,能携带地址、数据和控制信号。
- 系统总线:连接总线接口和I/O桥
- 存储器总线:连接I/O桥和主存
非易失性存储器
- ROM(只读存储器)
- ROM可按照它们能够被重编程的次数和对它们进行重编程所用的机制分类为:PROM(可编程ROM),EPROM(可擦写可编程ROM),闪存(基于EEPROM),固态硬盘(SSD,基于闪存)
- 磁盘
-
磁盘构造
-
磁盘操作:寻道、旋转、读取(时间开销主要是寻道时间和旋转延迟造成)
-
逻辑磁盘块:磁盘中有一个小的硬件/固件设备,称为磁盘之气空啊,维护着逻辑块号和实际物理磁盘扇区之间的映射关系。
-
- 固态硬盘(SSD)
- 固态硬盘结构:闪存翻译层与磁盘控制器作用相同,一个闪存由B个块序列组成,每个块由P页组成。
- 数据是以页为单位读写的。只有在一页所属的整个块被擦除后(有效内容拷贝到其他块)才可写这一页。通常页的大小是5124KB,块是由32128页组成。
2、局限性
(1) 时间局部性:被引用过一次的存储器位置很可能在不远的将来再被多次引用。
(2)空间局部性:被引用过一次的存储器位置附近的数据可能在不远的将来被引用。
(3)取指令的局部性:指令也是存储在存储器中的,循环的时间和空间局部性是好的。循环体越小,迭代次数越多,局部性越好。
3、存储器层次结构
存储器层次结构中的缓存
- 高速缓存确定一个请求是否命中,然后抽取出被请求的字的过程,分为三步
- 组选择
- 行匹配
- 字抽取
- 直接映射高速缓存中不命中时,每个组只包含有一行,替换策略是:用心取出的行替换当前的行。
- 一个1 < E < C/B的告诉缓存通常称为E路组相联高速缓存
存储器层次结构示意图
4、高速缓存存储器
通用的高速缓存存储器结构
- 一个计算机系统每个存储地址有m位,形成
M=2^m
个不同的地址。 - 高速缓存被组织成一个有
S=2^s
个高速缓存组的数组,每个组包含E个高速缓存行,每个行是由- 一个B=2^b
字节的数据块、一位有效位以及t=m-(b+s)个标记位组成,唯一标识存储在这个高速缓存行中的块。 - 高速缓存的结构用元组
(S,E,B,m)
来描述,高速缓存的大小C = S * E * B
。
直接映射高速缓存
- 直接映射高速缓存:每个组只有一行的高速缓存。
- 组选择:
- 高速缓存从w的地址中间抽取出s个组索引位
- 组索引位:一个对应于一个组号的无符号整数。
- 行匹配:
- 判断缓存命中的两个充分必要条件:该行设置了有效位;高速缓存行中的标记和w的地址中的标记相匹配
- 字选择:确定所需要的字在块中是从哪里开始的。
组相联高速缓存
- 组相连高速缓存中的组选择:与直接映射高速缓存中的组选择一样,组索引位标识组。
- 组相连高速缓存中的行匹配和字选择:把每个组看做一个小的相关联存储器,是一个(key,value)对的数组,
以key为输入,返回对应数组中的value值。高速缓存必须搜索组中的每一行,寻找有效的行其标记与地址中的相匹配。 - 组相连高速缓存中不命中时的行替换:最简单的替换策略是随机选择要替换的行,其他复杂的策略则使用了局部性原理,例如最不常使用、最近最少使用等。
全相联高速缓存
- 全相连高速缓存中的组选择:只有一个组,没有组索引位。
- 全相连高速缓存中的行匹配和字选择:与组相连高速缓存是一样的,但规模大很多,因此只适合做小的高速缓存,例如虚拟存储系统中的翻译备用缓冲器。
有关写的问题
- 直写:
- 立即将w的高速缓存块写回到紧接着的第一层中
- 缺点是每次写都会引起总线流量。
- 写回:
- 只有当替换算法要驱逐更新过的块时,才能把它写到紧接着的低一层中,由于局部性,写回能显著减少总线流量。
- 缺点是增加了复杂性。
- 另一个问题是如何处理写不命中。
- 写分配:加载相应的低一层中的块到高速缓存中,然后更新这个高速缓存块。 缺点是每次不命中都会导致一个块从低一层传送到高速缓存。
- 非写分配:避开高速缓存,直接把这个字写到低一层中。
高速缓存参数的性能影响
- 不命中率:不命中数量/引用数量
- 命中率:1-不命中率
- 命中时间:从高速缓存传送一个字到CPU所需的时间,包括组选择,行匹配,字抽取的时间。
- 不命中处罚:由于不命中所需要的额外时间。
综合:高速缓存对程序性能的影响
- 存储器山
- 一个程序从存储系统中读数据的速率称为读吞吐量,或者读带宽,通常以兆字节每秒(MB/s)为单位。
- 读带宽的时间和空间局部性的二维函数称为存储器山。
练习
**** - 练习题6.7改变下面函数中循环的次序,使得它以步长为1的引用模式扫描三维数组a:
int sumarray3d(int a[N][N][N])
{
int i,j,k,sum=0;
for(i=0; i<N; i++){
for(j=0; j<N; j++){
for(k=0; k<N; k++){
sum += a[k][i][j];
}
}
}
return sum;
}
答:因为数组中元素是按数组被存储的行优先顺序读取的,所以需要减小相邻读取的步数,以提高性能。
int sumarray3d(int a[N][N][N])
{
int i,j,k,sum=0;
for(i=0; i<N; i++){
for(j=0; j<N; j++){
for(k=0; k<N; k++){
sum += a[i][j][k];
}
}
}
return sum;
}
代码托管与统计
**** [代码托管](https://gitee.com/Sean-Lxs/5226lxs.git) ![](https://img2018.cnblogs.com/blog/1047870/201810/1047870-20181028114305584-1735084491.png)学习进度条
****代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 87/87 | 2/2 | 20/20 | |
第二周 | 71/158 | 1/3 | 12/32 | |
第三周 | 100/258 | 2/5 | 13/45 | |
第四周 | 3265/9750 | 2/7 | 15/60 | |
第五周 | 282/9786 | 1/8 | 8/68 |
尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。
耗时估计的公式
:Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。
-
计划学习时间:8小时
-
实际学习时间:8小时
-
改进情况:
(有空多看看现代软件工程 课件
软件工程师能力自我评价表)