20155326《信息安全系统设计基础》第9周学习总结
教材学习内容总结:
- 随机访问存储器:
1)静态RAM(SRAM):
用来作为高速缓存存储器,相对访问时间短,存取快.
每个位存储在一个双稳态的存储器单元里。
双稳态:电路可以无限期的保持在两个不同的电压配置或者状态之一。只要供电,就会保持不变。即使有干扰,例如电子噪音来扰乱电压,当干扰消除后,电路就会恢复到稳定值。
2)动态RAM(DRAM):
用来作为主存以及图形系统的帧缓冲区。
将每个位存储为对一个电容的充电,当电容的电压被扰乱之后,他就永远都不会再恢复了。暴露在光线下会导致电容电压改变。
3)静态和动态特征比较:
非易失性存储器(POM是以他们能够被重编程的次数和机制来区分的):
PROM(可编程ROM) 只能被编程一次
EPROM(可擦写可编程ROM)可以达到1000次
EEPROM(电子可擦除PROM)可以达到10^5次FLASH(闪存):
一类非易失性存储器
一种重要的存储技术
4)固件:存储在ROM设备中的程序
5)总线:
总线事务:
读事务:从主存到cpu
写事务:从cpu到主存
总线是一组并行的导线,能携带地址数据和控制信号
总线连接方式:
系统总线:连接cpu和I/O桥
存储器总线:连接I/O桥和主存
I/O桥也将系统总线和存储器总线连接到I/O总线上
6)磁盘存储:盘片正反两面,表面覆盖着磁性记录材料。
每个表面是由磁道构成。磁道又被划分为扇区和间隙。
磁盘是由多个盘片构成
7)磁盘操作:
寻道时间(Tseek):移动传动臂到目标扇区所需的时间通常3-9ms
旋转时间(Trotation):驱动器等待目标扇区的第一个位旋转到读写头下
传送时间(Ttransfer):驱动器开始读写该扇区内容的时间
传送时间依赖于:旋转速度和每条磁道的扇区数目
- 局部性:
1)对程序数据引用的局部性
时间局部性(temporal locality):被引用过一次的存储器位置在未来会被多次引用(通常在循环中)。
空间局部性(spatial locality):如果一个存储器的位置被引用,那么将来他附近的位置也会被引用。
一个连续向量中,每隔k个元素进行访问,被称为步长为k的引用模式,具有步长为1的引用模式称为顺序引用模式,随着步长增加空间局部性下降。
双重嵌套循环按照行优先顺序读取数组元素。(因为C数组在存储器中是按照行顺序来存放的)
2)取指令的局部性
程序指令是存放在存储器中的,CPU读取这些指令的过程中评价一个程序关于取指令的局部性。
代码区别与程序数据的一个重要属性就是在运行时指令是不能被修改的。
3)重复引用同一个变量的程序有良好的时间局部性
对于具有步长为k的引用模式的程序,步长越小,空间局部性越好。
对于取指令来说,循环具有良好的时间和空间局部性。循环体越小,迭代次数越多局部性越好。
- 存储器层次结构:
1)中心思想:每层设备都是下一层的缓存
2)缓存命中
当程序需要第k+1层的某个数据对象d时,首先在当前存储在第k层的一个块中查找d,如果d刚好缓存在第k层中,就称为缓存命中。
该程序直接从第k层读取d,比从第k+1层中读取d更快。
3)缓存不命中
即第k层中没有缓存数据对象d。
这时第k层缓存会从第k+1层缓存中取出包含d的那个块。如果第k层缓存已满,就可能会覆盖现存的一个块:
覆盖一个现存的块的过程称为替换/驱逐这个块。
被驱逐的块有时也称为牺牲块。
- 缓存不命中的种类
1)强制性不命中/冷不命中:
即第k层的缓存是空的(称为冷缓存),对任何数据对象的访问都不会命中。通常是短暂事件,不会在反复访问存储器使得缓存暖身之后的稳定状态中出现。
2)冲突不命中
由于一个放置策略:将第k+1层的某个块限制放置在第k层块的一个小的子集中,这就会导致缓存没有满,但是那个对应的块满了,就会不命中。
第k+1层的第i块,必须放置在第k层的块(i mod 4)中,这种限制性的放置策略引起冲突不命中。
3)容量不命中:
当工作集的大小超过缓存的大小时,缓存会经历容量不命中,就是说缓存太小了,不能处理这个工作集。
当工作集的大小超过缓存的大小时
4)放置策略:
发生了不命中,第k层的缓存就必须执行某个放置策略,确定把它从第k+1层中取出来的块放在哪里
- 高速缓存存储器:
1)通用的高速缓存存储器结构
一个计算机系统每个存储地址有m位,形成M=2^m个不同的地址。
高速缓存被组织成一个有S=2s个高速缓存组的数组,每个组包含E个高速缓存行,每个行是由一个B=2b字节的数据块、一位有效位以及t=m-(b+s)个标记位组成,唯一
标识存储在这个高速缓存行中的块。
高速缓存的结构用元组(S,E,B,m)来描述,高速缓存的大小C = S * E * B。
s个组索引位:一个无符号整数,说明字必须存储在哪个组中。
t个标记位:组中的哪一行包含这个字。
b个块偏移位:在B个字节的数据块中的字偏移。
2)直接映射的高速缓存
每组只有一行(E=1)的高速缓存称为直接映射高速缓存。高速缓存确定一个请求是否命中,然后抽取出被请求字的过程分为三步:1)组选择,2)行匹配,3)字抽取。
直接映射高速缓存中的组选择:高速缓存从要抽取的字的地址中抽取出S个组索引位,这些位被解释成一个对应于一个组号的无符号整数。
直接映射高速缓存中的行匹配:当且仅当设置了有效位,而且高速缓存行标记与w的地址中的行标记相匹配时,这一行中包含w的一个拷贝。
直接映射高速缓存中的字抽取:块偏移位提供了所需要的字的第一个字节的偏移。
直接映射高速缓存中不命中时的行替换:需要从存储器层次结构中的下一层取出被请求的块,然后将新的块存储在组索引位指示的组中的一个高速缓存行中。
教材学习过程中遇到的问题:
- 题目1:
解决过程:
由书上公式及例题得出答案应为:
- 题目2:
根据书上公式以及例题
得出答案为10ms
- 题目3:
遇到的问题及解决方法:
问题1:输入命令时显示could not get lock /var/lib/dpkg/lock -open
解决方法:出现这个问题是因为资源被锁不可用搜索后得知可以输入以下命令:
sudo rm /var/cache/apt/archives/lock
sudo rm /var/lib/dpkg/lock
代码托管
本周学习总结:
这周学习主要是课本知识与概念上学习,有些抽象不那么容易真正理解还需要多多看看题。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 0/0 | 1/1 | 10/20 | |
第二周 | 57/100 | 1/1 | 20/30 | |
第三周 | 100/100 | 1/1 | 30/30 | |
第四周 | 233/200 | 1/1 | 20/20 | |
第五周 | 267/200 | 1/1 | 20/20 | |
第六周 | 220/2000 | 3/1 | 40/20 | |
第七周 | 362/300 | 1/1 | 30/30 | |
第八周 | 3000/300 | 3/1 | 45/30 | |
第九周 | 596/300 | 3/1 | 45/30 |
参考文献:学习指导