20135306黄韧 信息安全系统设计基础期中学习总结

信息安全系统设计基础第八周学习总结html

知识点总结程序员

第1计算机系统漫游编程

△计算机系统是由硬件和系统软件组成的,它们共同协做以运行应用程序。计算机内部的信息被表示为一组组的位.它们依据上下文有不一样的解释方式。程序被其余程序翻译成不一样的形式,开始时是ASCII文本.而后被编译器和连接器翻译成二进制可执行文件。
处理器读取并解释存放在主存里的二进制指令,由于计算机能够把大量的时间用于存储器、I/O设备和CPU寄存器之间复制数据,因此将系统中的存储设备划分红层次结构--CPU寄存器在顶部,接着是多层的硬件高速缓存存储器、DRAM主存和磁盘存储器在层次模型中,位于更高层的存储设备比低层的存储设备要更快,单位比特开销也更高。层次结构中较高层次存储设备能够做为较低层次设备的高速缓存。
操做系统内核是应用程序和硬件之间的媒介。
它提供三个基本的抽象:1)文件是对I/O的抽象;2)虚拟存储器是对主存和磁盘的抽象:3)进程是对处理器、主存抽象和I/O设备的设备最后,网络提供了计算机系统之间通讯的手段。从特殊系统的角度来看,网络就是一种I/O设备。缓存

第2信息的表示和处理安全

△计算机将信息按位编码,一般组织成字节序列。用不一样的编码方式表示整数、实数和字符串。不一样的计算机模型在编码数字和多字节数据中的字节排序时使用不一样的约定。
C语言的设计能够包容多种不一样字长和数字编码的实现。虽然高端机器逐渐开始使用64位字长,可是目前大多数机器仍使用32位字长。大多数机器对整数使用补码编码,而对浮点数使用IEEE浮点编码。在位级上理解这些编码,而且理解算术运算的数学特性,对于想使编写的程序能在所有数值范围上正确运算的程序员来讲,是很重要的。
在相同长度的无符号和有符号整数之间进行强制类型转换时,大多数C语言实现遵循的原则是底层的位模式不变。在补码机器上,对于一个W位的值,这种行为是由函数T2Uw和U2Tw来描述的。网络

第3程序的机器级表示数据结构

△在本章中,咱们窥视了C语言提供的抽象层下面的东西,以了解机器级编程。经过让编译器产生机器级程序的汇编代码表示,咱们了解了编译器和它的优化能力,以及机器、数据类型和指令集。在第5章,咱们会看到,当编写能有效映射到机器上的程序时,了解编译器的特性会有所帮助。咱们还更完整地了解了程序如何将数据存储在不一样的存储器区域中。在第12章会看到许多这样的例子,咱们须要知道个程序变量是在运行时栈中,是在某个动态分配的数据结构中,是在某个全局存储位置中。理解程序如何映射到机器上,会让理解这些存储之间的区别容易些。
机器级程序和它们的汇编代码表示,与C程序的差异很大。在汇编语言程序中,各类数据类型之间的差异很小。程序是以指令序列来表示的,每条指令都完成一个单独的操做。部分程序状态,如寄存器和运行时栈,对程序员来讲是直接可见的。本书仅提供了低级操做来支持数据处理和程序控制。编译器必须用多条指令来产生和操做各类数据结构,来实现像条件、循环和过程这样的控制结构。咱们讲述了C语言和如何编译它的许多不一样方面。咱们看到C语言中缺少边界检查,使得许多程序容易出现缓冲区溢出。虽然最近的运行时系统提供了安全保护,并且编译器帮助使得程序更安全,可是这已经使许多系统容易受到入侵者的恶意攻击。框架

第4处理器体系结构函数

