20145214 《信息安全系统设计基础》第7周学习总结
教材学习内容总结
随机访问存储器
-
基本的存储技术包括SRAM存储器、DRAM存储器、ROM存储器和旋转的和固态的硬盘
-
RAM分为静态SRAM和动态DRAM。SRAM比DRAM更快,也更贵。SRAM作为告诉缓存存储器,既可以在CPU芯片上,也可以在片下。DRAM作为主存以及图形系统的帧缓冲区。
-
ROM是非易失的,统称为只读存储器
-
总线是一组并行的导线,能携带地址、数据和控制信号
系统总线——连接CPU和I/O桥 存储器总线——连接I/O桥和主存 I/O总线:I/O桥将系统总线的电子信号翻译成存储器总线的电子信号,也将系统总线和存储器总线连接到I/O总线
磁盘存储
- 磁盘是由盘片构成的,每个盘片有两面或者称为表面,每个表面由一组成为磁道的同心圆组成
- 磁盘容量由记录密度、磁道密度、面密度决定
- 对扇区的访问时间有三个主要部分:寻道时间、旋转时间、传送时间
- 逻辑磁盘块:内存可以看成字节数组、磁盘可以看成块数组
- I/O总线连接了CPU,主存和I/O设备
局部性
- 局部性原理:时间局部性,空间局部性
- 对程序数据引用的局部性
- 步长为k的引用模式:一个连续变量中,每隔k个元素进行访问,就被称为步长为k的引用模式,一般来说,随着步长增加,空间局部性下降
- 取指令的局部性
- 对于取指令来说,循环有好的时间和空间局部性。循环体越小,循环迭代次数越多,局部性越好
存储器层次结构
-
从高层往底层走,存储设备变得更慢、更便宜、更大
-
层次结构中的每一层都缓存来自较低一层的数据对象
-
在任何时刻,第k层的缓存包含第k+1层块的一个子集的拷贝。数据总是以块大小为传送单元在第k层和第k+1层之间来回拷贝的
-
缓存不命中时,第k层缓存会从第k+1层缓存中取出包含d的那个块。如果第k层缓存已满,就可能会覆盖现存的一个块
-
替换(覆盖、驱逐)策略
随机替换策略-随机牺牲一个块 最近最少被使用替换策略LRU-牺牲最后被访问的时间距离现在最远的块
高速缓存存储器
-
高速缓存是一个有S个高速缓存组的数组,每个数组包含E个高速缓存行,每个行包含一个有效位,一些标记位t,一个数据块B。
-
标记位
t=m-(b+s)
唯一地标识存储在这个高速缓存行中的块,有效位指明这个行是否包含有意义的信息。 -
高速缓存的结构将m个地址划分成了t个标记位、s个组索引位和b个块偏移位
-
高速缓存的大小
C = S * E * B
-
高速缓存确定一个请求是否命中,然后抽取出被请求的字的过程,分为三步
1、组选择 2、行匹配 3、字抽取
-
直接映射高速缓存中不命中时,每个组只包含有一行,替换策略是:用心取出的行替换当前的行。
-
一个
1 < E < C/B
的告诉缓存通常称为E路组相联高速缓存 -
一个全相联高速缓存是由一个包含所有高速缓存行的组(
E = C/B
)组成的
练习题完成过程遇到的问题及解决
练习题6.4
- 最好的情况是块被映射到连续的扇区,一旦读/写头定位到了第一个扇区,需要磁盘转两整圈来读所有的块
- 此处1MB文件所有的块数是2000块,无法理解2000块是怎样计算得出的
练习题6.8
- 为了创建一个步长为1的引用模式,必须改变循环的次序,使得最右边的索引变化得最快
- 修改后的代码如下
练习题6.11
- 在对dotprod例子中对数组x定义为
float x[12]
后 - 填充消除了冲突不命中,也就是不会发生
y[0] ~ y[3]
的块被拷贝到组0,覆盖前一次引用拷贝进来的X的值的情况 - 因此有四分之三的引用是命中的
练习题6.13
- 有两个低位是块偏移(CO),由2路组相联高速缓存可得
- 之后三位是组索引(CI),标记位和有效位共有3位
- 剩下的位作为标记
代码托管情况
代码托管链接
根据代码驱动的程序设计学习建立的项目结构
代码托管截图
代码行数统计
其他(感悟、思考等,可选)
- 本周的学习内容主要是了解存储设备的类型和特点,以及局部性原理和缓存思想在存储层次结构中的应用,大部分的知识在前几章的学习中都或多或少有涉及到,比如存储的核心思想是每层存储设备都作为下一层的“缓存”等等,有了之前的基础,这一章的学习不是特别的吃力。
- 通过本周的学习更清楚的了解了存储器的分类,更深入了解了数据传送的过程。在学习到直接映射高速缓存时抽取出被请求的字的过程时还是一知半解,但是后面又学习到组相联高速缓存和全相联高速缓存时,把三种过程综合起来看就能够理解标记、组索引、块偏移各自的作用了。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第零周 | 0/0 | 1/1 | 5/5 | 使用虚拟机安装linux系统,安装ubuntu |
第一周 | 100/100 | 1/2 | 20/25 | 掌握核心的linux命令,了解了linux操作系统 |
第二周 | 76/176 | 1/3 | 30/55 | 学会了虚拟机上的C编程 |
第三周 | 214/390 | 1/4 | 20/75 | 初步学习计算机中各种数的表示和运算 |
第五周 | 138/528 | 1/5 | 25/100 | 通过学习汇编,了解逆向的思想应用 |
第六周 | 150/678 | 1/6 | 30/130 | 安装了Y86处理器,了解了ISA抽象 |
第七周 | 100/778 | 1/7 | 20/150 | 理解了局部性原理和缓存思想在存储层次结构中的应用 |