man是manul的缩写,我们可以通过man man来查看man的帮助
用于搜索,格式如下:
man -k k1 | grep k2 | grep 2
作弊命令,简单备忘单 它提供显示Linux命令使用案例,包括该命令所有的选项和简短但尚可理解的功能。
方便用于搜索你需要的内容,格式如下:
cheat ls
在文本中或 stdin 中查找匹配字符串,格式如下:
grep [命令选项]... 用于匹配的表达式 [文件]...
三种模式
● 普通模式
● 插入模式
● 命令行模式
基本的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** 创建可执行目标文件
gdb programm(启动GDB)
l 查看所载入的文件
b 设断点
info b 查看断点情况
run 开始运行程序
bt 打印函数调用堆栈
p 查看变量值
c 从当前断点继续运行到下一个断点
n 单步运行(不进入)
s 单步运行(进入)
quit 退出GDB
四种断点:
1.行断点
b [行数或函数名] <条件表达式>
2.函数断点
b [函数名] <条件表达式>
3.条件断点
b [行数或函数名] <if表达式>
4.临时断点
tbreak [行数或函数名] <条件表达式>
4.make实现自动化编译
Makefile的一般写法:
一个Makefile文件主要含有一系列的规则,每条规则包含以下内容:
• 需要由make工具创建的目标体,通常是可执行文件和目标文件,也可以是要执行的动作,如‘clean’;
• 要创建的目标体所依赖的文件,通常是编译目标文件所需要的其他文件。
• 创建每个目标体时需要运行的命令,这一行必须以制表符TAB开头
格式:
test(目标文件): prog.o code.o(依赖文件列表) tab(至少一个tab的位置) gcc prog.o code.o -o test(命令)
即: target: dependency_files command
1.信息,就是位加上下文。
2.系统的硬件组成
总线——贯穿整个系统的一组电子管道,它携带信息字节并负责在各个部件间传递。通常总线被设计成传送定长的字节块,也就是字(word)。各个系统中字长不尽相同。
I/O设备
I/O设备是系统与外界的联系通道。
控制器是I/O设备本身中或是系统的主印刷电路板(主板)上的芯片组,而适配器则是一块插在主板插槽上的卡。
主存——临时存储设备,在处理器执行程序时,用来存放程序和程序处理的数据。物理上来说,主存是由一组DRAM芯片组成的;逻辑上来说,存储器由一个线性的字节数据组成,每个字节都有自己惟一的地址(数组索引),这些地址以0开始的。一般来说,组成程序的每条机器指令都由不定量的字节构成。
处理器——CPU,是解释(或执行)存储在主存中指令的引擎。处理器的核心是一个被称为程序计数器(PC)的字长大小的存储设备(或寄存器)。在任何一个时间点上,PC都指向主存中的某条机器语言指令。
1.三种最重要的数字表示法
无符号:基于传统的二进制表示法,大于等于0
补码:有符号整数
浮点数:实数的科学计数法的以二进制为基数的版本
2.IEEE浮点表示
为单个过程分配的那部分栈称为栈帧。
CALL指令的效果是将返回地址入栈,并跳转到被调用过程的起始处。
返回地址是还在程序中紧跟在call后面的那条指令的地址。
ret指从栈中弹出地址,并跳转到这个位置。
这个指令使栈做好返回的准备
程序员可见的状态
Y86处理器有八个寄存器:%eax、%edx、%ecx、%ebx、%esi、%edi、%esp和%ebp。每个程序存储器存储一个字。
Y86指令集
逻辑设计和硬件控制语言HCL
1)逻辑门——逻辑门只对单个位的数进行操作。
2)组合电路和HCLB布尔表达式
组合电路——将很多逻辑门组合成一个网,构建计算块。
两个限制: a.两个或多个逻辑门的输出不能连接在一起,否则它们可能会使线上的信号矛盾,可能会导致一个不合法的电压或电路故障;b.这个网必须是无环的。回路会导致网络计算的函数有歧义。
通常,处理一条指令包括很多操作。
1)取指(fetch):取指阶段从存储器读入指令,地址为程序计数器PC的值。从指令中抽取出指令指示符字节的两个四位部分,称为icode(指令代码)和ifun(指令功能)。
2)解码(decode):解码阶段从寄存器文件读入最多两个操作数,得到值valA or/and valB。
3)执行(execute):在执行阶段,算术/逻辑单元(ALU)要么执行指令指明的操作(根据ifun的值),计算存储器引用的有效地址,要么增加或减少栈指针。
4)访存(memory):访存阶段可以将数据写入存储器,或者从存储器读出数据。读出的值为valM。
5)写回(write back):写回阶段最多可以写两个结果到寄存器文件。
6)更新PC(PC update,程序计数器):将PC设置成下一条指令的地址。
[ 指令执行过程,从PC中取出指令,然后沿着上述的几个步骤操作,周而复始的进行循环。]
SEQ硬件结构、SEQ的时序
SEQ的实现包括组合逻辑和两种存储器设备:时钟寄存器(程序计数器和条件码寄存器)和随机访问寄存器(寄存器文件、指令存储器和数据存储器)。
随机访问存储器(RAM,Random-access memory)分为两类-静态和动态。
静态RAM(SRAM)比动态RAM(DRAM)更快,但也贵很多。SRAM用来作为高速缓存存储器,即可以在CPU芯片上,也可以不在CPU芯片上。DRAM用来作为主存以及图形系统的帧缓冲区。
1)静态RAM
SRAM将每个位存储在一个双稳态(bistable)存储器单元(cell)中。每个单元是用一个六晶体管电路来实现的。这个电路的一个属性是:它可以无限制地保持在两个不同的电压配置(configuration)或状态(state)之一。其他任何状态都是不稳定的。
由于SRAM的双稳态特性,只要有电,它就会永远地保持它的值,即使有干扰,如电子噪音,当干扰消除,电路也能恢复到稳定值。
2)动态RAM
DRAM将每个位存储为对电容的充电。电容约为30×10-15F。
磁盘构造(磁盘是由盘片构成的。表面覆盖着磁性记录材料。)
磁盘结构:盘片、磁道、扇区、间隙、柱面;磁盘驱动器
内存可以看成字节数组、磁盘可以看成块数组)。现代磁盘构造一个B个扇区大小的逻辑块的序列,编号0—B-1。磁盘中有一个小的硬件/固件设备,成为磁盘控制器。可将一个逻辑块号翻译成一个(盘面、磁道、扇区)三元组。
到现在已经进行了近半学期的学习,我一开始觉得学习压力大,作业量多难以完成,经过半学期的慢慢调整,现在已经逐渐的适应了这种学习节奏。现在看来,还是自己以前太懒散,学习动力不足,看着厚厚的一本书就觉得头疼。但现在一点一点的学习书本知识后发现,其实书是可以变薄的。只要慢慢研读,就会发现老师的课堂测试其实来自书本上的一些重要的小细节。看着自己从不适应到自如的这个过程其实是非常开心的,从一开始对linux的不了解到现在算是对它有了基本的认识。在学习过程中发现只要愿意主动去学习,学习其实并没有自己所想的那么痛苦。
自己在学习中的不足就是不会反复学习,之前学习的东西特别容易遗忘,常常学过考过就扔到了脑后。比如学习这门课的时候需要结合上学期学过的汇编知识,我因为对知识的遗忘导致我学习起来没有那么流畅,常常学习的同时去查阅相关资料,这样直接导致了我的学习速度直线下降。
原文:http://www.cnblogs.com/disturbia/p/4927651.html