20145326蔡馨熠《信息安全系统设计基础》第八周学习总结

20145326蔡馨熤《信息安全系统设计基础》第八周学习总结

第一章

教材内容

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

常见的Linux命令

man

man -k :程序员

经常使用来搜索,结合管道使用。例句以下:数据库

man -k k1 | grep k2 | grep 2

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

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

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

man sleep

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

man 3 sleep

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

cheat

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

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  使用指定的日期时间,而非如今的时间。

grep

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

n:为显示行号

r:为递归查找

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

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

重点习题

  1. 填空:Linux Bash中,Ctrl+a快捷键的做用是(将光标移至输入行头,至关于Home键)。
  2. 填空:Linux中没有C盘,D盘,其文件系统的目录是由(FHS)标准规定好的。
  3. 判断:Linux Bash中,cd ~ 命令能够切换到'home'目录。 (Ok)
  4. 判断:Linux Bash中,强制删除test文件的命令是(rm -f test )。
  5. 填空:Linux Bash中,查找home目录中昨天建立的文件的命令是(find ~ -ctime 1)。
  6. 判断:Linux Bash中,使用tar命令把home目录打包成home.tar的命令是( tar -cf home.tar ~)
  7. 填空:Linux Bash中,zip命令使用(-e)参数能够建立加密压缩包。
  8. 填空:Linux Bash中,ls . | sort 命令的功能是( 显示当前目录内容并排序 )
  9. 填空:Linux Bash中,使用grep查找当前目录下*.c中main函数在那个文件中的命令是( grep main *.c )
  10. 填空:Linux Bash中,使用wc统计hello.c和main.c共有几行代码的的命令是( wc -l hello.c main.c )
  11. 填空:Linux Bash中,把ls命令显示当前目录的结果存入ls.txt的命令输出重定向命令是(ls > ls.txt)

第二章

教材内容

一、进制转化 
(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的最低有效字节组成的值。

 

四、补码编码

补码形式是最多见的有符号数的计算机表示方式 将字的最高有效位解释为负权 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的表达式xK生成代码,编译器会将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)浮点运算

浮点加法:不知足结合性、知足单调性 浮点乘法:不知足结合性、知足单调性,在加法上不知足分配性

vi、gcc、gdb、make的使用

vi编辑器:编写代码

一、六种模式

普通模式  
插入模式:按i键进入,按esc键退出  
可视模式  
选择模式  
命令行模式:从普通模式输入:进入命令行模式  
Ex模式

二、游标移动

按键  说明
h   左
l   右(小写L)
j   下
k   上
w   移动到下一个单词
b   移动到上一个单词

三、插入

命令  说明
i   在当前光标处进行编辑
I   在行首插入
A   在行末插入
a   在光标后插入编辑
o   在当前行后插入一个新行
O   在当前行前插入一个新行
cw  替换从光标所在位置后到一个单词结尾的字符

四、退出

命令  说明
:q! 强制退出,不保存
:q  退出
:wq!强制保存并退出
:w <文件路径>   另存为
:saveas 文件路径另存为
:x  保存并退出
:wq 保存并退出

五、删除

命令  说明
x   删除游标所在的字符
X   删除游标所在前一个字符
Delete  同x
dd  删除整行
dw  删除一个单词(不适用中文)
d$或D删除至行尾
d^  删除至行首
dG  删除到文档结尾处
d1G 删至文档首部

六、行间跳转

命令  说明
nG(n Shift+g)   游标移动到第 n 行(若是默认没有显示行号,请先进入命令模式,输入:set nu以显示行号)
gg  游标移动到到第一行
G(Shift+g)  到最后一行

七、行内跳转

命令  说明
w   到下一个单词的开头
e   到下一个单词的结尾
b   到前一个单词的开头
ge  到前一个单词的结尾
0或^ 到行头
$   到行尾
f<字母>   向后搜索<字母>并跳转到第一个匹配的位置(很是实用)
F<字母>   向前搜索<字母>并跳转到第一个匹配的位置
t<字母>   向后搜索<字母>并跳转到第一个匹配位置以前的一个字母(不经常使用)
T<字母>   向前搜索<字母>并跳转到第一个匹配位置以后的一个字母(不经常使用)

