20145319 《信息安全系统设计基础》第7周学习总结
20145319 《信息安全系统设计基础》第七周学习总结
一 教材内容总结
存储技术
-
随机访问存储器(RAM):
- 静态RAM(SRAM):双稳态特性,只要有电,即使有干扰它也会保持值,一般用作高速缓存存储器
- 动态RAM(DRAM):对干扰特别敏感,一般用来作为主存以及图形系统的帧缓冲区
- 静态RAM(SRAM)比动态RAM(DRAM)更快,但也贵很多
- 一般的设计者都将DRAM组织成二维列阵而非线性数组,是为了降低芯片上的地址引脚的数量,但是这样就必须分两步发送单元地址,增加了时间
-
增强的DRAM:
- FPM DRAM
- EDO DRAM
- SDRAM
- DDR SDRAM(DDR,DDR2,DDR3)
- Random DRAM
- VRAM
-
非易失性存储器(ROM):
- SRAM和DRAM都是易失的
- 区分标准:能被重编程的次数和对它们进行重编程所用的机制
- PROM:只能被编程一次
- EPROM:可擦写可编程ROM,依靠紫外线照射过窗口,能被编程的次数达十万次
- FLASH:基于EEPROM,为大量电子设备提供快速而持久的非易失性存储,包括数码相机,手机登,以及固态硬盘(SSD,一种新的基于闪存的磁盘驱动器)
- firmware(固件):存储在ROM设备中的程序
-
访问主存:
- 总线:一组并行的导线,能携带地址、数据的控制信号,分为系统总线和存储总线
- 读事务:从主存传送数据到CPU,例如
mov A,%eax
CPU将地址A放到存储器总线;主存从总线读出A,接收字x,然后将x放到总线上;CPU从总线读出字x,并将它copy到寄存器eax中 - 写事务:从CPU传送数据到主存,例如
mov %eax, A
CPU将地址A放到存储器总线,主存读出这个地址,等待接收数据字;CPU将数据字y放到总路上;主存从总线读数据字y,并将它存储在地址A
-
磁盘存储:
- 磁盘构造:盘片,表面,主轴,RPM,磁道,扇区,柱面
- 磁盘容量:磁盘容量=(字节数/扇区)(平均扇区/磁道)(磁道数/表面)(表面数/盘片)(盘片数/磁盘)
- 磁盘操作:磁盘以扇区大小的块来读写数据,对扇区的访问时间分为三部分,寻道时间,旋转时间,传送时间
- 访问磁盘:CPU使用一种存储器映射I/O技术来向I/O设备发出命令,在使用存储器映射I/O的系统中,地址空间中有一块地址是为与I/O设备通信保留的,称为I/O端口
- 存储方式趋势:不同存储技术的价格和性能属性以截然不同的速率变化着(增加密度从而降低成本比降低访问时间更容易);DRAM和磁盘的性能滞后于CPU的性能
局部性
- 原理:一个良好的计算机程序常常具有良好的局部性,即倾向于引用临近于其他最近引用过的数据项的数据项,或者最近引用过的数据项本身
- 分类:空间局部性,时间局部性
- 有良好局部性的程序运行速度更快:
- 硬件:通过引入高速缓存存储器来保存最近被引用的指令和数据项,从而提高对主存的访问速度
- 操作系统:用主存来缓存磁盘文件系统中最近被使用的磁盘块
- 应用程序:Web浏览器将最近被引用的文档放在本地磁盘上就是一种时间局部性的利用,加快的浏览网页的速度
- 对程序数据引用的局部性:
- 步长n:一个连续变量中,每隔n个元素进行访问
- 顺序引用模式:每次引用步长为1
- 一般而言随着步长增加空间局部性降低
- 局部性小结:
- 重复引用同一个变量的程序有良好的时间局部性
- 对于具有步长为k的引用模式的程序,步长越小,空间局部性越好
- 对于取指令来说,循环有好的时间和空间局部性。循环体越小,循环迭代次数越多,局部性越好
存储器层次结构
- 存储技术:不同的存储技术的访问时间差异很大,速度较快的技术每字节的成本要比速度较慢的技术高,而且容量较小,CPU和主存之间的速度差距在增大
- 计算机软件:一个编写良好的程序倾向于展示出良好的局部性
- 越处在底层的存储设备越慢,但是成本越低,空间更大,且每一层存储设备都是下一层存储设备的缓存
- 存储器层次结构中的缓存:
- 高速缓存(cash):一个小而快速的存储设备
- 块(block):第k层的存储器被划分成的连续的数据对象片,每个块都有自己唯一的地址和名字
- 传送单元(transfer unit):数据总是以块大小为传送单位在k和k+1层拷贝的
- 缓存命中
- 当程序需要第k+1层的某个数据对象d时,首先在当前存储在第k层的一个块中查找d,如果d刚好缓存在第k层中,就称为缓存命中。
- 该程序直接从第k层读取d,比从第k+1层中读取d更快
- 缓存不命中:
- 即第k层中没有缓存数据对象d,之后从第k+1层缓存中取出包含d的那个块。如果第k层缓存已满,就可能会覆盖现存的一个块
- 分类:强制性不命中,冲突不命中,容量不命中
高速缓存存储器
-
早期的计算机系统的存储器层次结构:CPU寄存器、DRAM主存储器和磁盘存储
-
为了弥补cpu和主存之间的性能差距,设计者在两者之间加入了L1,L2,L3三个高速缓存
-
通用的高速缓存存储器结构:
- 高速缓存结构可以用元组(S,E,B,m)描述
- C是高速缓存的大小:C=SEB
- m:每个存储器地址有m位,形成M=2^m个不同的地址
- S:这个数组中有S=2^s个高速缓存组
- E:每个组包含E个高速缓存行
- B:每个行是由一个B=2^b字节的数据块组成的
-
直接映射高速缓存:
- 高速缓存确认一个请求是否命中,然后抽取出被请求的字的过程,分为组选择、行匹配、字抽取三步
-
组相连高速缓存:
- 依旧分为组选择,行匹配,字抽取三步
- 放松了每个组只有一行这个限制
-
全相联高速缓存:
- 是由一个包含所有高速缓存行的组所组成的
编写高速缓存友好的代码:
- 确保代码高速缓存友好的基本方法:
- 让最常见的情况运行得快,即把注意力集中在核心函数的循环上,二忽略其他部分
- 在每个循环内部缓存不命中数量最小
存储器山
- 一个程序从存储系统中读取数据的速率称作吞吐量,或者称作读带宽,一般以MB/s为单位
- 读带宽的时间和空间局部性的二维函数称作存储器山
二 课后练习
- 代码简单的验证局部性对于程序运行速度的影响,以书上p403代码为例子来测试
gcc之后生成可执行文件,运行结果如下
由于书上的函数并不复杂,所以运行时间差距不大,但是sum2函数是使用了步长为N的模式来扫描存储器,空间局限性较差,还是能明显看出sum2的运行时间较长
三 代码托管
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 0/0 | 1/1 | 20/20 | 学习常用linux命令 |
第二周 | 100/100 | 1/2 | 20/40 | 学习vim,gdb等用法 |
第三周 | 100/200 | 1/3 | 15/55 | |
第四周 | 0/300 | 0/3 | 10/65 | |
第五周 | 100/400 | 1/4 | 15/80 | 重温了汇编相关知识 |
第六周 | 0/400 | 1/5 | 15/95 | 学习了Y86 |
第七周 | 100/500 | 1/6 | 15/110 | 学习了存储器相关知识 |
posted on 2016-10-30 15:41 20145319钟轲 阅读(197) 评论(2) 编辑 收藏 举报