20145330 第7周《信息安全系统设计基础》
20145330 第7周《信息安全系统设计基础》
了解存储设备的类型和特点;重点理解局部性原理和缓存思想在存储层次结构中的应用
教材学习内容总结
6.1存储技术
- 随机访问存储器(RAM)
- 1.静态RAM(SRAM)
- 每位晶体管数:6
- 相对访问时间短,存取快
- 双稳态特性,持续
- 对诸如光和电噪声这样的干扰不敏感
- 相对花费高
- 应用:高速缓存存储器
- 2.动态RAM(DRAM)
- 每位晶体管数:1
- 相对访问时间长
- 不持续,需要不断刷新
- 对干扰非常敏感
- 应用:主存,帧缓冲区
- 3.传统的DRAM
- DRAM芯片中的单元被分成d个超单元,每个超单元由w个DRAM单元组成
- 每个DRAM芯片被连接到某个称为存储控制器的电路
- 行地址i(RAS)
- 列地址j(CAS)
- RAS CAS共享相同的DRAM地址引脚
- 4.存储器模块
- DRAM芯片包装在存储器模块中
- 5.增强的DRAM
- FPM DRAM:允许对同一行连续的访问可以直接从行缓冲区得到服务
- EDO DRAM:扩展数据输出DRAM
- SD DRAM:同步DRAM
- DDR DRAM:双倍数据速率同步DRAM
- VRAM:视频RAM
- 6.非易失性存储器(POM是以他们能够被重编程的次数和机制来区分的)
- PROM(可编程ROM)
- 只能被编程一次
- EPROM(可擦写可编程ROM)
- 可以达到1000次
- EEPROM(电子可擦除PROM)
- 可以达到10^5次
- FLASH(闪存):
- 一类非易失性存储器
- 一种重要的存储技术
- 固件:存储在ROM设备中的程序
- PROM(可编程ROM)
- 1.静态RAM(SRAM)
- 磁盘存储
- 磁盘构造
- 磁盘是由一个或多个叠放在一起的盘片组成
- 磁盘结构:盘片、磁道、扇区、间隙、柱面;磁盘驱动器
- 磁盘容量
- 记录密度
- 磁道密度
- 面密度
- 磁盘容量=字节数 * 平均扇区数 * 磁道数 * 表面数* 盘片数
- 习题6.2
- 磁盘操作
- 寻道时间(Tseek):移动传动臂到目标扇区所需的时间
- 通常3-9ms
- 旋转时间(Trotation):驱动器等待目标扇区的第一个位旋转到读写头下
- 传送时间(Ttransfer):驱动器开始读写该扇区内容的时间
- 传送时间依赖于:旋转速度和每条磁道的扇区数目
- 习题6.3
- 寻道时间(Tseek):移动传动臂到目标扇区所需的时间
- 逻辑磁盘块
- 读取一个磁盘扇区的数据到主存-发送命令到磁盘控制器-读取某个逻辑块号
- 内存可以看成字节数组、磁盘可以看成块数组
- 习题6.4
- 总线
- 总线连接了CPU、主存和I/O设备
- 第三方I/O设备
- USB
- 适配器
- 主机总线适配器
- 访问磁盘
- CPU通过将命令、逻辑块号和目的存储器地址写到与磁盘相关联的存储器映射地址,发起一个磁盘读
- 磁盘控制器读扇区,并执行到主存的DMA传送
- DMA(直接存储器访问):设备可以自己执行读或者写总线事务,而不需要CPU干涉的过程。
-
当DMA传送完成时,磁盘控制器用中断的方式通知CPU
6.2局部性
- 磁盘构造
- 时间局部性
- 被引用过一次的存储器位置很可能在不远的将来再多次被引用
- 空间局部性
- 程序在不远的将来引用附近一个存储器位
- 重复引用同一个变量的程序有良好的时间局部性
- 步长越小,空间局部性越好
- 步长为1最好
-
习题6.8 6.9
6.3 存储器层次结构
- 存储器层次结构:
- 从高层往底层走,存储设备变得更慢、更便宜和更大
- 最高层:少量快速的CPU寄存器
- 接下来:小型到中型的基于SRAM的高速缓存存储器
- 打的基于DRAM的主存
- 慢速但是容量很大的本地磁盘
- 最后一层:附加的远程服务器上的磁盘
- 高速缓存:小而快速的存储设备,作为存储在更大更慢的设备中的数据对象的缓冲区域。
- 缓存:使用高速缓存的过程
- 缓存命中/缓存不命中
-
中心思想:每层设备都是下一层的缓存
6.4 高速缓存存储器
- 通用的高速缓存存储器结构
- 将m个地址位划分成了t个标记位、s个组索引位和b个块偏移位
- 结构描述(S,E,B,m)
- 习题6.10
- 直接映射高速缓存
- E(高速缓存行数)=1
- 高速缓存确定请求是否命中过程:
- 1.组选择
- 2.行匹配
- 3.字抽取
- 习题:6.11 6.12
- 组相关高速缓存
- 1<E<C/B
- 全相联高速缓存
- E=C/B
- 习题6.13
- 有关写的问题
- 直写:立即将w的高速缓存块写回到紧接着的第一层中
- 写回:只有当替换算法要驱逐更新过的块时,才能把它写到紧接着的第一层中
- 写分配:加载相应的第一层中的块到高速缓存中,然后更新这个高速缓存
-
非写分配:避开高速缓存,直接把这个字写到第一层中
代码调试中的问题和解决过程
通过过学习王嘉澜同学的博客将代码管理并上传
教材学习中的问题和解决过程
- 6.4
- 问题:通过表格给的参数如何看出文件由2000个512字节的逻辑块组成
- 解决方法:
- 6.8
- 问题:如何改变使得以步长为1的引用模式扫描三维数组a
- 解决方法:步长为1时空间局部性最好,必须改变循环次数。
- 由sum+=a[k][i][j]得,循环由里到外为kij
- 6.9
- 问题:对三个函数就空间局部性进行排序
- 解决方法:同理习题6.8,解决问题的关键在于想象出数组是如何在存储器中排列的,然后分析引用模式。
- 通过给的数组结构发现1函数以步长为1的引用模式访问数组,明显具有最好空间局部性
- 函数2一次扫N个结构中每一个,但在每个结构中不以步长为1
- 函数3不仅在每个结构中跳来跳去,还从结构跳到结构
- 6.10
- 问题:已知m,C,B,E,计算S,t,s,b
- 解决方法:通过表格中给出参数信息与之前的公式进行带值运算
- S=C/(B*E)
- s=log2(S)
- b=log2(B)
- t=m-(s+b)
本周代码托管
-
托管链接:https://git.oschina.net/20145330swx/Linux
感悟与思考
-
这周有很多概念要去理解与记忆,熟能生巧,多进行练习慢慢就能比之前理解得更深刻。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 200/200 | 2/2 | 20/20 | |
第二周 | 300/500 | 2/4 | 18/38 | |
第三周 | 500/1000 | 3/7 | 22/60 | |
第四周 | 000/1000 | 2/9 | 30/90 | |
第五周 | 100/1200 | 1/10 | 30/120 | |
第六周 | 000/1200 | 1/11 | 30/150 | |
第七周 | 100/1300 | 1/12 | 30/170 |