八、复制、粘贴、剪切

命令  说明
yy  复制游标所在的整行(3yy表示复制3行)
y^  复制至行首,或y0。不含光标所在处字符。
y$  复制至行尾。含光所在处字符。
yw  复制一个单词。
y2w 复制两个单词。
yG  复制至文本末。
y1G 复制至文本开头。

p(小写) 粘贴至光标后(下)
P(大写) 粘贴至光标前(上)

dd  删除命令就是剪切

九、查找

命令  说明
/icmp   查找字符串icmp
n   查找下一个icmp
?tcp向上查找字符串tcp
N   查找上一个出现的tcp
\*  寻找游标所在处的单词
\#同上但 \* 是向前(上)找,\#则是向后(下)找
g\*同\*  但部分符合该单词便可
g\#同\#  但部分符合该单词便可

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调试器:调试代码

  • 使用流程

查看文件:l 
设置断点:在b后加入相对应的行号。例b 6 
查看断点状况:设置完断点后键入info b,在gdb中能够设置多个断点。 bt 查询调用函数的状况。 
运行代码:默认从首行开始运行代码,键入r;r+行号:从该行号开始运行

查看变量值:p 变量。例:p n 
单步运行:n或s,s会进入函数,n不会进入函数 
恢复程序运行:c
注意:程序的运行状态有“运行”、“暂停”、“中止“三种。

  • 断点的设置

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

行:b 行数

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

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

make项目管理器

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

  • makefile文件的编写规则

格式为:

目标体:依赖文件

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

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

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

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

使用make的格式:make 目标体

  • makefile变量的定义

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

格式定义:VAR = var

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

格式定义:VAR := var

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

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

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

(3)makefile规则

隐含规则

模式规则

重点习题

find 填空:查找根目录下全部目录的find命令是(find / -type d)

grep 填空:查找宏 STDOUTFILENO 的值的命令是(grep -nr STDOUTFILENO /usr/include)

CH07填空:Linux系统中,连接器程序是(ld)

CH07选择:教材p449中 swap.c中的buffp1 是在(C) A .text段 B.data段 C.bss段 .symtab段

CH07 判断:gcc –c hello.c 产生的hello.o是可重定位目标文件。(ok)

CH07 填空:(加载器)将可执行文件的内容映射到存储器,并运行这个程序。

CH07 填空:p455 foo3.c的运行结果是x=(15212).

 

在vim中,查看printf man pages(帮助文档)的命令是3k

编译和运行以上代码的命令(1分)

gcc *.c -o main (-o 后面的能够变化,下面要一致)

./main

使用GDB调试以上代码:编译代码的命令是?main.c中如何给say_hello函数设置断点?(2分)

gcc -g *.c -o main 

b say_hello

除了main.c外,hello.c的源代码不想给别人,如何制做一个myhello.a静态库?main.c如何使用myhello.a?(2分) 制做、使用各一分

gcc -c hello.c

ar rcvs libhello.a hello.c

gcc main.c -o main -L. -lhello (or gcc main.c ./libhello.a -o main)

除了main.c外,hello.c的源代码不想给别人,如何制做一个myhello.so共享库?main.c如何使用myhello.so?(2分)制做、使用各一分

gcc -fPIC -c hello.c

gcc -shared -o libhello.so hello.o

gcc -o main main.c -L. -lhello

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

写出编译上面代码的makefile,编译出来的目标文件为testhello, 只用显式规则就能够.(3分),一条一分

testhello: main.o hello.o 

gcc main.o hello.o -o testhello

main.o: main.c hello.h

gcc -c main.c

hello.o: hello.c hello.h

gcc -c hello.c

第三章

教材内容

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

重点习题

ch07 判断:C语言中的全局变量能够一次声明,屡次定义。(X)

2.6 填空:练习2.6中整数换成12345,浮点数换成12345.0,最多时共(13)位匹配。

2.8 填空: a,b长度都是一个字节,a=6,b=15, a|b = ( 15 )

2.12 填空: 得到unsigned x的最低位字节的C表达式是(x & 0xff)

