1.经常使用来搜索,结合管道使用。例句以下:html
man -k k1 | grep k2 | grep 2 搜索同时含有k1和k2,且属于系统调用。linux
2.man 3 printf 即查找c语言中printf的用法。正则表达式
这条语句能够用来查找关键字,全文搜索,而且能够直接查找文件内的内容。其中:编程
n:为显示行号vim
r:为递归查找windows
例如,若是想查找某个宏,咱们已知宏保存在include文件夹中,因此可使用下列语句:缓存
grep -nr XXX /usr/include(XXX为所要找的宏)bash
提供显示Linux命令使用案例网络
cheat ls编辑器
vim是一种很是好用的编辑器,总共有六种基本模式,最经常使用的是普通模式、插入模式和命令行模式。须要熟悉这三种模式之间的切换方式:
·普通→插入: i 或 a
·插入→普通: Esc 或 Ctrl + [
·普通→命令行: :
·命令行→普通:Esc 或 Ctrl + [
·经常使用的进入、保存和退出指令:
·进入:vim 文件名
·保存:命令行模式 :w
·退出:命令行模式 :q
·经常使用动做:
删除:dd删除整行
复制:yy复制整行
粘贴:p
经常使用选项
-c 只编译不连接,生成目标文件.o
-S 只编译不汇编,生成汇编代码
-E 只进行预编译,不作其余处理
-g 在可执行程序中包含标准调试信息
-o file 将file文件指定为输出文件
-v 打印出编译器内部编译各过程的命令行信息和编译器的版本
-I dir 在头文件的搜索路径列表中添加dir目录
编译过程
·预处理: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** 建立可执行目标文件
-o后面是接的你给生成的文件指定的名字,若是不指定,则默认为a.out
在命令行上运行这个可执行目标文件须要输入它的名字:
./a.out 其中./表明当前目录。
【注意:使用GCC编译时要加“-g”参数,而后才可以用gdb调试】
GDB最基本的命令有:
·gdb programm(启动GDB)
·l 查看所载入的文件b 设断点
·info b 查看断点状况
·run 开始运行程序
·bt 打印函数调用堆栈p 查看变量值
·c 从当前断点继续运行到下一个断点
·n 单步运行(不进入)
·s 单步运行(进入)
·quit 退出GDB
四种断点:
1.行断点
b [行数或函数名] <条件表达式>2.函数断点
b [函数名] <条件表达式>3.条件断点
b [行数或函数名] <if表达式>4.临时断点
tbreak [行数或函数名] <条件表达式>
Makefile的通常写法:
一个Makefile文件主要含有一系列的规则,每条规则包含如下内容:
·须要由make工具建立的目标体,一般是可执行文件和目标文件,也能够是要执行的动做,如‘clean’;
·要建立的目标体所依赖的文件,一般是编译目标文件所须要的其余文件。
·建立每一个目标体时须要运行的命令,这一行必须以制表符TAB开头
格式为:
test(目标文件): prog.o code.o(依赖文件列表)tab(至少一个tab的位置) gcc prog.o code.o -o test(命令)
.......
即:
target: dependency_files
command
定义变量的两种方式:
(1)递归展开方式 VAR=var
(2)简单方式 VAR:=var
使用变量的格式为: $(VAR)
做用:
·验证是否匹配查找替换\
·特殊符号,表示后面的字符自己[ ]
·匹配其中任意字符,但每次匹配只匹配一个[^ ]
·匹配除其中的任意字符,每次匹配只匹配一个
规则:
·{n} 次数修饰,重复n次,具体以下:
·?= {0,1}
·+= {1, } *= {0, }
·{m,n}:至少为m,至多为n
从字符串开始的地方匹配$
从字符串结束的地方匹配|
能够匹配左或者右
1.次数修饰中,能够表示当作总体。
2.结果中,能够表示单独表示。
静态库:.a(linux)、.lib(windows)
动态库:.so(linux)、.dll(windows)
建立该库:
gcc -c addvec.c multvec.c
ar rcs libvector.a addvec.o multvec.o
涉及到的参数所作动做:
gcc -c只编译,不链接成为可执行文件。 即:把.c文件编译成.o文件
ar -r:在库中插入模块(替换)
-c:建立一个库
-s:写入一个目录文件索引到库中。 即:把两个.o文件归档成静态库存档文件.a而且写入目录文件索引到库中
建立它的可执行文件
gcc -02 -c main2.c
gcc -static -o p2 main2.o ./libvector.a
相关参数含义:
gcc -02 和-0都是代码优化指令,能够减小编译时间
-c 只编译,不链接成为可执行文件
-static 告诉编译器驱动程序,连接器应该构建一个彻底连接的可执行目标文件
-o 命名生成文件
构造建立共享库:
gcc -shared -fPIC -o libvector.so addvec.c multvec.c
参数解析:
-fPIC 指示编译器生成与位置无关的代码
-shared 指示连接器建立一个共享的目标文件
-o 命名生成文件
把.c文件编译成为.o文件,放入新建的共享库中,而且命名。
连接程序:
gcc -o p2 main2.c ./libvector.so
建立一个可执行目标文件p2,在运行时能够和动态库libverctor.so连接。
位+上下文
编译系统
预处理器、编译器、汇编器、连接器
核心思想:缓存
操做系统核心抽象:文件、虚存、进程、虚拟机
进制转换:拿二进制做中间量
网络编程基础:字节顺序
大端法:高对低,低对高
小端法:高对高,低对低
运算:
逻辑运算:结果0或1(若是对第一个参数求值就能肯定表达式的结果,那么就不会对第二个参数求值)
位运算:结果位向量
·有无符号计算、截断、扩展都要结合具体的练习来体会公式的使用。
·掩码:对特定位能够置一,能够清零
IEEE浮点标准:
V=(-1)^s X 2^E X M 来表示一个数
符号:s决定这个数是正仍是负。
阶码:E对浮点数加权,权重是2的E次幂。
尾数:M是一个二进制小数,范围为1~2-ε或者0~1-ε。
舍入:
向偶舍入:将数字向上或向下舍入,结果的最低有效数字为偶数。
能用于二进制小数。(默认)
向零舍入:把整数向下舍入,负数向上舍入。
向下舍入:正数和负数都向下舍入。
向上舍入:正数和负数都向上舍入。
通用形式:
do body-statement while(test-expr);
循环体body-statement至少执行一次。
能够翻译成:
loop: body-statement t = test-expr; if(t) goto loop;
即先执行循环体语句,再执行判断。
通用形式:
while (test-expr) body-statement
GCC的方法是,使用条件分支,表示省略循环体的第一次执行:
if(!test-expr) goto done; do body-statement while(test-expr); done:
接下来:
t = test-expr; if(!t) goto done: loop: body-statement t = test-expr; if(t) goto loop; done:
归根究底,仍是要把循环改为do-while的样子,而后用goto翻译。
for循环能够轻易的改为while循环,因此再依照上面的方法改为do-while再翻译便可。
程序寄存器组是惟一能被全部过程共享的资源。
这个惯例是为了防止一个过程P调用另外一个过程Q时寄存器中的值被覆盖。惯例以下:
%eax,%edx,%ecx 调用者保存寄存器(Q可覆盖,P的数据不会被破坏)
%ebx,%esi,%edi 被调用者保存寄存器(Q在覆盖这些值前必须压入栈并在返回前回复他们)
%ebp,%esp 惯例保持%eax用来保存返回值
栈帧结构
·栈帧——为每个过程分配的内存空间,它包含两个特殊的参数,栈指针和帧指针。
·栈是向低地址增加的。
·帧指针:%ebp,指向栈底。
·栈指针:%esp,指向栈顶,栈指针能够移动,来分配或释放空间。
·%esp减少——分配空间
·%esp增大——释放空间
Y86指令集体系结构
halt指令、非法指令、访问非法地址
HCL硬件控制语言
组合逻辑、存储器元素、时针信号
表达式:
AND:&&OR:||NOT:!
Y86的顺序实现
取指、译码、执行、访存、写回、更新PC
随机访问存储器RAM
分类:SRAM和DRAM
特色:掉电失忆
SRAM比较DRAM
SRAM:供电不变,不刷新,抗干扰,存取快,贵
只读存储器ROM
分类:根据能被从新编写次数和对其编程所用机制分
PROM:编程一次EPROM:能被擦除和重编1000次EEPROM:基于EPROM,达10^5次flash:一类非易失性存储器
特色:非易失性
磁盘
·磁盘的容量 = 每扇区大小每磁道扇区数磁道数 2 盘片数量
· 访问时间
T(max rotation)=1/RPM * 60secs/1min ——最大旋转延迟时间
T(avg rotation)=1/2 * T(max rotation) ——平均延迟时间
T(avg transfer)=1/RPM * 1/(平均扇区数/磁道) * 60secs/1min ——平均传送时间
T(access)=T(avg seek)+T(avg rotation)+T(avg transfer) ——整个估计的访问时间
·总结:访问一个磁盘扇区中512字节主要花在寻道时间和旋转延迟
总线
存储总线
·并行传递方式。
·指令和数据向CPU传递时的通道。
分三组:
·数据总线(用于传递数据)。
·地址总线(用于传递主存储器的地址)。
·控制总线(用于各类内部控制指令的传递)。
·系统总线
传送的信息包括数据信息、地址信息、控制信息。
数据总线(用于传送数据信息)。
地址总线(用来传送地址的地址总线的位数决定了CPU可直接寻址的内存空间大小)。
控制总线(用来传送控制信号和时序信号)。
I/O总线:指缆线和链接器系统,用来传输I/O路径技术指定的数据和控制信号。
参考资料:
1.教材《深刻理解计算机系统》
2.博客每周测试解析
3.小组同窗提问与老师的解析
4.20135202闫佳歆http://www.cnblogs.com/20135202yjx/p/4926597.html循环部分
总结
两个月以来的学习,让我天天都感到很充实,看着厚厚的教材勾勾画画的“摧残”了一半多,心里仍是挺有成就感的,虽然第一遍看都不怎么看得懂有点打击信心,可是经过题目,经过老师讲解,经过抱着书蹿来蹿去的问学霸,虽然不是很扎实,但仍是收获了不少东西。我很喜欢论坛小组答疑交流这个环节,看看你们提出的问题,给个人学习提供了不小的指导和帮助,也同时解决了一些我也存在的问题,而且节省了我去问老师问同窗的时间。
因为没学过汇编,对于汇编语言那一块内容实在让我很头疼,而后只能花费大量的时间去学习查阅资料,可是对于代码也仅仅是作到了大体知道是个什么意思还达不到理解透彻。有些题目就算对着答案也仍是看得似懂非懂,路漫漫其修远兮,在以后的学习我会尽我所能将这本书啃透。