信息安全系统设计基础第八周期中总结

时间统计

预计时间(9小时30分钟)

问题整理 1小时 
课本知识点整理 3小时
linux基础复习 3小时 
vim等复习 1小时 
正则表达式复习 30分钟 
分析收获不足以及建议 1小时html

实际时间(10小时)

问题整理 2小时 
课本知识点整理 2小时
linux基础复习 3小时30分钟 
vim等复习 1小时 
正则表达式复习 1小时 
分析收获不足以及建议 30分钟linux

第一部分 知识点总结

第一章节 Linux命令

(一)man命令

man -k:程序员

经常使用来搜索,结合管道使用。例句以下:正则表达式

man -k k1 | grep k2 | grep 2算法

搜索同时含有k1和k2,且属于系统调用。
最后的数字意味着帮助手册中的区段,man手册共有8个区段,最经常使用的是123,含义以下: 1.Linux 2.系统调用 3.c语言数据库

例如:咱们输入 man ls,它会在最左上角显示“LS(1)”,在这里,“LS”表示手册名称,而“(1)”表示该手册位于第一节章,一样,咱们输入“man ifconfig”它会在最左上角显示“IFCONFIG(8)”。也能够这样输入命令:“man [章节号] 手册名称”。编程

man是按照手册的章节号的顺序进行搜索的,好比:vim

man sleep数组

只会显示sleep命令的手册,若是想查看库函数sleep,就要输入:缓存

man 3 sleep

即查找c语言中printf的用法。

cheat

cheat命令:告诉你一个命令如何使用。经过使用实例告诉你一个命令如何使用。 
用法:cheat 命令名

find locate which whereis的用法和区别

一、find用法

find是查找命令,find查找磁盘空间 
find的使用格式以下: 
  $ find <指定目录> <指定条件> <指定动做> 
  - <指定目录>: 所要搜索的目录及其全部子目录。默认为当前目录。 
  - <指定条件>: 所要搜索的文件的特征。 
  - <指定动做>: 对搜索结果进行特定的处理。 
举例:

$ find . -type f -mmin -10

  搜索当前目录中,全部过去10分钟更新过的普通文件。若是不加-type f参数,则搜索普通文件+特殊文件+目录

二、locate命令

locate命令是"find -name"的另外一种写法,但更快,缘由在于它不搜索具体目录,而是搜索一个数据库(/var/lib/locatedb),这个数据库中含有本地全部文件信息。在使用locate以前,先使用updatedb命令,手动更新数据库。 
locate命令的使用实例:

  $ locate /etc/sh 
  搜索etc目录下全部以sh开头的文件。 
  $ locate ~/m
  搜索用户主目录下,全部以m开头的文件。 
  $ locate -i ~/m 
  搜索用户主目录下,全部以m开头的文件,而且忽略大小写。

三、whereis

whereis命令只能用于程序名的搜索,并且只搜索二进制文件(参数-b)、man说明文件(参数-m)和源代码文件(参数-s)。若是省略参数,则返回全部信息。同locate同样,查询数据库(/var/lib/locatedb)文件。 
whereis命令的使用实例:

  $ whereis grep

四、which

which命令的做用是,在PATH变量指定的路径中,搜索某个系统命令的位置,而且返回第一个搜索结果。也就是说,使用which命令,就能够看到某个系统命令是否存在,以及执行的究竟是哪个位置的命令。 
which命令的使用实例:
 

 $ which grep

区别

which (寻找执行档) :这个指令是根据PATH这个环境变量所规范的路径,去搜寻执行档的档名,因此,重点是找出执行档而已,which 后面接的是完整档名 
whereis (寻找特定档案):搜寻linux数据库档案中所记录的东西,和locate的主要区别在于后面的参数 
locate:搜寻linux数据库档案中所记录的东西,后面直接跟档案的部分名称就行 
find:直接搜索整个硬盘

apt-cache search

经常使用使用方法

一、apt-cache show package_name: 显示指定软件包的信息,包括版本号,安装状态和包依赖关系等.

二、apt-cache search package_name:搜索软件包,能够按关键字查找软件包,一般用于查询的关键字会使用软件包的名字或软件包的一部分.

三、apt-cache showpkg package_name:显示软件包的依赖关系信息.

四、apt-cache stats:显示当前系统所使用的数据源的统计信息,用户可使用该命令查看数据源的相关统计信息.

五、apt-cache policy package_name:显示软件包的安装状态和版本信息.

六、apt-cache depends package_name:显示指定软件包所依赖的软件包。当用户须要了解某个软件包依赖于其余哪些包时,可使用apt-cache depends来查询包依赖关系.