2.14 填空:a,b长度都是一个字节,a=6,b=15, a||b = ( 1,True,非零 均可以 )

2.18 填空:16位机器上,补码0xFFFE转化等值的十进制是( -2 )

2.19 填空:T2U4(8) = ( 8 )

2.21 判断:C语言中: -2147483647-1 < -2147483647 ( ok )

2.23 填空:fun1(0xED005380) = ( 0x00000080 ,0x80都行 )

2.24 填空:四位数0xD 截断为3位数,解释为无符号数的截断后值是( 5 )

2.33 填空:对于四位数补码0xC,其补码的非表示为十进制为( 4 )

2.34 填空:三位数补码乘法(截断值): [100] * [111] = ( [100] 或-4 )

2.40 填空:K=30 移位2,加/减1,表达式为( (x<<5)-(x<<2) )

2.45 填空:二进制小数1.11转化为十进制为( 1.75 )

2.47 判断:浮点数 00110转化为十进制为1.5 ( ok )

2.50 填空:二进制数0.111舍入到最接近的二分之一的十进制的值为( 1 )

第四章

 

教材内容

一、指令体系结构:一个处理器支持的指令和指令的字节级编码
二、程序员可见状态:8个寄存器状态、程序计数器PC。 
三、指令集的一个重要性质:字节编码必须有惟一的解释。 
四、建立Y86代码的惟一工具是汇编器 ;YIS:指令集模拟器 五、pushl指令会把栈指针减4,而且将一个寄存器值写入存储器中。 
五、取址阶段包括指令存储器硬件单元。 instrvalid:指示指令是否合法; needregids:指示是否包括一个寄存器指示符字节; need_valC:指示是否包括一个常数字; instrvalid和imemerror在访存阶段被用来产生状态码。
六、“cond”硬件单元会根据条件码和功能码来肯定是否进行条件分支或者条件数据传送。

重点习题

Linux 判断:zip程序能够压缩也能够解压文件。(X)

3.1 填空: 针对练习3.1中的图,操做数 2(%eax,%edx,2)的值是(0x13)

CH03 填空: 把当即数0x4050复制到%eax的指令是( movl $0x4050 ,%eax )

CH03 判断: %ebp的值为0x10c, pushl %eax后,%ebp的值为0x108. (x)

3.5 填空:从汇编代码看出,decode1的参数先入栈的是(zp)

3.6 填空: 指令leal 8(%ecx,%eax,2), %edx 存储在%edx中的值为( 8+2x+y )

CH03 填空: jz/jnz指令中跳转条件是由(ZF)决定的。

CH03 选择:为单个过程(函数)分配的那部分栈叫(栈帧)

CH03 填空:Linux汇编中,销毁栈帧的语句是(movl %ebp,%esp popl %ebp 或leave)

CH03 填空:Linux汇编中,须要调用者保存的寄存器有(%eax,%edx,%ecx )。

CH03 填空:GDB中以16进制形式打印%eax中内容的命令是(print /x $eax)

第六章

教材内容

一、计算磁盘容量的公式:
磁盘容量 = 字节数/扇区 X 平均磁盘数/磁道 X 磁道数/表面 X 表面数/盘片 X 盘片数/磁盘


二、访问时间=寻道时间+旋转时间+传送时间 


三、最大旋转延迟=1/RPM X 60secs/1min (s) ;平均旋转时间是最大旋转时间的一半

 


四、缓存不命中的种类

冷缓存(强制不命中\冷不命中):一个空的缓存,对于有效位为0的状况 ; 
容量不命中:当工做集的大小超过缓存的大小时;

冲突不命中:限制性的放置策略会引发的一种不命中。
五、每一个存储器地址有m位,造成M=2^m个不一样的地址; 高速缓存组:S = 2^m个高速缓存组的数组 ; 高速缓存行:B = 2^m字节的数据块组成 ; 有效位:指明这个行是否包含有意义的信息; 标记位:惟一地标识存储在这个高速缓存行中的块,t = m -(b+s)

六、高速缓存参数的性能影响
缓存大小的影响;块大小的影响;相联度的影响;写策略的影响

重点习题

