20145336张子扬 《信息安全系统设计基础》第7周学习总结
20145336张子扬 《信息安全系统设计基础》第7周学习总结
教材学习内容总结
学习目标:
- 了解常见的存储技术(RAM、ROM、磁盘、固态硬盘等)
- 理解局部性原理
- 理解缓存思想
- 理解局部性原理和缓存思想在存储层次结构中的应用
- 高速缓存的原理和应用
三种常见存储技术:RAM、ROM和磁盘
随机访问存储器RAM分为静态RAM(SRAM)和动态RAM(DRAM)
SRAM
用来作为高速缓存储存器,SRAM将每个位存储在一个双稳态的存储器单元里,每个单元是用一个六晶体管电路来实现的。它可以无限制地保持在两个不同的电压配置或状态之一。
SRAM的双稳态特性,只要有电,它就会永远地保持它的值,即使有干扰,如电子噪音,来扰乱电压,当干扰消除,电路也能恢复到稳定值。
DRAM
用来作为贮存以及图形系统的帧缓冲区
对干扰特别敏感,当电容的电压被扰乱之后,它就永远不会恢复了。暴露在光线下会导致电容电压改变。
从DRAM中读出超单元
- 存储器发送行地址2,DRAM将行2的整个内容考至内部行缓冲区
- 存储器发送列地址1,DRAM考出超单元(2,1)中的8位
增强的DRAM
- 快页模式(FPM DRAM)
- 数据拓展输出(EDO DRAM)
- 双倍数据速率同步(DDR SDRAM)
- 视频(VRAM)
- Rambus DRAM(RARAM)
非易失性存储器(ROM)
即使是在断电后,他们依然保存着它们的信息。
- PROM只能被编程一次
- 可擦写可编程ROM(EPROM):能用紫外线光照清楚单元内容,1000次
- 闪存(flashmemory)
访问主存
数据流通过总线的共享电子电路在处理器和主存之间传递,每次CPU和贮存之间的数据传送都是通过总线事物完成的
读事务:从主存传送数据到CPU
写事务:从CPU传送数据到主存
总线是一组并行的导线,能携带地址、数据和控制信号
I/O桥将系统总线的电子信号翻译成存储器总线的电子信号
存储器读写事务
movl A,%eax
- CPU将地址A放到系统总线上。I/O桥将信号传递到系统总线
- 主存感觉到了存储器总线上的地址信号,从存储器总线读地址,从DRAM取出数据字,并将数据写道存储器总栈
- I/O桥将存储器总线信号翻译成系统总线信号,然后沿着系统总线传递。
movl %eax,A
- CPU将地址放到系统总线上。存储器从存储总线读地址,并等待数据到达
- cpu将%eax中的数据字拷贝到系统总线
- 主存从存储器总线独处数据字,并且将这些位存储到DRAM中
磁盘存储
由盘片构成,每个盘片有两面或者称为表面,表面覆盖着磁性记录材料。盘片中央有一个可以旋转的主轴,使得盘片以固定的旋转速率旋转,通常是5400~15000转每分钟(RPM)
每个表面是由一组称为磁道的同心圆组成;每个磁道被划分成一组扇区;每个扇区包含相等数量的数据位(通常是512字节);这些数据编码在扇区上的磁性材料中。扇区之间由一些间隙分隔开,这些间隙中不存在数据位。间隙存储用来标识扇区的格式化位。
记录密度:磁道一英寸的段可以放入的位数
磁道密度:从盘片中心出发半径上一英寸的段内可以有的磁道数
面密度:记录密度与磁道密度的乘积
磁盘容量=字节数平均扇区数磁道数表面数盘面数
任何时刻,所有的读写头都位于同一柱面上。
磁盘以扇区大小的块来读写数据。
对扇区的访问时间有三个主要的部分:寻道时间、旋转时间和传送时间
寻道时间:为了读取某个目标扇区的内容,传动臂把读/写头首先定位到包含目标扇区的磁道上,所需时间即为寻道时间
寻道时间:依赖于读写头以前的位置和转动臂在盘面上移动的速度。
最大旋转时间 = 1/最大旋转数率*1000ms/sec
平均旋转时间 = (1/2) * 最大旋转时间*1000ms/sec
平均传送时间 = (1/最大旋转数率) * (1/每磁道的平均扇区数)*1000ms/sec
连接到I/O设备
像图形卡、监视器、鼠标、键盘和磁盘这样的输入输出设备,都是通过I/O总线连接到CPU和主存的
系统总线和存储器总线是与CPU相关的,I/O总线设计成与底层CPU无关。
访问磁盘
CPU使用一种存储器映射I/O技术来向I/O设备发出命令,在使用存储器映射I/O的系统中,地址空间中有一块地址是为与I/O设备通信保留的,称为I/O端口。当一个设备连接到总线时,它与一个或多个端口相连。
直接存储器访问:设备可以自己执行读或者写总线事务,而不需要CPU干涉的过程。这种数据传送称为DMA传送。
固体磁盘
一个SSD包由一个或多个闪存芯片和闪存翻译层组成,闪存芯片替代传统旋转磁盘中机械驱动器;闪存翻译层是一个硬件/固件设备,替代磁盘控制器,将对逻辑块的请求翻译成对底层物理设备的访问。
性能特性
顺序读和写(CPU按顺序访问逻辑磁盘块)性能相当,顺序读比顺序写稍快一点。
随机顺序访问逻辑块时,写比读慢一个数量级。
优点是由半导体构成,没有移动的部件,随机访问时间比旋转磁盘要快、能耗低、结实
缺点反复写之后SSD更容易磨损
局部性原理
他们倾向于引用临近于其他最近引用过的数据项的数据项,或者最近引用过的数据项本身。
时间局部性
在有一个良好时间局部性的程序中,引用过一次存储器位置很可能在不远的将来再次被多次引用
硬件层:引入高速缓存存储器来保存最近被引用的指令和数据项,从而提高对主存的访问速度。
操作系统级:统使用主存作为虚拟地址空间最近被引用块的高速缓存,用主存来缓存磁盘文件系统中最近被使用的磁盘块。
对程序数据引用的局部性
顺序访问:
步长为k的引用模式:每隔k个元素进行访问。
一般来说,随着步长增加,空间局部性下降。
在第一幅图中,访问顺序是很规整的步长为1,拥有良好的局部性
在第二幅途中,访问顺序很杂乱,步长为2,没有第一幅图的局部性那么好,访问时间也会增加
存储器层次结构
存储技术:不同的存储技术的访问时间差异很大,速度较快的技术每字节的成本要比速度较慢的技术高,而且容量较小,CPU和主存之间的速度差距在增大
高速缓存与缓存:是一个小而快速的存储设备,它作为存储在更大、更慢的设备中的数据对象的缓冲区域。
存储器层次结构的中心思想:对于每个k,位于k层的更快更小的存储设备作为位于k+1层的更大更慢的存储设备的缓存。
数据总是以块大小为传送单元在第k层与第k+1层之间来回拷贝。任一对相邻的层次之间块大小是固定的,但是其他的层次对之间可以有不同的块大小。
缓存命中
当程序需要第k+1层的某个数据对象d时,首先在当前存储在第k层的一个块中查找d,如果d刚好缓存在第k层中,就称为缓存命中。
缓存不命中
即第k层中没有缓存数据对象d。这时第k层缓存会从第k+1层缓存中取出包含d的那个块。如果第k层缓存已满,就可能会覆盖现存的一个块.
通用的高速缓存存储器结构
- m:每个存储器地址有m位,形成M=2^m个不同的地址
- S:这个数组中有S=2^s个高速缓存组
- E:每个组包含E个高速缓存行
- B:每个行是由一个B=2^b字节的数据块组成的
标记位:t=m-(b+s)个,唯一的标识存储在这个高速缓存行中的块
高速缓存的大小/容量C:C=SEB
地址最大数量:M=2^m
组索引位数量:s=log2(S)
块偏移位移数量:b=log2(B)
直接映射高速缓存:高速缓存确定一个请求是否命中,然后取出被请求的字的过程,分为三步:1组选择2行匹配3字抽取
直写:立即将w的高速缓存块写回到紧接着的第一层中 ,但是每次写都会引起总线流量
写回:只有当替换算法要驱逐更新过的块时,才能把它写到紧接着的低一层中,由于局部性,写回能显著减少总线流量,但是增加了复杂性。高速缓存必须为每个高速缓存行维护一个额外的修改位,表明这个高速缓存块是否被修改过
写分配:加载相应的低一层中的块到高速缓存中,然后更新这个高速缓存块,但是每次不命中都会导致一个块从低一层传送到高速缓存
非写分配:避开高速缓存,直接把这个字写到低一层中
教材学习中的问题和解决过程
在学习硬件缓存的放置策略时,书上说k+1的0、4、8、12放在k的块1,k+的1、5、9、13放在k的块2,如果说现在地k+1层的块4要放置在第k层,理应放在块1中,如果现在块1有数据,块2却没数据,k+1层的块4会依然放在k层的块1中还是放在空的块2中。
在git上传代码时,git remote add origin + 网页链接时输错路劲了,导致git无法上传。在请教同学后,知道了git remote rm origin可以删除路径,成功解决了困难。
代码调试中的问题和解决过程
代码托管链接:https://git.oschina.net/Zziyang/CS05
本周代码托管截图
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第二周 | 0/0 | 1/2 | 19/20 | |
第三周 | 80/80 | 1/3 | 25/44 | |
第四周 | 110/190 | 1/4 | 23/67 | |
第五周 | 60/250 | 2/6 | 26/93 | |
第六周 | 80/330 | 2/8 | 25/118 | |
第七周 | 60/390 | 1/9 | 25/133 |