七、apt-cache rdepends package_name:查询指定软件包的反向依赖关系,即那些其余的软件包须要依赖你所指定的软件包作为安装和运行的必须条件.

八、apt-cache dump:显示缓存中的每一个软件包的简要描述信息.

九、apt-cache unmet:显示不符合一致性的依赖关系.

cat

命令说明: 查看文件内容,也能够给文件追加内容到结尾 
语法:cat [-AbEnTv]

参数: 
-A :至关于-vET的整合参数,能够列出一些特殊字符,而不是空白而已 -b :列出行号,仅对非空行号显示,空白行不标记行号 
-E :将结尾的断行字符$显示出来
-n :打印出行号,连同空白行也有行号,与-b参数不一样 
-T :将[tab]按键以^I 显示出来 
-v :列出一些看不出的特殊字符

touch

命令功能:
touch命令参数可更改文档或目录的日期时间,包括存取时间和更改时间。 
命令格式:
touch [选项]... 文件...
命令参数:

-a 或--time=atime或--time=access或--time=use  只更改存取时间。
-c 或--no-create  不创建任何文档。
-d  使用指定的日期时间,而非如今的时间。
-f  此参数将忽略不予处理,仅负责解决BSD版本touch指令的兼容性问题。
-m 或--time=mtime或--time=modify  只更改变更时间。 
-r  把指定文档或目录的日期时间,通通设成和参考文档或目录的日期时间相同。
-t  使用指定的日期时间,而非如今的时间。

正则表达式

‘多种字符’ 表达式:正则表达式中的一些表示方法,能够匹配 '多种字符 ' 其中的任意一个字表达符式。
规则:

\d 0~9 中的任意一个数字
\w 任一字母或数字或下划线,即A~Z、a~z、0~九、_中任一个
\s 包括空格、制表符、换页符等空白字符中任意一个
. 匹配除换行符( \n)之外任意一个字符
[ ] 匹配其中任意字符,但每次匹配只匹配一个 
[^ ] 匹配除其中的任意字符,每次匹配只匹配一个

修饰匹配次数:

{n} 表达式重复n次,如"a{5}" 至关于"aaaaa"
{m,n} 表达式至少重复m次,最多重复n次,如:"ba{1,3}"能够匹 配"ba"或"baa"或"baaa"
{m,} 表达式至少重复m次,好比:"\w\d{2,}"能够匹配 "a12","_456"等
? 表达式出现 0次或者 1次,至关于 {0,1}
+ 表达式至少出现 1次,至关于 {1,}
* 表达式不出现或出现任意次,至关于{0, }

匹配方法:

^ 从字符串开始的地方匹配
$ 从字符串结束的地方匹配
| 能够匹配左或者右

贪婪模式 :尽量多的匹配
非贪婪模式 :尽量少的匹配

grep

这条语句能够用来查找关键字,全文搜索,而且能够直接查找文件内的内容。其中:

n:为显示行号

r:为递归查找

例如,若是想查找某个宏,咱们已知宏保存在include文件夹中,因此可使用下列语句:

grep -nr XXX /usr/include(XXX为所要找的宏)

第二章节 vi、 gcc、gdb、make的使用

vim编辑器:编写代码

gcc编译连接器:编译程序

预处理:gcc –E hello.c –o hello.i ;gcc –E调用cpp 产生预处理过的C原始程序 
编 译: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 产生可执行文件 
运行: ./hello

注意:
gcc的通常格式为: 
gcc [选项] 要编译的文件 [选项] [目标文件],
其中,目标文件可默认,gcc默认生成可执行的文件,名为编译文件.out.

静态库

静态库是一系列的目标文件(.o文件)的归档文件((lib+name).a文 件);连接阶段,选择静态库,后缀名为“.a”;选择动态库,后缀名为“.so”。

静态连接库的生成: gcc -c 文件名.c ar rcsv libxxx.a xxx.o

静态库的使用: gcc -o 文件名 文件名.c -L. -lxxx //连接到静态库

注意:-L :在库文件的搜索路径列表中添加dir目录

   -l : 在头文件的搜索路径列表中添加dir目录

共享库

共享库的生成 gcc -fPIC -c xxx.c

gcc -shared -o libxxx.so xxx.o

共享库的使用: gcc -o main main.c -L. -lxxx

注册共享库的方法

将库文件直接复制到/lib或者/usr/lib目录下: cp (lib+name).so /lib

gdb调试器:调试代码

(1)使用流程