△咱们已经看到,指令集体系结构,即ISA,在处理行为和如何实现处理器之间提供了一层抽象。ISA提供了程序执行器行为的一种顺序说明,也就是一条指令执行完了,下一条指令才会开始。从IA32指令开始,大大简化数据类型、地址模式和指令编码,咱们定义了Y86指令集。获得的ISA既有RISC指令集的属性,也有CISC指令集的属性。而后,将不一样指令组织放到五个阶段中处理,在此,根据被执行指令的不一样,每一个阶段中的操做也不相同。据此,咱们构造了SEQ处理器,其中每一个时钟周期执行一条指令,它会经过全部五个阶段。
流水线化经过让不一样的阶段并行操做,改进了系统的吞吐量性能。在任意一个给定的时刻:多条指令被不一样的阶段处理。在引入这种并行性的过程当中,咱们必须很是当心,以提供与程序的顺序执行相同的程序级行为。经过从新调整SEQ各个部分的顺序,引入流水线,咱们获得SEQ+,接着添加流水线寄存器,建立出PIIE―流水线。而后,添加了转发逻辑,加速了将结果从一条指令发送到另外一条指令,从而提升了流水线的性能。有几种特殊状况须要额外的流水线控制逻辑来暂停或取消一些流水线阶段。
在本章中,咱们学习了有关处理器设计的几个重要经验:
1.管理复杂性是首要问题,想要优化使用硬件资源,在最小的成本下得到最大的性能。为了实现这个目的,咱们建立了一个很是简单而一致的框架,来处理全部不一样的指令类型。有了这个框架,就可以在处理不一样指令类型的逻辑中共享硬件单元。
2.咱们不须要直接实现ISA。它的直接实现意味着一个顺序的设计。为了得到更高的性能咱们想运用硬件能力以同时执行许多操做,这就致使要使用流水线化设计。经过仔细设计和分析,咱们可以处理各类流水线冒险,所以运行一个程序的总体效果,同用ISA模型得到的效果彻底一致。
3.硬件设计人员必须很是谨慎当心。一旦芯片制造出来,就几乎不可能改正任何错误了。开始就使设计正确是很是重要的。这就意味着要仔细地分析各类指令类型和组合,甚至那些看上去没有意义的状况,例如弹出值到栈指针。必须用系统的模拟测试程序完全地测试设计。在开发PIPE的控制逻辑中,咱们的设计有个细微的错误,只有经过对控制组合的仔细而系统的分析才能发现。工具

第6存储器层次结构