填空:解开sim.tar的Linux命令是(tar -xvf sim.tar)

填空:Ubuntu中安装flex的命令是(sudo apt-get install flex)

4.2 Y86中 5054fdffffff 对应的汇编语句是( mrmovl –3(%esp), %ebp )

CH04 填空:与、或、非三种逻辑门能够用一种门(与非门, 或者 或非门)实现。

4.8 填空:位级与非门的HCL表达式是( bool Y = !(A&&B) )

CH04 填空:HCL表达式a||!a的值是( 1 )

CH04 填空:下图对应的HCL描述是( bool eq=(a&&b)||(!a&&!b) )

CH04 填空:HCL中,多路复用函数使用(状况表达式)来描述。

CH04 判断:ALU是一种时序电路。(X)

CH04 填空:bool s= r==1 || r==2 || r=5 等价于(bool s = r in {1,2,5} )

CH04判断:寄存器是一种时序电路。(X)

第七章

教材内容

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

重点习题

CH06 判断:SRAM和DRAM掉电后均没法保存里面的内容。( ok )

CH06 填空:对磁盘扇区的访问时间包括三个部分中,(传送时间)最小。

6.3 填空:题目的最大旋转时间是( 4ms )。

CH06 判断:逻辑磁盘块就是一个块数组。( ok )

CH06 判断:P403两个程序功能等价,性能上不一样。( ok )

6.8 填空:代码的步长为:( N*N )

CH06 填空:LRU策略指的是替换策略的缓存会选择(最后被访问时间距如今最远的块)。

CH06 判断:发生不命中要执行(放置)策略。

CH06 填空:存储层次结构的本质是每一层存储设备都是较低一层的(缓存)。

6.10 填空:高速缓存容量为2048,高速缓存结构为(( 32 ),8,8,32)

CH06 填空:程序员能够编写(有良好空间和时间局部性)的程序来显著改进程序的运行时间。

CH06 填空:存储器给出的读访问时间是(局部性)的一个函数。

新学到的知识点

1.通配符是一种特殊语句,主要有星号(*)和问号(?),用来对对字符串进行模糊匹配
(好比文件名,参数名)。当查找文件夹时,可使用它来代替一个或多个真正字符;
当不知道真正字符或者懒得输入完整名字时,经常使用通配符代替一个或多个真正的字符。

Shell 经常使用通配符:

字符含义

  • 匹配 0 或多个字符
    ? 匹配任意一个字符
    [list] 匹配 list 中的任意单一字符
    [!list] 匹配 除list 中的任意单一字符之外的字符
    [c1-c2] 匹配 c1-c2 中的任意单一字符 如:[0-9] [a-z]
    {string1,string2,...} 匹配 sring1 或 string2 (或更多)其一字符串
    {c1..c2} 匹配 c1-c2 中所有字符 如{1..10}

2.使用 pwd 获取当前路径
绝对路径,简单地说就是以根"/"目录为起点的完整路径,以你所要到的目录为终点,表现形式如: /usr/local/bin。
相对路径,也就是相对于你当前的目录的路径,相对路径是以当前目录 . 为起点,以你所要到的目录为终点。
使用 -p 参数,同时建立父目录。
要成功复制目录须要加上-r或者-R参数,表示递归复制 跟复制目录同样,要删除一个目录,也须要加上-r或-R参数。

将文件"file1"重命名为"myfile" mv 旧的文件名 新的文件名

3.locate经过数据库查找,不过这个数据库也不是实时更新的,系统会使用定时任务天天自动执行updatedb命令更新一次

4.find命令:
与时间相关的命令参数:
-atime 最后访问时间
-ctime 建立时间
-mtime 最后修改时间

-mtime n: n 为数字,表示为在n天以前的”一天以内“修改过的文件  
-mtime +n: 列出在n天以前(不包含n天自己)被修改过的文件  
-mtime -n: 列出在n天以内(包含n天自己)被修改过的文件  
newer file: file为一个已存在的文件,列出比file还要新的文件名

5.du 命令查看目录的容量 加上-h参数,以更易读的方式展现 -d参数指定查看目录的深度
例: du -h -d 1 ~

 