查看文件:l 
设置断点:在b后加入相对应的行号。例b 6 
查看断点状况:设置完断点后键入info b,在gdb中能够设置多个断点。bt 查询调用函数的状况。 
运行代码:默认从首行开始运行代码,键入r;r+行号:从该行号开始运行 查看变量值:p 变量。例:p n 
单步运行:n或s,s会进入函数,n不会进入函数 
恢复程序运行:c
注意:程序的运行状态有“运行”、“暂停”、“中止“三种。

(2)断点的设置

函数:b 文件名.c:函数名

行:b 行数

条件:b 行数 if 表达式(b 8 if == 10)

临时:tb [文件名:]行号或函数名 <条件表达式>

make项目管理器

功能 :识别文件代码是否更新,减小编译工做量

(1)makefile文件的编写规则

格式为:

目标体:依赖文件

[tab键]各目标体运行命令

目标体:由make建立,一般是目标文件或可执行文件

依赖文件:建立目标体所依赖的文件

运行命令:建立每一个目标体时须要的运行命令,必须以tab键开头。

使用make的格式:make 目标体

(2)makefile变量的定义

递归展开方式:在引用该变量时进行替换(不能用于引用本身的状况),缺点:不能在变量后追加内容。

格式定义:VAR = var

非递归展开方式:在定义处展开,并只展开一次。优势:消除变量的嵌套引用。

格式定义:VAR := var

make中变量的使用格式: $(变量名)

变量名的命名:不包括“:”、“#”、“=”以及结尾空格的任何字符串;变量名大小写不敏感。

变量分类:用户自定义变量、预约义变量、自动变量及环境变量。

(3)makefile规则

隐含规则

模式规则

第三章节 教材内容

第一章

一、信息就是位+上下文 
二、计算机系统的核心是高速缓存的概念,一层存储器是低一层存储器的高速缓存。
三、操做系统中的抽象是进程、文件、虚拟存储器、虚拟机。

第二章

一、数字的三种表示 :无符号数、有符号数、浮点数 
二、进制转化 
(1)x=2^n转化为十六进制 
将x写成x=2^n的形式,令n=i+4j,x的十六进制表示为:开头为2^i的值,后面补j个0。 
三、字和字节顺序 
字长:一个字长指明整数和指针数据的标称大小。字长决定最重要的系统参数就是虚拟地址空间的最大大小。对一个字长为w位的机器而言,虚拟地址的范围是0~2^w-1,程序最多访问2^w个字节。 
对于跨越多字节的程序对象需创建两个规则: 
小端法:高对高,低对低 
大端法:从视觉上,是此次阅读的顺序,与小端法相反。 
使字节顺序变得可见的三种方式: 
不一样类型的机器之间经过网络传送二进制数据时,网络应用程序的代码编写必须遵照已创建的关于字节顺序的规则; 
使用反汇编器,处理整数数据的字节序列的存储字节顺序问题; 
当编写规避正常的类型系统的程序时。 
四、布尔代数 
(1)位向量的运算:按位运算 
(2)位向量的应用:表示有限集合 
掩码表示的是设置为有效信号的集合。 
(3)位级运算 
|:或 
&:与 
~:取反 
^:异或 
掩码运算:掩码是一个位模式,表示从一个字中选出的位的集合。例如:位级运算x&0xFF生成一个有x的最低有效字节组成的值。 
(4)逻辑运算 
逻辑运算符:||(或)、&&(与)、!(非) 
(5)移位运算 右移包括:逻辑右移、算数右移 
逻辑右移:左端补k个0(经常使用于无符号数) 
算数右移:左端补k个最高有效位的值(用于有符号数) 
五、补码编码

补码形式是最多见的有符号数的计算机表示方式 将字的最高有效位解释为负权 B2T(W)函数为:B2T(x) = -x(w-1)2^(w-1)+∑xi2^i(求和从i=0到i=w-2)

六、有符号数和无符号数之间的转换

负数和正数相等的状况:u=2147483648 =-2147483648
(当输出分别为无符号形式和有符号形式时)

七、扩展数的位表示 
零扩展:将无符号数转换为更大的数在表示的开头添加0
符号扩展:将一个补码数字转换为一个更大的数据类型
 
八、截断数字 
截断数字:不用额外的位来扩展一个数值,而是减小表示一个数字的位数。

注意!!补码通过截断处理后的结果还是补码,注意结果为负数时转化为十进制数

九、使用无符号数的状况 
(1)把字仅仅看作是位的集合,并无任何数字意义时 
(2)当实现模运算和多精度运算的数学包时,数字是由数的数组来表示的,无符号值也会很是有用。
十、整数运算 
(1)无符号加法 
(2)补码加法 
(3)补码的非 
(4)无符号乘法 
两个数x、y相乘且x、y的位数为w,则结果的位数为2w。 
(5)补码乘法 
同无符号乘法。 若为截断后的结果,则取结果的后w位做为计算结果。 注意:无符号运算和补码运算在“+”、“-”、“”在位级上有相同的结果。 
(6)乘以常数 
对于某个常数K的表达式x
K生成代码,编译器会将K的二进制表示表达为一组0或1的交替的序列: [(0…0)(1…1)(0…0)…(1…1)] 能够用如下两种形式来计算这些乘积的结果:

