20145211《信息安全系统设计基础》第七周学习总结————世之奇伟,瑰怪,非常之观,常在于险远
教材学习内容总结
存储器层次结构
存储技术
随机访问存储器
- 随机访问存储器分为:静态的SRAM、动态的DRAM
- 静态RAM:
SRAM的特点:存储器单元具有双稳态特性,只要有电就会永远保持它的值,干扰消除时,电路就会恢复到稳定值。 - 动态RAM:
DRAM的特点:每一位的存储是对一个电容的充电;对干扰非常敏感。
用途:数码照相机和摄像机的传感器 - DRAM存储不稳定的应对机制:
存储器系统必须周期性地通过读出,或者重写来刷新存储器的每一位;
使用纠错码 - SRAM和DRAM的区别
只要有电,SRAM就会保持不变,而DRAM需要不断刷新;
SRAM比DRAM快;
SRAM对光和电噪声等干扰不敏感;
SRAM比DRAM需要使用更多的晶体管,所以更昂贵 - 传统的DRAM
DRAM芯片中的单元(位)被分成了d个超单元,每个超单元都由w个DRAM单元组成, 一个d*w的DRAM共存储dw位信息。超单元被组织成一个r行c列的长方形阵列,rc=d。每个超单元的地址用(i,j)来表示(从零开始)。设计成二维矩阵是为了降低芯片上地址引脚的数量。
信息通过称为引脚的外部连接器流入/流出芯片,每个引脚携带一个1位信号。
每个DRAM信号被连接到称为存储控制器的电路,电路每次传输量为8位。行地址i,RAS请求;列地址j,CA
请求共享相同的DRAM地址引脚。组织成二维阵列而不是线性数组的一个原因是降低芯片上地址引脚的数量。
二维阵列阻止的缺点是必须分两步发送地址,这增加了访问时间。 - 存储器模块
双列直插存储器模块(DIMM):168个引脚,以64位为块传入/传出数据到存储控制器。
单列直插存储器模块(SIMM):72个引脚,以32位为块传入/传出数据到存储控制器。 - 增强的DRAM
快页模式DRAM(FPM DRAM):异步控制信号,允许对同一行连续的访问可以直接从行缓冲区得到服务。
扩展数据输出DRAM(EDO DRAM):异步控制信号,允许单独的CAS信号在时间上靠的更紧密一点
同步DRAM(SDRAM):同步的控制信号,比异步的快
双倍数据速率同步DRAM(DDR SDRAM):使用两个时钟沿作为控制信号,使DRAM速度翻倍。
Rambus DRAM(RDRAM):一种私有技术
视频RAM(VRAM):用在图形系统的帧缓冲区中。 - 非易失性存储器
存储在ROM中的程序通常称为固件。
可编程ROM(PROM):只能被编程一次
可擦写可编程ROM(EPROM):使用紫外线实现
电子可擦除PROM(EEROM):使用印制电路卡实现
闪存(FM):非易失性存储设备 - 访问主存
读事务:从主存传送数据到CPU
写事务:从CPU传送数据到主存
总线:一组并行的导线,能携带地址、数据和控制信号。
系统总线:连接总线接口和I/O桥
存储器总线:连接I/O桥和主存
磁盘存储
-
磁盘构造:磁盘由盘片构成,表面覆盖着磁性记录材料,中央有一个可以旋转的主轴 ,旋转速率大约为5400-15000每分钟。磁盘的每个表面是一组称为磁道的同心圆组成,每个磁道被划分为一组扇区,扇区之间由一些间隙隔开,间隙存储用来标识扇区的格式化位。
-
磁盘容量由以下技术因素决定:
记录密度(位/英寸):磁道一英寸的段中可以放入的位数。
磁道密度(道/英寸):从盘片中心出发半径上一英寸的段内可以有的磁道数
面密度(位/平方英寸):记录密度与磁道密度的乘积。现代大容量磁盘使用一种称为多区记录的技术,柱面的集合被分割称为不相交的子集合,称为记录区,每个区包含一组连续的柱面。
磁盘操作:磁盘用读/写头来读写存储在磁性表面的位,而读写头连接到一个传动臂一端,通过移动转动臂将读写头定位在磁道上的机械运动称为寻道。磁盘以扇区大小的块来读写数据,对扇区的访问时间有三个主要的组成部分:
寻道时间:转动臂将读/写头定位到包含目标扇区的磁道上所需时间。
旋转时间:驱动器等待目标扇区的第一个位旋转到读/写头下的时间。最大为:平均旋转时间是Tmax的一半。
传送时间:读写并传送该扇区内容的时间。平均传送时间为:
逻辑磁盘块:
现代磁盘将盘面的构造视为一个B个扇区大小的逻辑块序列,磁盘控制器维护着逻辑块号和实际磁盘扇区之间的映射关系。逻辑块号可识别为一个盘面、磁道、扇区三元组,唯一的标识了相对应的物理扇区。
内存可以看成字节数组、磁盘可以看成块数组。
I/O总线连接了CPU,主存和I/O设备
固态硬盘
固态硬盘是一种基于闪存的存储技术。一个硬盘包由一个或者多个闪存芯片和内存翻译层组成,闪存芯片替代旋转磁盘中的机械驱动器,而闪存翻译层将对逻辑块的请求翻译成对底层物理设备的访问
SSD比旋转磁盘
优点:随机访问时间比旋转磁盘块,能耗更低,更结实。
缺点:闪存翻译层中的平均磨损逻辑试图通过将擦除平均分布在所有的块上来最大化每个块的寿命。
存储技术趋势
不同的存储技术有不同的价格和性能折中。
不同存储技术的价格和性能属性以截然不同的速率变化着
DRAM和磁盘的性能滞后于CPU的性能。
局部性
局部性原理:一个编写良好的计算机程序倾向于引用邻近于其他最近引用过的数据项,或者最近引用过的数据项本身。有良好局部性的程序比局部性差的程序运行的更快,在硬件层引入高速缓存存储器就体现了局部性原理。
对程序数据引用的局部性
时间局部性(temporal locality):被引用过一次的存储器位置在未来会被多次引用(通常在循环中)。
空间局部性(spatial locality):如果一个存储器的位置被引用,那么将来他附近的位置也会被引用。
一个连续向量中,每隔k个元素进行访问,被称为步长为k的引用模式,具有步长为1的引用模式称为顺序引用模式,随着步长增加空间局部性下降。
双重嵌套循环按照行优先顺序读取数组元素。(因为C数组在存储器中是按照行顺序来存放的)
取指令的局部性
程序指令是存放在存储器中的,CPU读取这些指令的过程中评价一个程序关于取指令的局部性。
代码区别与程序数据的一个重要属性就是在运行时指令是不能被修改的。
局部性小结
重复引用同一个变量的程序有良好的时间局部性
对于具有步长为k的引用模式的程序,步长越小,空间局部性越好。
对于取指令来说,循环具有良好的时间和空间局部性。循环体越小,迭代次数越多局部性越好。
存储器层次结构
- 存储技术:不同的存储技术的访问时间差异很大,速度较快的技术每字节的成本要比速度较慢的技术高,而且容量较小,CPU和主存之间的速度差距在增大。
- 计算机软件:一个编写良好的程序倾向于展示出良好的局部性。
存储器层次结构中的缓存
-
高速缓存:是一个小而快速地存储设备,它作为存储在更大、也更慢的设备中的数据对象的缓冲区域。 缓存:使用高速缓存的过程。
块:第k+1层的存储器被划分成连续的对象片。每个块有一个唯一的地址或名字,使之区别于其他的块。 -
传送单元:数据总是以块大小为传送单元。
-
缓存命中:
- 当程序需要第k+1层的某个数据对象d时,首先在当前存储在第k层的一个块中查找d,如果d刚好缓存在第k层中,就称为缓存命中。
- 该程序直接从第k层读取d,比从第k+1层中读取d更快。
-
缓存不命中:第k层中没有缓存数据对象d
- 这时第k层缓存会从第k+1层缓存中取出包含d的那个块。如果第k层缓存已满,就可能会覆盖现存的一个块;覆盖一个现存的块的过程称为替换/驱逐这个块;被驱逐的块有时也称为牺牲块。
- 替换策略:决定替换哪个块;随机替换策略:随机选择一个牺牲块;最近最少被使用替换策略(LRU):选择最后被访问的时间距现在最远的块。
-
缓存不命中的种类:
- 强制性不命中/冷不命中:即第k层的缓存是空的(称为冷缓存),对任何数据对象的访问都不会命中。通常是短暂事件,不会在反复访问存储器使得缓存暖身之后的稳定状态中出现。
- 冲突不命中:由于一个放置策略:将第k+1层的某个块限制放置在第k层块的一个小的子集中,这就会导致缓存没有满,但是那个对应的块满了,就会不命中。
- 容量不命中:当工作集的大小超过缓存的大小时,缓存会经历容量不命中,就是说缓存太小了,不能处理这个工作集。
-
缓存管理:某种形式的逻辑必须管理缓存,而管理缓存的逻辑可以是硬件、软件,或者两者的集合。
高速缓存存储器
- 通用的高速缓存存储器结构
一个计算机系统每个存储地址有m位,形成M=2^m个不同的地址。 - 高速缓存被组织成一个有S=2s个高速缓存组的数组,每个组包含E个高速缓存行,每个行是由一个B=2b字节的数据块、一位有效位以及t=m-(b+s)个标记位组成,唯一标识存储在这个高速缓存行中的块。
- 高速缓存的结构用元组(S,E,B,m)来描述,高速缓存的大小C = S * E * B。
直接映射高速缓存
- 直接映射高速缓存:每个组只有一行的高速缓存。
- 组选择:
高速缓存从w的地址中间抽取出s个组索引位
组索引位:一个对应于一个组号的无符号整数。 - 行匹配:
判断缓存命中的两个充分必要条件:该行设置了有效位;高速缓存行中的标记和w的地址中的标记相匹配
字选择:确定所需要的字在块中是从哪里开始的。
组相联高速缓存
- 组相连高速缓存中的组选择:与直接映射高速缓存中的组选择一样,组索引位标识组。
- 组相连高速缓存中的行匹配和字选择:把每个组看做一个小的相关联存储器,是一个(key,value)对的数组,
以key为输入,返回对应数组中的value值。高速缓存必须搜索组中的每一行,寻找有效的行其标记与地址中的相匹配。 - 组相连高速缓存中不命中时的行替换:最简单的替换策略是随机选择要替换的行,其他复杂的策略则使用了局部性原理,例如最不常使用、最近最少使用,等。
全相联高速缓存
- 全相连高速缓存中的组选择:只有一个组,没有组索引位。
- 全相连高速缓存中的行匹配和字选择:与组相连高速缓存是一样的,但规模大很多,因此只适合做小的高速缓存,例如虚拟存储系统中的翻译备用缓冲器。
有关写的问题
- 直写:
立即将w的高速缓存块写回到紧接着的第一层中
缺点是每次写都会引起总线流量。 - 写回:
只有当替换算法要驱逐更新过的块时,才能把它写到紧接着的低一层中,由于局部性,写回能显著减少总线流量。
缺点是增加了复杂性。 - 另一个问题是如何处理写不命中。
写分配:加载相应的低一层中的块到高速缓存中,然后更新这个高速缓存块。 缺点是每次不命中都会导致一个块从低一层传送到高速缓存。
非写分配:避开高速缓存,直接把这个字写到低一层中。
高速缓存参数的性能影响
- 不命中率:不命中数量/引用数量
- 命中率:1-不命中率
- 命中时间:从高速缓存传送一个字到CPU所需的时间,包括组选择,行匹配,字抽取的时间。
不命中处罚:由于不命中所需要的额外时间。
综合:高速缓存对程序性能的影响
存储器山
- 一个程序从存储系统中读数据的速率称为读吞吐量,或者读带宽,通常以兆字节每秒(MB/s)为单位。
- 读带宽的时间和空间局部性的二维函数称为存储器山。
问题解决
-
这次装好virtualbox后,十分想念之前的kali,于是将她的vdi多重载入;等到输账户密码的时候,忽然发现,我全忘了。。尴尬。。
-
于是我重新启动的Kali ,等出现GRUB引导菜单时,按向下方向键选择“恢复模式”,按E键进入编辑模式。
-
进入编辑模式后将ro改为rw,在后面添加init=/bin/bash
-
修改完成后,按F10键或Ctrl+X键继续启动。启动完成后,出现命令行界面
-
用过ubuntu后,可以知道,root即为我之前的账户,知道账户就好办了
-
这时输入passwd root,回车就可以直接设置新密码
-
回车以后,输入新密码,并再次输入确认,系统提示密码更新成功!
-
直接关机并重启,就可以用新密码直接登录了。KO.
心得体会
- 因为想用kali,所以想装一个虚拟机平台,心路历程在这——基于VirtualBox的多重载入
- 王安石说,“世之奇伟,瑰怪,非常之观,常在于险远。"到这次安装好virtualbox,期间经历了win10的崩溃,虚拟机的崩溃,然至今日,无论从系统还是虚拟机都得到了巨大的改善。虽然过程有点让人欲哭无泪,但还好结局是可以接受的。看来,某个东西用的好不好,用的长久不长久,关键在于用东西的人的心志是否始终如一。
本周代码托管
- 按照老师上周评论的要求,代码结构重新进行了组织
- 托管截图
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 120/200 | 1/2 | 16/16 | 学习Linux核心命令 |
第二周 | 100/200 | 1/3 | 30/46 | 学习vim,gcc以及gdb的基本操作 |
第三周 | 30/230 | 1/4 | 15/61 | 对信息的表示和处理有更深入的理解 |
第四周 | 30/260 | 1/5 | 22/83 | 双系统的探索 |
第五周 | 130/390 | 1/6 | 25/108 | 汇编的深入学习 |
第六周 | 60/450 | 1/7 | 25/133 | 熟悉了Y86模拟器 |
第七周 | 60/510 | 2/8 | 20/153 | 掌握局部性原理 |