20145335郝昊 《信息安全系统设计基础》第7周学习总结
20145335 《信息安全系统设计基础》第7周学习总结
教材学习内容总结
随机访问存储器
-
随机访问存储器分为两类:静态的和动态的
-
静态RAM(SRAM):
- SRAM比DRAM更快,但也贵得多
- SRAM将每个位存储在一个双稳态的存储器单元里,可无限期保持在两个不同的电压配置或状态之一
- 只要有供电,SRAM就会保持不变
- SRAM对于诸如光和电噪声这样的干扰不敏感
-
动态RAM(DRAM):
- DRAM将每个位存储为对一个电容的充电
- DRAM存储器单元对干扰非常敏感
- DRAM芯片中的单元被分成了D个超单元,每个超单元都由W个DRAM单元组成,一个d*w的DRAM总共才能除了DW位信息
-
RAS和CAS请求共享相同的DRAM地址引脚
-
DRAM芯片包装在存储器模块中,常见的包装包括:
- 双列直插存储器模块:168引脚
- 单列直插存储器模块:72引脚
-
虽然ROM中有的类型既可以读也可以写,但是他们整体上都称为只读存储器
-
PROM只能被编程一次
-
读事务:从主存传送数据到CPU
-
写事务:从CPU传送数据到主存
-
总线包括:地址总线、数据总线、控制总线、系统总线、存储总线、IO总线
磁盘存储
- 磁盘结构:盘片、磁道、扇区、间隙、柱面
- 磁盘容量由以下技术因素决定:记录密度、磁道密度、面密度
- 磁盘用读/写头来读写存储在磁性表面的位
- 任何时刻,所有的读/写都位于同一个柱面上
- 对扇区的访问时间有三个主要的部分:寻道时间、旋转时间、传送时间
- 内存可以看成字节数组,磁盘可以看成块数组
- 唯一标识对应物理扇区的三元组:盘面、磁道、扇区
- CPU使用一种称为存储器映射I/O的技术来向I/O设备发出命令
局部性
- 局部性两种不同的形式:时间局部性、空间局部性
- 有良好局部性的程序比局部性差的程序运行的更快
- 随着步长的增加,空间局部性下降
- 代码区别于程序数据的一个重要属性是在运行时他是不能被修改的
- 重复引用同一个变量的程序有良好的时间局部性
- 对于具有步长为k的引用模式的程序,步长越小,空间局部性越好
- 对于取指令来说,循环有好的时间和空间局部性。循环体越小,循环迭代次数越多,局部性越好
存储器层次结构
- 存储器层次结构的中心思想是:对于每个k,位于k层的更快更小的存储设备作为位于(k+1)层的更大更慢的存储设备的缓存。数据总是以块大小作为传送单元在第k层和k+1层之间来回拷贝的。第(k+1)层的存储器被划分成连续的数据对象片,称为块;数据总是以块大小为传送单元在相邻两层之间来回拷贝的;在任何时刻,第k层的缓存包括第(k+1)层块的一个子集的拷贝。
高速缓存存储器
-
高速缓存是一个有S个高速缓存组的数组,每个数组包含E个高速缓存行,每个行包含一个有效位,一些标记位t,一个数据块B。
-
标记位t=m-(b+s)唯一地标识存储在这个高速缓存行中的块,有效位指明这个行是否包含有意义的信息。
-
高速缓存的结构将m个地址划分成了t个标记位、s个组索引位和b个块偏移位
-
高速缓存的大小C = S * E * B
-
高速缓存确定一个请求是否命中,然后抽取出被请求的字的过程,分为三步
- 组选择
- 行匹配
- 字抽取
-
直接映射高速缓存中不命中时,每个组只包含有一行,替换策略是:用心取出的行替换当前的行。
-
一个1 < E < C/B的告诉缓存通常称为E路组相联高速缓存
-
一个全相联高速缓存是由一个包含所有高速缓存行的组(E = C/B)组成的
教材学习中的问题和解决过程
- 教材学习中遇到的问题是关于书p396关于访问磁盘的图示,在c图中为什么第三步是从磁盘发出的信号?而且发出的信号为什么没有通过系统总线?后来通过继续看书上对其解释得到了答案。首先从磁盘发出的信号是一个中断信号来通知cpu,而且这个信号是发送到cpu芯片的一个外部引脚上。
课后作业中的问题和解决过程
-
习题6.2
计算这样一个磁盘的容量。它有2个盘片,10 000个柱面,每条磁道平均有400个扇区,每个扇区平均有512个字节
磁盘容量 = (512/400)*400*10000*2*2= 8 192 000 000 字节 = 8.192GB
-
习题6.3
估计访问下面的一个磁盘上的一个扇区需要的时间(以ms为单位)。旋转速率:15000RPM;Taveseek = 8ms;每条磁道的平均扇区数:500
访问时间 = Taveseek+Taverotation+Tavetransfer = 8ms+0.51/15000RPM60secs.min1000ms/s+1/15000RPM1/50060secs/min1000ms/s=8ms+2ms+0.008ms=10.008ms
-
习题6.4
假设1MB的文件由512字节的逻辑块组成,存储在有如下特性的磁盘驱动器上(旋转速率:10 000RPM,Taveseek=5ms,平均扇区/磁道 = 1000)。
(1)最好的情况:给定逻辑块到磁盘扇区的最好的可能的映射(即,顺序的),估计读这个文件需要的最优时间
(2)随机的情况:如果块是随机地映射到磁盘扇区的,估计读这个文件需要的时间
(1)
T=Taveseek+Taverotation+2Tmaxrotation=5ms+3ms+26ms=20ms
(2)在这种情况下,块被随机的映射到扇区上,读2000块的每一块都需要`Taveseek+Tavgrotation=8ms`。所以读这个文件的总时间为`T = 8ms*2000=16000ms=16s`
-
习题6.11
在前面dotprod的例子中,在我们对数组x做了填充之后,所有对x和y的引用的命中率是多少?
在填充了之后,对于x和y数组,只有在引用第0个和第4个元素的时候发生不命中。因而命中率为75%
本周代码托管截图
https://git.oschina.net/20145335/Linux-besti-is-20145335
其他(感悟、思考等,可选)
本周的知识是存储器的层次结构,虽然这些看起来对于我们学习编程没有什么影响,但是当分析出代码的局部性会影响到程序的运行时间时候就会分析到学习理解存储器的层次结构是很重要的。对于本章前面磁盘的读写还是存在问题,但是联系到后面I/O数据传送的时候就理解透彻了,所以这些知识是相互关联的,前后结合仔细分析就会得出结果。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 200/200 | 2/2 | 20/20 | 掌握核心的linux命令,了解了linux操作系统 |
第二周 | 300/500 | 2/4 | 18/38 | 学会了虚拟机上的C编程 |
第三周 | 500/1000 | 3/7 | 22/60 | 初步学习计算机中各种数的表示和运算 |
第五周 | 300/1300 | 2/9 | 30/90 | 通过学习汇编,了解逆向的思想应用 |
第六周 | 300/1500 | 2/11 | 28/110 | 安装了Y86处理器,了解了ISA抽象 |
第七周 | 150/1700 | 2/13 | 30/130 | 学习了存储器的体系结构 |