A:(x<<n)+(x<<n-1)+……+(x<<m) 
B:(x<<n+1)-(x<<m) 
注意:对于n为最高位的状况,B:-(x<<m) 
注意!!(x<<0)的结果是x,而不是0

(7)除以2的幂 
设x/K,令K=2^n, 
当x为正数时,计算 x>>n; 
当x为负数时,将x加上偏置量,即加上2^n-1(即K-1),计算** (x+偏置量)>>n**。 
十一、浮点数 
(1)二进制小数 
将十进制小数转换为二进制小数 
首先,将十进制小数写成分数的形式,将分数的分子部分,写成二进制的形式;将分数的分母部分写成2^n的形式,将分子的二进制形式,从右往左数,数n位添加小数点。 
小数点左移:除以2 
小数点右移:乘以2
 
(2)IEEE浮点数表示 
表示形式为:V = (-1)^s * M * 2^E 
符号:s符号位。 
尾数:M是一个二进制小数,它的范围是1 ~ 2-ε,或者是0 ~ 1-ε。 
阶码:E的做用是对浮点数据加权,这个权重是2的E次幂(多是负数)。 
根据阶码的值,可分为一下三种状况: 
状况一:规格化的值 (当阶码字段不全为0或全为1时) 
E = e-Bias 
Bias = 2^(k-1)-1 
M = 1+f 
状况二:非规格化的值 (当阶码字段全为0时)
E = 1-Bias
Bias = 2^(k-1)-1 
M = f
状况三:特殊值 (当阶码字段全为1时)
当小数域全为0时, 当s=1时,为-∞;当s=0时,为+∞。
当小数域不全为0时,为NaN。 
(3)浮点数的舍入 
有四种状况分别是:向偶数舍入(默认)、向零舍入、向下舍入、向上舍入。 
(4)浮点运算
浮点加法:不知足结合性、知足单调性 浮点乘法:不知足结合性、知足单调性,在加法上不知足分配性

第三章

一、反汇编命令 objdump -d xxx.o 
二、执行汇编命令:gcc –s xxx.c –o xxx.s
三、64位处理器获得32代码的命令:gcc –m32 –s xxx.c
四、三种操做数:当即数、寄存器、存储器
五、条件码 : CF:进位标志 ZF:零标志 SF:符号标志 OF:溢出标志
六、jump指令:直接跳转——后面跟标号做为跳转目标; 间接跳转——*后面跟一个操做数指示符
七、传送指令包括:数据传送指令和条件传送指令 
八、call指令的效果是将返回地址入栈。并跳转到被调用过程的起始处。 
九、ret指令返回到call指令后的那条指令
十、leave指令可使栈作好返回的准备 等价于:
movl %ebp,%esp ; popl %ebp

第四章

一、指令体系结构:一个处理器支持的指令和指令的字节级编码
二、程序员可见状态:8个寄存器状态、程序计数器PC。 
三、指令集的一个重要性质:字节编码必须有惟一的解释。
四、Y86异常:状态码1,AOK,程序正常; 状态码2,HLT,处理处执行halt指令; 状态码3,ADR,非法地址;状态码4,INS,非法指令。 
五、建立Y86代码的惟一工具是汇编器 ;YIS:指令集模拟器 六、pushl指令会把栈指针减4,而且将一个寄存器值写入存储器中。 
七、SEQ执行处理一条完整指令的步骤:取址、译码、执行、访存、写回、更新 
八、nop指令:除了将PC加1,不进行任何处理; halt指令:将处理器状态设置为HLT,致使处理器中止运行。
九、取址阶段包括指令存储器硬件单元。
instrvalid:指示指令是否合法 needregids:指示是否包括一个寄存器指示符字节 need_valC:指示是否包括一个常数字 instrvalid和imemerror在访存阶段被用来产生状态码。
十、“cond”硬件单元会根据条件码和功能码来肯定是否进行条件分支或者条件数据传送。

第六章