△基本存储技术包括随机存储器(RAM)、非易失性存储器(即OM)和磁盘。RAM有两种基本类型。静态RAM(SRAM)快一些,可是也贵一些,它既能够用作CPU芯片上的高速缓存,也能够用作芯片下的高速缓存。动态RAM(DRAM)慢一些,也便宜一些,用作主存和图形帧缓冲区。非易失性存储器,也称为只读存储器(ROM)即便是在关电的时候,也能保持它们的信息,它们用来存储固件。旋转磁盘是机械的非易失性存储设备,以每一个位很低的成本保有大量的数据,可是访问时间比DRAM更长。固态硬盘(SSD基于非易失性的闪存,愈来愈变成旋转磁盘对某些应用的具备吸引力的替代产品。
通常而言,较快的存储技术每一个位的价格会更高,并且容量较小。这些技术的价格和性能属性正在以显著不一样的速度变化着。特别地,DRAM和磁盘访问时间远远大于CPU周期时间。系统经过将存储器组织成存储设备的层次结构来弥补这些差别,在这个层次结构中,较小、较快的设备在顶部,较大、较慢的设备在底部。由于编写良好的程序有好的局部性,大多数数据均可以从较高层获得服务,结果就是存储系统能以较高层的速度运行,但却有较低层的成本和容量。
程序员能够经过编写有良好空间和时间局部性的程序来显著地改进程序的运行时间。利用基于SRAM的高速缓存存储器特别重要。

实验操做

(一)Linux命令

1. man -k

  • man -k k1|grep k2|grep 2

2. cheat

  • 使用du命令对当前目录下的目录或文件按大小排序 的命令是du -sk *| sort -rn
  • To list the content of /path/to/foo.tgz archive using tar ( tar      -jtvf /path/to/foo.tgz )

3. grep

  • 使用grep查找当前目录下*.c中main函数在那个文件中的命令是grep      main *.c
  • grep -nr xxx/usr/include 查找宏
  • ~/test 文件夹下有不少c源文件,查找main函数在哪一个文件中可用命令grep      main *.c

4. find

  • 查找当前目录下2天前被更改过的文件find . -mtime +2 -type f -print
  • 查找当前目录下全部目录的find命令是find . -type      d

(二)vi、gcc、gdb、make的使用

1. gcc库选项

  • static 进行静态编译,即连接静态库,禁止使用动态库
  • shared 1.能够生成动态库文件 2.进行动态编译,尽量地连接动态库,只有当没有动态库时才会连接同名的静态库(默认选项,便可省略)
  • L dir 在库文件的搜索路径列表中添加dir      目录
  • lname 连接称为libname.a(静态库)或者libname.so(动态库)的库文件。若两个库都存在,则根据编译方式(-static 仍是-shared)而进行连接
  • $ gcc –g gdb.c -o testgdb 使用gdb调试$ gdb testgdb 启动gdb键入 l命令至关于list命令,从第一行开始列出源码

2. gdb调试器

  • 查看文件: 在gdb 中键入“l”(list)就能够查看所载入的文件
  • 设置断点: 设置断点是调试程序中一个很是重要的手段,它可使程序运行到必定位置时暂停。所以,程序员在该位置处能够方便地查看变量的值、堆栈状况等,从而找出代码的症结所在。在gdb 中设置断点很是简单,只需在“b”后加入对应的行号便可
  • 查看断点状况: 在设置完断点以后,用户能够键入“info      b”来查看设置断点状况
  • 运行代码: gdb 默认从首行开始运行代码,键入“r”(run)便可(若想从程序中指定行开始运行,可在r 后面加上行号)
  • 查看变量值: 在程序中止运行以后,程序员所要作的工做是查看断点处的相关变量值。在gdb 中键入“p”+变量值便可
  • 单步运行: 单步运行可使用命令“n”(next)或“s”(step),它们之间的区别在于:如有函数调用的时候,“s”会进入该.数而“n”不会进入该函数。
  • (gdb) break 16 设置断点,在源程序第16行处。
  • (gdb) break func 设置断点,在函数func()入口处。
  • (gdb) info break 查看断点信息。

3. make

  • makefile的好处:自动化编译。make是一个命令工具,是一个及时makefile中命令的工具程序。make工具最主要也是最基本的功能就是根据makefile文件中描述的源程序至今的相互关系来完成自动编译、维护多个源文件工程。
  • Makefile的通常写法

test(目标文件): prog.o code.o(依赖文件列表)tab(至少一个tab的位置) gcc prog.o code.o -o test(命令)

4. vi

vi 有3 种模式,分别为命令行模式、插入模式及命令行模式。

(1)命令行模式

用户在用vi 编辑文件时,最初进入的为通常模式。在该模式中用户能够经过上下移动光标进行“删除字符”或“整行删除”等操做,也能够进行“复制”、“粘贴”等操做,但没法编辑文字。

(2)插入模式

只有在该模式下,用户才能进行文字编辑输入,用户按[ESC]可键回到命令行模式。

(3)底行模式

在该模式下,光标位于屏幕的底行。用户能够进行文件保存或退出操做,也能够设置编辑环境,如寻找字符串、列出行号等。

vi的基本流程

(1)进入vi,即在命令行下键入“vi hello”(文件名)。此时进入的是命令行模式,光标位于屏幕的上方

 

(2)在命令行模式下键入i 进入插入模式

 

(3)最后,在插入模式中,按“Esc”键,则当前模式转入命令行模式,并在底行行中.入“:wq”(存盘退出)进入底行模式

vi 的各模式功能键

命令行模式常见功能键

i 切换到插入模式,在目前的光标所在处插入输入的文字,已存在的文字会向后退

 

a 切换到插入模式,并从目前光标所在位置的下一个位置开始输入文字

 

o 切换到插入模式,且从行首开始插入新的一行

 

0(数字0) 光标移到本行的开头

 

G 光标移动到文件的最后

 

nG 光标移动到第n 行

 

$ 移动到光标所在行的“行尾”

 

n<Enter> 光标向下移动n 行

 

dd 删除光标所在行

 

ndd 从光标所在行开始向下删除n 行

 

yy 复制光标所在行

 

nyy 复制光标所在行开始的向下n 行

 

u 恢复前一个动做

插入模式常见功能键

插入模式的功能键只有一个,即按“Esc”键可回到命令行模式。

底行模式常见功能键

:w 将编辑的文件保存到磁盘中

 

:q 退出vi(系统对作过修改的文件会给出提示)

 

:q! 强制退出vi(对修改过的文件不做保存)

 

:wq 存盘后退出

 

:w [filename] 另存一个名为filename 的文件

 

:set nu 显示行号,设定以后,会在每一行的前面显示对应行号

 

:set nonu 取消行号显示

 

本身的收获

    第一次接触老师的这种授课方式刚开始的时候有些不适应,毕竟本身的计算机基础很差并且很难对计算机方面的课程产生兴趣,可是仍是养成了积累按部就班的习惯,掌握了必定的计算机系统及Linux指令知识, 这本《深刻理解计算机系统》确实是本值得推荐的好书,基本上面面俱到,涉及到了目前所学习内容的方方面面,对任何一门专业课都能起到启蒙做用。其中最大的收获是提升实际操做能力的提升,可以将理论和实践造成统一。

本身的不足

  • 对有的难点问题没有一问到底,有的题只掌握了方法没有掌握原理,在学习过程当中接受所学知识比较困难。
  • 没有及时复习,并且并无很好地理解,看过的知识点会忘记,Linux命令尚未完全掌握。
  • 编程方面仍是有很大的问题,并且有问题问的不够及时,若是问题堆积的话会更不容易解决。

参考资料

  1. 教材《深刻理解计算机系统》
  2. 每周测试答案解析 http://group.cnblogs.com/topic/73060.html
  3. 教材学习指导:http://group.cnblogs.com/topic/73069.html
相关文章
相关标签/搜索