20145209 《信息安全系统设计基础》第8周学习总结
教材学习内容总结
A.关于Linux虚拟机
1 Linux命令
如果使用GUI,Linux和Windows没有什么区别。Linux学习应用的一个特点是通过命令行进行使用。
登录Linux后,我们就可以在#或$符后面去输入命令,有的时候命令后面还会跟着选项(options)或参数(arguments)。即Linux中命令格式为:
command [options] [arguments] //中括号代表是可选的,即有些命令不需要选项也不需要参数。
选项是调整命令执行行为的开关,选项不同决定了命令的显示结果不同。
参数是指命令的作用对象。
如ls命令,ls或ls .显示是当前目录的内容,这里“.”就是参数,表示当前目录,是缺省的可以省略。我们可以用ls -a .显示当前目录中的所有内容,包括隐藏文件和目录。其中“-a” 就是选项,改变了显示的内容,如下图所示(图片统一放在下面了)。
Linux Command Example
以上简要说明了选项及参数的区别,但具体Linux中哪条命令有哪些选项及参数,需要我们靠经验积累或者查看Linux的帮助了。
2 man命令
不论学习编程还是Linux命令,掌握帮助文档的使用都是很重要的,是举一反三的重要途径。 man是manul的缩写,我们可以通过man man来查看man的帮助,如下图(图片统一放在下面了)。
3 cheat 命令
man 虽然很重要,但有些命令看了帮助还不会用,初学者需要例子,cheat就是这个身边的小抄。 cheat 命令不是Linux自带的,大家参考这篇文章(英文版)安装,实验楼课程实验系统中已经安装了。
cheat是作弊,小抄的意思。
cheat命令是在GNU通用公共许可证下,为Linux命令行用户发行的交互式备忘单应用程序。它提供显示Linux命令使用案例,包括该命令所有的选项和简短但尚可理解的功能。
使用cheat命令作弊是可以的。:)
4 vi的基本操作
vim 文件名:打开当前目录下相应的文件(如果不存在会自动新建)
光标移动:
h-←,j-↓,k-↑,l-→,方向键也可以控制相应的光标移动方向;w-移动到下一个单词,b-移动到上一个单词。
[[ 转到上一个位于第一列的"{";]] 转到下一个位于第一列的"{";{ 转到上一个空行;} 转到下一个空行
插入模式:(不同模式之间需要先esc退出后才能切换)
i 在当前光标处进行编辑
I 在行首插入
A 在行末插入
a 在光标后插入编辑
o 在当前行后插入一个新行
O 在当前行前插入一个新行
cw 替换从光标所在位置后到一个单词结尾的字符
保存和退出vim:
w 保存文档
:q! 强制退出,不保存
:q 退出
:wq! 强制保存并退出
:w <文件路径> 另存为
:saveas 文件路径 另存为
:x 保存并退出
:wq 保存并退出
删除文本
x 删除游标所在的字符
X 删除游标所在前一个字符
Delete 同x
dd 删除整行
dw 删除一个单词(不适用中文)
d$或D 删除至行尾
d^ 删除至行首
dG 删除到文档结尾处
d1G删至文档首部
5 gcc
预处理:gcc –E hello.c –o hello.i;gcc –E调用cpp
编 译:gcc –S hello.i –o hello.s;gcc –S调用ccl
汇 编:gcc –c hello.s –o hello.o;gcc -c 调用as
链 接:gcc hello.o –o hello ;gcc -o 调用ld
6 gdb
gdb programm(启动GDB)
b 设断点(要会设4种断点:行断点、函数断点、条件断点、临时断点)
run 开始运行程序
bt 打印函数调用堆栈
p 查看变量值
c 从当前断点继续运行到下一个断点
n 单步运行
s 单步运行
quit 退出GDB
7 git
src:存放源代码文件
include: 存放头文件
bin:存放编译后的目标文件、可执行文件等
lib:存放项目所需的静态库、动态(共享)库
res: 存放项目所需的图标、声音、图片等资源
docs: 存放项目相关的参考资料、帮助文档,比如大家的学习博客就可以放在这里
B.
一.存储技术
存储器系统是一个具有不同容量、成本和访问时间的存储设备的层次结构。CPU寄存器保存着最常用的数据。靠近CPU的小的、快速的高速缓存存储器作为一部分存储在相对慢速的主存储器中数据和指令的缓冲区域。主存暂时存放存储在容量较大的、慢速磁盘上的数据,而这些磁盘常常又作为存储在通过网络连接的其他机器的磁盘或磁带上的数据的缓冲区域。
1.随机访问存储器(RAM,Random-access memory)
静态RAM(SRAM)
(1)静态RAM(SRAM)比动态RAM(DRAM)更快,但也贵很多。SRAM用来作为高速缓存存储器,即可以在CPU芯片上,也可以不在CPU芯片上。DRAM用来作为主存以及图形系统的帧缓冲区。
(2)SRAM将每个位存储在一个双稳态存储器单元中。每个单元是用一个六晶体管电路来实现的。
(3)由于SRAM的双稳态特性,只要有电,它就会永远地保持它的值。
动态RAM(DRAM)
(1)DRAM将每个位存储为对电容的充电。电容约为30×10-15F。
(2)DRAM存储器单元对干扰非常敏感。
(3)当电容的电压被扰乱之后就永远不会恢复。
(4)优势是密集度低,成本低。
传统的DRAM
(1)DRAM的芯片中的单元被分成d个超单元,每个超单元都由w个DRAM单元组成。一个d*w的DRAM总共存储了dw位的信息。超单元被组织成一个r行c列的长方形阵列,这里rc = d。信息通过引脚的外部连接器流入和流出芯片。
(2)信息通过称为引脚的外部连接器流入/流出芯片,每个引脚携带一个1位信号。
(3)每个DRAM信号被连接到称为存储控制器的电路,电路每次传输量为8位。行地址i,RAS请求;列地址j,CAS请求共享相同的DRAM地址引脚。
存储器模块
(1)双列直插存储器模块(Dual Inline Memory Module,DIMM):168个管脚,它以64位为块传送数据到存储控制器和从存储控制器传出数据。
(2)单列直插存储器模块(Single Inline Memory Module,SIMM):72个管脚,它以32位为块传送数据。
增强的DRAM
(1)快页模式DRAM:允许对同一行连续的访问可以直接从行缓冲区得到服务,避免内部行缓冲区使用一个丢弃其他的现象。
(2)扩展数据输出DRAM:允许单独的CAS信号在时间上靠的更紧密一点。
(3)同步DRAM:用驱动存储控制器相同的外部时钟信号的上升沿来替代许多的异步信号,速度更快。
(4)双倍数据速率同步DRAM:通过使用两个时钟沿作为控制信号,使得DRAM的速度翻倍。
(5)RambusDRAM:增大了最大带宽。
(6)视频RAM:用在图形系统的帧缓冲区中,允许对存储器并行的读和写。
非易失性存储器
(1)如果断电,DRAM和SRAM都会丢失信息,非易失性存储器——只读存储器:ROM。ROM是以他们能够被重编程的次数和对他们重编程的机制来区分的。
(2)可编程ROM(PROM):只能被编程一次。PROM每个存储单元有一种熔丝,只能用高电流熔断一次。
(3)闪存是一个类小的非易失性存储器,基于EEPROM,支持插拨。
访问主存
(1)总线:总线是一组并行的导线,能携带地址、数据和控制信号。
(2)读事务(read transaction)从主存传送数据到CPU;写事务(write transcation)从CPU传送数据到主存。
(3)总线是一组并行的导线,能携带地址、数据的控制信号。
2.磁盘存储
磁盘构造:磁盘由盘片构成,表面覆盖着磁性记录材料,中央有一个可以旋转的主轴 ,旋转速率大约为5400-15000每分钟。磁盘的每个表面是一组称为磁道的同心圆组成,每个磁道被划分为一组扇区,扇区之间由一些间隙隔开,间隙存储用来标识扇区的格式化位。
磁盘容量:
磁盘容量=(字节数/扇区)(平均盘区数/磁道)(磁道数/表面)*(盘片数/磁盘)
磁盘操作:磁盘用读/写头来读写存储在磁性表面的位,而读写头连接到一个传动臂一端,通过移动转动臂将读写头定位在磁道上的机械运动称为寻道。
逻辑磁盘块:现代磁盘将盘面的构造视为一个B个扇区大小的逻辑块序列,磁盘控制器维护着逻辑块号和实际磁盘扇区之间的映射关系。逻辑块号可识别为一个盘面、磁道、扇区三元组,唯一的标识了相对应的物理扇区。操作系统是以逻辑块号为单位进行寻址操作的。
连接到I/O设备:所有的I/O设备都是通过I/O总线连接到CPU和主内存。
3.固态硬盘
固态硬盘是一种基于闪存的存储技术,在某些情况下是传统旋转磁盘的极有吸引力的替代产品。
一个SSD包由一个或多个闪存芯片和闪存翻译层组成,闪存芯片——对应旋转磁盘中机械驱动器,而闪存翻译层是一个硬件/固件设备,扮演与磁盘控制器相同的角色。
二.局部性
局部性原理:一个编写良好的计算机程序倾向于引用邻近于其他最近引用过的数据项,或者最近引用过的数据项本身。
局部性有两种形式:时间局部性(temporal locality):在一个具有良好时间局部性的程序中,被引用过一次的存储器位置很可能在不远的将来再被多次引用。
空间局部性(spatial locality):在一个具有良好空间局部性的程序中,如果一个存储器位置被引用了一次,那么程序很可能在不远的将来引用附近的一个存储器位置。
1.对程序数据引用的局部性
程序指令是存放在存储器中的,CPU读取这些指令的过程中评价一个程序关于取指令的局部性。
代码区别与程序数据的一个重要属性是:在运行时指令是不能被修改的。
2.取指令的局部性
计算机程序倾向于引用邻近于其他最近引用过的数据项的数据或其本身;这种倾向性,被称为局部性原理。包括:时间局部性,空间局部性。有良好局部性的程序比局部性差的程序运行的更快。
体现:在硬件层,局部性原理允许计算机设计者通过引入称为高速缓存器的小而快的存储器来保存最近被引用的指令和数据项;在操作系统级,局部性原理允许系统使用主存作为虚拟地址空间最近被使用的磁盘块。
重复引用一个变量的程序具有良好的时间局部性;对于取指令来说,循环具有良好的时间和空间局部性。循环体越小,循环迭代次数越多,局部性越好。
三.存储器层次结构
存储器层次结构的中心思想是:对于每个k,位于k层的更快更小的存储设备作为位于(k+1)层的更大更慢的存储设备的缓存。数据总是以块大小作为传送单元在第k层和k+1层之间来回拷贝的。第(k+1)层的存储器被划分成连续的数据对象片,称为块;数据总是以块大小为传送单元在相邻两层之间来回拷贝的;在任何时刻,第k层的缓存包括第(k+1)层块的一个子集的拷贝。
四.高速缓存存储器
1.直接映射高速缓存
每组只有一行(E=1)的高速缓存称为直接映射高速缓存。高速缓存确定一个请求是否命中,然后抽取出被请求字的过程分为三步:组选择/ 行匹配/ 字抽取
直接映射高速缓存中的组选择:高速缓存从要抽取的字的地址中抽取出S个组索引位,这些位被解释成一个对应于一个组号的无符号整数。
直接映射高速缓存中的行匹配:当且仅当设置了有效位,而且高速缓存行标记与w的地址中的行标记相匹配时,这一行中包含w的一个拷贝。
直接映射高速缓存中的字抽取:块偏移位提供了所需要的字的第一个字节的偏移。
直接映射高速缓存中不命中时的行替换:需要从存储器层次结构中的下一层取出被请求的块,然后将新的块存储在组索引位指示的组中的一个高速缓存行中。
2.组相连高速缓存
组相连高速缓存中的组选择:与直接映射高速缓存中的组选择一样,组索引位标识组。
组相连高速缓存中的行匹配和字选择:把每个组看做一个小的相关联存储器,是一个(key,value)对的数组,以key为输入,返回对应数组中的value值。高速缓存必须搜索组中的每一行,寻找有效的行其标记与地址中的相匹配。
组相连高速缓存中不命中时的行替换:最简单的替换策略是随机选择要替换的行,其他复杂的策略则使用了局部性原理,例如最不常使用、最近最少使用等。
3.全相连高速缓存
全相连高速缓存中的组选择:只有一个组,没有组索引位。
全相连高速缓存中的行匹配和字选择:与组相连高速缓存是一样的,但规模大很多,因此只适合做小的高速缓存,例如虚拟存储系统中的翻译备用缓冲器。
4.有关写的问题
直写:立即将w的高速缓存块写回到紧接着的低一层中。
写回: 尽可能推迟存储器更新,只有当替换算法要驱逐已更新的块时,才把它写回存储器。
写分配:即加载相应的存储器块到高速缓存中,然后更新这个高速缓存器。
5.高速缓存参数的性能影响
有许多指标来衡量高速缓存的性能:
(1)不命中率:它是这样计算的:不命中数量/引用数量
(2)命中率:命中的存储器引用比率
(3)命中时间:命中时间的数量级是几个时钟周期
(4)不命中处罚
五.编写高速缓存友好的代码
确保代码高速缓存友好的基本方法:
(1)让最常见的情况运行的快。
(2)在每个循环内部缓存不命中数量最小。
六.高速缓存对程序性能的影响
1.存储器山
一个程序从存储系统中读数据的速率称为读吞吐量,或者读带宽,通常以兆字节每秒(MB/s)为单位。
读带宽的时间和空间局部性的二维函数称为存储器山。
2.在程序中利用局部性
将你的注意力集中在内循环上,大部分计算和存储器访问都发生在这里。
通过按照数据对象存储在存储器中的顺序、以步长为1的来读数据,从而使得你程序中的空间局部性最大。
一旦从存储器中读入了一个数据对象,就尽可能多地使用它,从而使得程序中的时间局部性最大。
其他(感悟、思考等,可选)
经过之前三周的学习,我已经渐渐的对这门课程感兴趣了,不会像以前一样厌学。但是由于前几周我的学习进度太快,这周我对之前几周的学习进行了总结归纳,巩固一下记忆,以免贪多再往下学会忘掉之前的内容。
学习进度条
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 200/200 | 2/2 | 20/20 | |
第二周 | 300/500 | 2/4 | 18/38 | |
第三周 | 500/1000 | 3/7 | 22/60 | |
第四周 | 300/1300 | 2/9 | 30/90 |