一、随机访问存储器分为:静态的SRAM、动态的DRAM
二、根据携带信号不一样,总线可分为数据总线、地址总线、控制总线。 
三、计算磁盘容量的公式:
磁盘容量 = 字节数/扇区 X 平均磁盘数/磁道 X 磁道数/表面 X 表面数/盘片 X 盘片数/磁盘
四、访问时间=寻道时间+旋转时间+传送时间 
五、最大旋转延迟=1/RPM X 60secs/1min (s) ;平均旋转时间是最大旋转时间的一半
六、平均传送时间= 1/RPM x 1/(平均扇区数/磁道) x 60s/1min
七、逻辑磁盘块三元组(盘面,磁道,扇区):惟一地标示了对应的物理扇区
八、CPU使用一种称为存储器映射I/O的技术来向I/O设备发出命令。
九、局部性包括时间局部性和空间局部性。
十、循环有好的时间和空间局部性 
十一、高速缓存:上一层作下一层的高速缓存 
十二、缓存不命中的种类 
冷缓存(强制不命中\冷不命中):一个空的缓存,对于有效位为0的状况 ; 容量不命中:当工做集的大小超过缓存的大小时;冲突不命中:限制性的放置策略会引发的一种不命中。
1三、每一个存储器地址有m位,造成M=2^m个不一样的地址; 高速缓存组:S = 2^m个高速缓存组的数组 ; 高速缓存行:B = 2^m字节的数据块组成 ; 有效位:指明这个行是否包含有意义的信息; 标记位:惟一地标识存储在这个高速缓存行中的块,t = m -(b+s) 
1四、高速缓存参数的性能影响
缓存大小的影响;块大小的影响;相联度的影响;写策略的影响

第七章

一、c语言程序执行的过程涉及的工具:c预处理器(cpp)、编译器(cc1)、汇编器(as)、连接器程序(ld) 
二、连接器的任务:符号解析、重定位 
三、目标文件的三种形式:可重定位目标文件、可执行目标文件、共享目标文件
四、目标文件的格式:a.out、COFF、DE、ELF
五、连接器上下文的三种符号:全局符号、外部符号、本地符号

第四章节 考题

第三周

填空:实验楼环境中全部的默认系统用户名和密码均为(shiyanlou)。
填空:Linux Bash中,Ctrl+a快捷键的做用是(将光标移至输入行头,至关于Home键)。
判断:Linux Bash中, man printf和man 1 printf 功能等价。 ok
填空:在 Linux 里面可使用使用(groups)命令知道本身属于哪些用户组。 
填空:在 Linux 里面可使用使用(chmod)命令修改文件的权限。
填空:Linux中没有C盘,D盘,其文件系统的目录是由(FHS)标准规定好的。 
判断:Linux Bash中,cd - 命令能够切换到'home'目录。 x 应该是cd ~ , cd -切换到上一个目录 
判断:Linux Bash中,强制删除test文件的命令是(rm -f test )。

判断:Linux Bash中,cat -n 和 nl 命令功能等价。ok

判断:Linux Bash中,source 和 . 命令功能等价。 ok

填空:Linux Bash中,查找home目录中前天建立的文件的命令是(find ~ -ctime 2)。 区分 2 +2 -2 的意义, 三种时间参考学姐李冰清的研究 
判断:Linux Bash中,使用tar命令把home目录打包成home.tar的命令是( tar -cf home.tar ~)
填空:Linux Bash中,zip命令使用(-e)参数能够建立加密压缩包。 
判断:Linux Bash中,df和 du 命令功能等价。x
填空:Linux Bash中,ls . | sort 命令的功能是( 显示当前目录内容并排序)

填空:Linux Bash中,使用grep查找当前目录下*.c中main函数在那个文件中的命令是( grep main *.c )
填空:Linux Bash中,使用wc统计hello.c共有几行代码的的命令是( wc -l hello.c)
判断:col 命令的-h参数能够将Tab换成对等数量的空格建。x ,空格换tab
填空:Linux Bash中,把ls命令显示当前目录的结果存入ls.txt的命令输出重定向命令是(ls > ls.txt)
填空:Linux Bash中,(tee)命令能够同时重定向到多个文件。

第四周

man -k 填空: 数据结构中有线性查找算法,C标准库中没有这个功能的函数,但Linux中有,这个函数是(lfind或lsearch)

cheat 填空:To list the content of /path/to/foo.tgz archive using tar ( tar -jtvf /path/to/foo.tgz )

find 填空:查找当前目录下全部目录的find命令是(find . -type d)
grep 填空:查找宏 STDIN_FILENO 的值的命令是(grep -nr XXX /usr/include)
CH01填空:计算机系统中的全部信息都是位串表示的,所谓(信息)就是位+上下文。
CH01填空:存储器层次结构的主要思想是上层存储器做为下层存储器的(高速缓存)。
CH01填空:操做系统中最基本的四个抽象是(虚拟机、进程、虚拟存储器、文件)。
CH07填空:连接器的两个主要任务是(符号解析和重定位)。
CH07选择:教材p449中 swap.c中的bufp1 是( A ) A 全局符号 B外部符号 C本地符号 D以上都不对
CH07 判断:C语言中,全局变量是强符号。(X)
CH07 填空:(加载器)将可执行文件的内容映射到存储器,并运行这个程序。
CH07 选择:Linux中,反汇编.text节中的二进制指令使用的工具是(d)A ar B strings C readelf D objdump

