信息安全系统设计基础期中总结
知识点总结:
Linux命令重点知识:
man -k command1
查询所有类似帮助文件信息,这样输出最多也可以用:man -f command1
查询以command1开头所有相关帮助信息列表
如果发现有类似:command1 (5)
-
man 5 command1
通过直接定位5获得帮助信息 -
参考资料:http://www.cnblogs.com/chengmo/archive/2010/10/26/1861809.html
-
cheat能帮助你很简单快捷的熟悉Linux下系统命令的使用方法
cheat tar
结果:
to extract an uncompressed archive:
tar -xvf /path/to/foo.tar
to create an uncompressed archive:
tar -cvf /path/to/foo.tar /path/to/foo/
……
参考资料:http://segmentfault.com/a/1190000000691131
grep -nr xxx /usr/include
在‘/usr/include’目录下明确要求包含子目录(-r
)且显示匹配行及行号地(-n
)搜索带字符串‘xxx’的文件
使用grep查找当前目录下*.c中main函数在那个文件中的命令是 grep main *.c
参考资料:http://www.cnblogs.com/end/archive/2012/02/21/2360965.html
- find:
查找当前目录下所有目录的find命令是find . -type d
查找当前目录下2天前被更改过的文件 find . -mtime +2 -type f -print
查找home目录中前天创建的文件的命令是find ~ -ctime 2
-
Ctrl+a快捷键的作用是
将光标移至输入行头,相当于Home键
-
使用
chmod
命令修改文件的权限 -
cd ~
命令可以切换到'home'目录。 -
cd -
切换到上一个目录 -
把ls命令显示当前目录的结果存入ls.txt的命令输出重定向命令是
ls > ls.txt
-
ls . | sort
命令的功能是显示当前目录内容并排序
第一章&&第七章
操作系统中最基本的四个抽象是虚拟机、进程、虚拟存储器、文件
链接器的两个主要任务符号解析和重定位
教材p449中 swap.c中的bufp1 是全局符号
加载器
将可执行文件的内容映射到存储器,并运行这个程序
反汇编.text节中的二进制指令使用的工具是 objdump
抽象是CS中一个重要的概念,在处理器里,指令集结构
提供了对实际处理器的抽象。
并行的三个层次不包含进程级并发
vi, gcc, gdb,make的使用:
- vi:
在vi中,查看scanf和printf 的man pages(帮助文档)的命令分别是:K 3K
查看函数qsort的帮助文档的快捷键为(K)
G:光标移动到文件最后
nG:光标移动到第n行
$:移动到光标所在行行尾
n
x:删除所在字符
X:删除所在的前一个字符
yy:复制光标所在行
nyy:复制所在行开始下n行
p:粘贴
u:恢复
- gcc:
预处理:gcc -E hello.c -o hello.i
编译:gcc -S hello.i -o hello.s
汇编:gcc -c hello.s -o hello.o
链接:gcc hello.o -o hello
运行:./hello
gcc -f PIC xxx.c 中的PIC的意思是位置无关的代码 or Position-Independent Code
- gdb:
gcc -g test.c -o test
gdb test
查找xxx: help xxx
条件断点设置:b 行数或函数名 if 表达式
Step:单步恢复运行,进入函数调用
Next:单步恢复运行,不进入函数
p 表达式|变量 :查看运行时对应表达式或运行的值
set 变量 = 设定值:使变量按当前输入的值继续运行
- make:
格式:
目标文件:依赖文件
指令
例:
hello.o: hello.c hello.h
gcc -c hello.c -o hello.o
变量替换:
OBJS = kang.o
CC = gcc
david:$(OBJS)
$(CC) $(OBJS) -o david
第二章
-
位:孤立地讲,单个的位不是非常有用。然而,当把位组合在一起,再加上某种解释,即给不同的可能为模式赋予含义,我们就能够表示任何有限集合的元素。
C语言的一个指针的值,都是某个存储块的第一个字节的虚拟地址。 -
小端法:最低有效字节在最前面,“高对高,低对低”,是大多数intel兼容机,包括IBM和Sun的个人intel兼容处理器的计算机使用的规则。
gcc -m32可以在64位环境产生32位代码。 -
与或非均可用“与非”或者“或非”来表达,因此,只要一个与非门,就可以完成所有的逻辑运算。
-
对大多数C语言实现而言,处理同样字长的有符号数和无符号数之间相互转换的一般规则是:数值可能会改变,但是位模式不变。
-
当C语言执行一个运算,若一个运算数有符号而另一个运算数无符号,C语言会隐式地将有符号强转为无符号,并假设两者都非负,执行运算。
第三章
unix> gcc -01 -S code.c
获得C语言编译器产生的汇编代码,产生一个汇编文件code.s。
gcc -S xxx.c -o xxx.s
可以获得汇编代码。
unix> objdump -d code.o
将二进制格式的目标代码文件反汇编成汇编语言的形式。
汇编函数固有格式:
function:
push %ebp
mov %esp,%ebp
……
pop %ebp
ret
用od命令查看二进制文件:
od code.o | more
使用more或less结合管道查看
od code.o > code.txt
使用输出重定向查看
从i386开始,x86体系结构扩展到了32位,增加了平坦
寻址模式
对于机器级编程来说,两种重要的抽象是ISA,虚拟地址
Linux汇编中,形成空调用栈帧的语句是push %ebp movl %esp %ebp
Linux汇编中,函数有返回值存在%eax
寄存器中。
IA32指令中,操作数的三种类型是立即数、寄存器、存储器
第四章
根据教材设计的Y86指令集:
程序员的可见状态包括PC
状态码INS表示遇到非法指令
创建Y86代码唯一的工具是汇编器 or YAS
实现一个数字系统需要三组成部分组合逻辑、存储器元素、时钟信号
HCL代Hardware Control Language, 硬件控制语言
xor的HCL表达式是(bool xor = (!a &&b) ||(a && !b))
Y86中,指令执行分为六个阶段取指、译码、执行、访存、写回、更新PC
第六章
SRAM比DRAM快。
根据携带信号不同,总线可分为数据总线、地址总线、控制总线
三种
对磁盘扇区的访问时间包括三个部分寻道时间、旋转时间、传送时间
逻辑磁盘块的逻辑块号可以翻译成一个盘面、磁道、扇区
三元组
CPU使用存储器映射I/O
技术向I/O设备发出命令
存储层次结构的中心思想是上层作为下层的缓存
缓存不命时,决定哪个块是牺牲块由替换策略
来控制
空缓存的不命中叫强制性不命中或冷不命中
容量不命中的原因是缓存太小
高速缓存结构可以用元组(S,E,B,m)
来描述
正则表达式
作用
:
验证字符串是否符合指定特征
查找和提取字符串
替换文本
表达式 描述
\d 0-9
\w 任一字母、数字或下划线
\s 任一空白字符
. 除“\n”外任意字符
- 转义字符:“\”+”本身”
[bcd][bcd]可以写作[bcd]{2}
{n} 重复n次
{m,n} 至少m次,至多n次
{m,} 至少m次
? 0或1次
-
至少1次
* 不出现或出现任意次
贪婪模式:
在匹配“dxxfxxd”:
(d)(\w+)
:其中“\w+”将匹配“d”之后所有字符
(d)(\w+)(d)
:其中“\w+”将匹配两个d之间所有字符
自己的收获:
通过这半个学期的学习,我最主要的收获是开始接触和初步能够使用linux操作系统进行一些学习和工作了,学习这一全新OS能够对我们未来的学习带来很多帮助。并且,在Linux下的vi,gcc,gdb,make这些工具也能为我将来在linux下进行C语言程序的开发调试及操作带来便利。
另外,后面几章关于操作系统底层的内容也以一个更深入的角度讲解了许多基础知识,这会给我的操作系统课程学习带来很多帮助
自己的不足:
我感觉我在家庭作业的选择上还不够主动,往往一看到题目可能比较困难,加上一看手头不少事情,又怕做不出会扣分,就不想选择了。今后会更加主动地提高效率,多完成一些挑战。
课程建议和意见:
感觉老师在检查家庭作业的方式可以有一些调整。因为我们往往不知道当我们选了一道题,是不是有别人已经在老师那里检查了,可能会导致我们独立准备的题报检时间稍微晚了一点,于是就白准备一场了。而且,好像老师检查题目的时序与我们课代表这里的时序有时候会发生错位。不知道有没有比较好的共享信息的方法。
参考资料:
- 《深入理解计算机系统》(第二版)
- 每周检测解析http://group.cnblogs.com/topic/73060.html
- 《hqyj.嵌入式Linux应用程序开发标准教程》