收获

  • 站在全局的角度,从新理解计算机系统。从新复习了计算机导论、汇编、c语言的相关知识,感受本身对知识的理解有了更深的认识。

  • 学习了linux的相关命令,这能够说是元知识,可是,我学习的不太扎实,若是能够常用,可能会掌握的更熟练。

  • 学习了vim、gcc、gdb、makefile等工具,这样能够为以后的学习打下扎实的基础。(后来我发现gdb在缓冲区漏洞攻击中也有很大的做用)

  • 了解计算机如何将高级语言转换为低级语言,就是汇编语言,又把低级语言转化成立机器语言,也就是01代码,在第四章的学习中,我经过学习Y86系统,对计算机的工做原理有了深入的认识。

  • 掌握了自学的方法,也学会了本身解决遇到的问题,这多是除了知识之外最大的收获。不得不认可,娄老师独特的教学方式起了很大做用。最开始不习惯,本身也比较懒散,遇到难题就想着等老师讲,老师不讲就算了。这是很是很差的,学习应该强调主动性。目前学习的知识可能不会一直伴随咱们,可是掌握一套好的,适合本身的学习方法,将会受益终生!

不足

  • 第一周因为当时在电子实习,而且参加了一些活动,教材和相关学习资源只是囫囵吞枣的看了一下,因此我刚开始基础没打好,学得比较累,也没有效率。

  • 对学习过的内容没有进行复习,只是学一遍,没有作到把书看不少遍,因此理解还只是很浅层,但有以前课程的基础,还不至于看不懂,可是更深刻的部分,也不能熟练掌握。

  • 有时候有一些扩展资料,没有好好阅读,就是把它当小说看了,也没太过脑子。

  • 其实仍是应该一步一个脚印慢慢来,就好比说第一周的linux基础的学习,当时为了按时完成任务,看的很浮躁,固然也很快,看完了一遍后,心里以为已经看过了,以后就不会想再看一遍,心态仍是太浮躁,没有提升学习的效率,也没有激发学习的主动性。不过在调整本身后,效果慢慢又好起来了。

  • 到如今,我真的以为。心态是最大的问题,只要想学,没有什么学不懂的。最开始以为学习内容又多又难,态度也不端正,因此学习效率不高。其实仔细一想,真的不难,娄老师把每周的学习重点都放在博客里了,平时遇到的各类难题,娄老师也都有解答或者发表博客来更细致的解决同窗们遇到的疑惑。能够说是面面俱到啊。 我慢慢的调整本身的状态,静下心来去看教材,去理解教材,而后本身动手实践! step by step~效果仍是有很大的提高。因此嘛,仍是态度决定一切。万事开头难,可是有了一个好的开头后,就成功一半了。

课程建议和意见

我如今对这门课颇有激情,平时娄老师说的那些项目,我也都想参与作一作,但自身实力有限,因此不敢报名。感受娄老师那里有不少经验和技术,但愿老师上课能够多讲一些实用的技巧与知识,就算掌握不了,也让咱们开开眼界,我以为无形之中确定仍是能提高能力的。毕竟信息安全专业的学生,之后出去不想太丢脸。我以为老师以前让咱们看的课本相关知识,真的就只是皮毛部分,咱们目前只是在了解这些知识,但毫不是深刻透彻的理解。这还怎么学以至用呢,固然每一个同窗的实际状况不同,老师仍是得照顾大部分人。有的人想学东西,而更多人想混分。但愿老师权衡一下吧,我也会多花时间与精力的~!

 

 代码托管

 (本周没有托管的代码)

 

学习进度条

 

  代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时  
第一周 0/0 1/2 20/20 学习了一些Linux命令
第二周 58/58 1/3 20/40 学会了如何使用vi,gcc,gdb
第三周 150/208 1/4 22/62 对信息的表示和处理有更深刻的理解
第五周 150/358 1/5 21/83 对汇编语言有更深入的理解
第六周 136/494 1/6 25/108 安装Y86模拟器
第七周 115/609 2/8 24/132 理解了存储器层次结构和局部性原理
第八周 0/609 2/10 22/154 期中总结
相关文章
相关标签/搜索