实验题

一、 在vi中,查看scanf和printf man pages(帮助文档)的命令分别是?(2分) K 3K 二、 编译和运行以上代码的命令(2分)

gcc *.c -o main ./main 三、 使用GDB调试以上代码:编译代码的命令是?main.c中如何给main函数设置断点?如何在第六行设置断点?(3分)
gcc -g *.c -o main 
b main 
b 6

四、 除了main.c外,其余4个模块(add.c sub.c mul.c div.c)的源代码不想给别人,如何制做一个mymath.a静态库?main.c如何使用mymath.a?(3分)

gcc -c add.c sub.c mul.c div.c
ar rcvs libmymath.a add.o sub.o mul.o div.o

gcc main.c -o main -L. -lmymath
( gcc main.c ./libmymath.a -o main)

五、 除了main.c外,其余4个模块(add.c sub.c mul.c div.c)的源代码不想给别人,如何制做一个mymath.so共享库?main.c如何使用mymath.so?(4分)

gcc -fPIC -c add.c sub.c mul.c div.c
gcc -shared -o libmymath.so add.o sub.o mul.o div.o

gcc -o main main.c -L. -lmymath

libmymath.so 要拷贝到/lib or /usr/lib

六、 写出编译上面代码的makefile,编译出来的目标文件为testmymath, 只用显式规则就能够.(4分)

testmymath: main.o add.o sub.o mul.o div.o 
gcc main.o add.o sub.o mul.o div.o -o testmymath
main.o: main.c head.h
gcc -c main.c
add.o: add.c head.h
gcc -c add.c
sub.o: sub.c head.h
gcc -c sub.c
mul.o: mul.c head.h
gcc -c mul.c
div.o: div.c head.h
gcc -c div.c

第五周

man -k 填空:Linux中显示文件(file )属性(status)的命令是( stat )

cheat 填空:使用du命令对当前目录下的目录或文件按大小排序的命令是( du -sk | sort -rn ) 
grep 填空:~/test 文件夹下有不少c源文件,查找main函数在哪一个文件中的命令( grep main.c )

vi 填空: vi中查看函数qsort的帮助文档的快捷键为(K)

gdb 判断: gdb中next和step均可以单步跟踪,根据自顶向下原则应该优先选用step. (X )

ch01 填空:抽象是CS中一个重要的概念,在出来器里,(指令集结构)提供了对实际处理器的抽象。 
ch01 选择:并行的三个层次不包含(C)。A 线程级并发 B指令级并行 C进程级并发 D SIMD 
ch07 填空:gcc -f PIC xxx.c中的PIC的意思是(位置无关的代码 or Position-Independent Code 
2.4 填空:计算 0x503C + 100 = ( 0x50A0 ) ,结果用16进制表示 
2.6 填空:练习2.6中匹配的二进制共21位,用16进制表示是( 0x159141 ) 
2.8 填空: a,b长度都是一个字节,a=1,b=6, a|b = ( 7 or [00000111] ) 
2.11 判断: 代码中第四行 "<=" 换成“>=” 就能够解决代码问题.(X) 
2.13 判断: 
//compute x&y, only calls to functions bis and bic. (X)

int bool_and(int x, int y)
{  
    int result = bic(x, y);  
    return result;  
}

2.14 填空:a,b长度都是一个字节,a=1,b=6, a||b = ( 1 or true ) 
2.18填空:16位机器上,补码0x8004转化等值的十进制是(-2044) 
2.19 判断:T2U4(-8) + 8 = 16 (OK) 
2.21 判断:C语言中: -2147483647-1U < -2147483647 ( ok )
2.23 填空:fun2(0xED005380) = (0xFFFFFF80)
2.24 填空:四位数0xC 截断为3位数,解释为无符号数的截断值是(4) 
2.25 判断:代码for中条件 i<=(int) length -1 能够消除程序bug ( ok ) 
2.27 判断: 函数代码能够是 ruturn x+y >= y; (ok) 
2.29 填空: [11000] + [11000] = ([110000]) 
2.33 填空:对于四位数补码8,其补码的非表示为十进制为(-8)
2.34 填空:补码 [100] * [101] = ([001100])
2.40 填空:K=31 移位2,加/减1,表达式为((x<<5)-x)
2.44 判断: 针对题目:(x>0)|| ((x-1)<0)的值为真 (x)
2.45 填空:二进制小数1.101转化为十进制为(1.625)
2.47 判断:浮点数 00111转化为十进制为1.5 (X)
2.50 填空:二进制数10.110舍入到最接近的二分之一的十进制的值为(2.5)
2.54 判断: f== -(-f) (ok)

第六周 第三章

regex 判断: 正则表达式r.t能够匹配rt. (x)
regex 判断:正则r表达式zo
能够匹配z. (ok)
*
***CH03 填空:从i386开始,x86体系结构扩展到了32位,增长了(平坦)寻址模式 *** CH03 填空:在64位机器上,要用gcc编译出32位机器码,须要使用(-m32) 选项 
CH03 填空:对于机器级编程来讲,两种重要的抽象是(ISA,虚拟地址) 
CH03 填空:Linux中,对目标代码code.o进行反汇编的命令是(objdump -d code.o)
CH03 填空:IA32指令中,操做数的三种类型是(当即数、寄存器、存储器) 
3.1 填空: 针对练习3.1中的图,操做数 8(%eax,%ecx,4)的值是(0x11) 
***CH03 判断: 把内存中地址为0x4050处的字复制到地址为0x405c处的指令是 movw ($0x4050) ,($0x405c) (x) *** 
CH03 判断: %esp的值为0x10c, pushl %eax后,%esp的值为0x108. (ok) 
3.3 判断: movb $0xF, (%eax) 是正确汇编语句. (ok) 
3.5 填空: decode1函数的功能是( 数据交换 ) 
3.6 填空: 指令leal 3(%eax,%ecx,4), %edx 存储在%edx中的值为( 3+x+4y ) 
3.9 填空: arith函数的功能是( ~((x^y)>>3) -z ) 
3.14 判断: 汇编代码不会记录程序值的类型。(ok) 
CH03 填空:C语言中的条件表达式在汇编中是结合(有条件跳转和无条件跳转)实现的。 
CH03 填空:C语言中的循环结构能够用(条件测试和跳转组合起来)实现。 
CH03 选择:栈用来(ABCD) A 传递参数 B 存储返回信息 C保存寄存器 D本地存储。

CH03 填空:Linux汇编中,造成空调用栈帧的语句是(push %ebp movl %esp %ebp)

CH03 填空:Linux汇编中,函数有返回值存在( %eax )寄存器中。

第七周 第四章

find: 填空:查找当前目录下2天前被更改过的文件 (find . -mtime +2 -type f -print) 
CH04 判断:Y86中,程序员的可见状态包括PC。(ok)

CH04 判断:Y86中,有5个双字节指令。(x)

4.1 Y86中 jmp 0x100 对应的机器码是(0x7000010000) 
4.2 Y86中 0xa00f 对应的汇编语句是(pushl %eax)
CH04 判断:Y86中,状态码INS表示遇到非法指令。(ok)
CH04 填空:建立Y86代码惟一的工具是(汇编器 or YAS)

4.6 判断:Y86中,pushl压入栈的是减去4的%esp的值。(x)

CH04 填空:实现一个数字系统须要三组成部分(组合逻辑、存储器元素、时钟信号)。
CH04 填空:HCL表明(Hardware Control Language, 硬件控制语言) 
4.8 填空:xor的HCL表达式是(bool xor = (!a &&b) ||(a && !b)) CH04 填空:HCL表达式bool Eq = (A==B)的功能是(判断字A、B是否相等) 
4.10 填空:写出HCL代码,求输入字A、B中的最小值( 注意是两个 ) 
CH04 填空:Y86中,使用时钟寄存器保存程序计数器PC、条件代码CC和(程序状态Stat) 
CH04 填空:Y86中,指令执行分为六个阶段(取指、译码、执行、访存、写回、更新PC) 
CH04 填空:Y86中对于PC值p=100,指令包括一个寄存器指示符字节和,常数1,增长器产生值(106) 
4.17 填空:实现HCL代码,须要查看教材第( 232 )页的图。 
CH04 填空:p266, icode == IOPL :ifun; 的功能是(加减与异或运算的选择) 
4.24 填空:mem_write中为何有IRMMOVL( 寄存器往内存写 )

第八周 第六章

CH06 判断: SRAM比DRAM快。(ok) 
CH06 判断:EEPROM能够用紫外线进行擦除。(x)
CH06 填空:根据携带信号不一样,总线可分为(数据总线、地址总线、控制总线)三种。 
6.2 填空:计算磁盘容量(327.68G):4个盘片,100000个柱面,每条磁道800个扇区,每一个扇区512个字节。
CH06 填空:对磁盘扇区的访问时间包括三个部分(寻道时间、旋转时间、传送时间)。
6.3 填空:最大旋转时间是(4ms)。
CH06 填空:逻辑磁盘块的逻辑块号能够翻译成一个(盘面、磁道、扇区)三元组。
CH06 填空:CPU使用(存储器映射I/O)技术向I/O设备发出命令。 
CH06 填空:局部性有两种形式(时间局部性、空间局部性)。
CH06 判断:程序访问一个向量,步长越大空间局部性越好。(x)

CH06 判断:程序中的循环语句具备良好的时间局部性和空间局部性(ok)

6.8 填空:只修改第八行,让程序具备良好的空间局部性。改成:( sum +=a[i][j][k] )
CH06 填空:存储层次结构的中心思想是(上层做为下层的缓存)。 
CH06 填空:缓存不命时,决定哪一个块是牺牲块由(替换策略)来控制。 
CH06 填空:空缓存的不命中叫(强制性不命中或冷不命中) 
CH06 填空:容量不命中的缘由是(缓存过小) 
CH06 填空:高速缓存结构能够用元组(S,E,B,m)来描述。 
6.10 填空:高速缓存容量为1024,高速缓存结构为(( 32 ),4,8,32) 
6.11 填空:3/4的命中率的如何计算的((32-8)/32,或每4次有一次不命中)
CH06 判断:存储器山中山脊表明空间局部性。(x)

第二部分 收获

1.站在全局的角度,从新理解计算机系统。从新复习了计算机导论、汇编、c语言的相关知识,感受本身对知识的理解有了更深的认识。
二、学习了linux的相关命令,这能够说是元知识,可是,我学习的不太扎实,若是能够常用,可能会掌握的更熟练。
三、学习了vim、gcc、gdb、makefile等工具,这样能够为以后的学习打下扎实的基础,后来我发现gdb在缓冲区漏洞攻击中也有很大的做用。
四、了解计算机如何将高级语言转换为低级语言,就是汇编语言,又把低级语言转化成立机器语言,就是01代码,在第四章的学习中,我经过学习Y86系统,对计算机的工做原理有了深入的认识。 五、掌握了自学的方法,也学会了本身解决遇到的问题,这多是除了收获知识之外最大的收获。在遇到其余学科的问题时,我也有了一套本身搜索得到解决办法的方法,这能够说是学会捕鱼的方法,而不仅是获得了鱼。

第三部分 不足

一、第一周的学习,因为当时在电子实习,而且参加了一些活动,没有很好的准备,只是囫囵吞枣的看了一下,包括实验只是照着作了一下,作完很快就忘了,这也是我刚开始基础没打好,后面用到的时候,要不断的现查。 
二、对学习的内容没有复习,只是学一遍,考试以前大致看一下,没有作到把书看不少遍,因此理解还只是很浅层,但有以前课程的基础,还不至于看不懂,可是更深刻的部分,也不能熟练掌握。 
三、有时候有一些扩展资料,没有好好阅读,就是把它当小说看了,也没太过脑子。
四、仍是应该一步一个脚印慢慢来,就好比说第一周的linux基础的学习,当时为了按时完成任务,看的很浮躁固然也很快,然而这样看完了一遍心里以为已经看过了,但以后就是不想再看一遍了,可能就是当时看的时候潜意识里以为看的很痛苦,因此从一开始就不能糊弄,想遇上也不是那么轻松的。
五、面对各类各样的要求,总是不能作到面面俱到,老是拆了东墙补西墙的,这少一点,那少一点,仍是应该态度更加端正一些!!!
六、说到底,最大的问题就是浮躁,就是能不能沉下心去学,能不能拒绝周围的诱惑,仍是应该更认真一些!!!

第四部分 课程建议和意见

一、感受老师那里有不少经验和技术,但愿老师上课能够多讲一些,一些实用的技巧,我以为老师以前让咱们看的课本的部分,真的就是知识部分,就是想自学的人能够经过百度直接获得的部分,咱们如今是了解这些知识,但毫不是深刻透彻的理解,毕竟学一遍,并且是自学的,程度确定是不同的,因此仍是想能多听一听老师讲的:)

参考资料

一、《深刻理解计算机系统》课本

二、实验楼实验指导书:https://www.shiyanlou.com/courses/413 实验

三、每周重点:http://group.cnblogs.com/topic/73069.html

四、往期博客http://i.cnblogs.com/

五、Linux man命令的使用方法http://www.cnblogs.com/hnrainll/archive/2011/09/06/2168604.html

相关文章
相关标签/搜索