期中学习总结
期中学习总结
一、 常用Linux命令
1.man-k:
man是manul的缩写,我们可以通过man man来查看man的帮助
用于搜索,格式如下:
man -k k1 | grep k2 | grep 2
2.cheat:
作弊命令,简单备忘单 它提供显示Linux命令使用案例,包括该命令所有的选项和简短但尚可理解的功能。
方便用于搜索你需要的内容,格式如下:
cheat ls
3.grep:
在文本中或 stdin 中查找匹配字符串,格式如下:
grep [命令选项]... 用于匹配的表达式 [文件]...
二、 vi,gcc,gdb,make的使用
1.vim:
三种模式
● 普通模式
● 插入模式
● 命令行模式
基本的vim操作:
普通→插入: i 或 a
插入→普通: Esc 或 Ctrl + [
普通→命令行: :
命令行→普通:Esc 或 Ctrl + [
常用的进入、保存和退出指令:
进入:vim 文件名
保存:命令行模式 :w
退出:命令行模式 :q
常用动作:
删除:dd删除整行
复制:yy复制整行
粘贴:p
2.gcc:
常用选项
-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** 创建可执行目标文件
3.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 [行数或函数名] <条件表达式>
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浮点表示
第三章 程序的机器级表示
1.操作数的三种类型
- 立即数
- 寄存器
- 存储器
2.寻址方式:
1.立即数寻址方式
2.寄存器寻址方式
3.存储器寻址方式
- 直接寻址方式
- 寄存器间接寻址方式
- 寄存器相对寻址方式
- 基址变址寻址方式
- 相对基址变址寻址方式
4.mov类指令:将源操作数的值复制到目的操作数中。源操作数指定的值是一个立即数,存储在寄存器中或存储器中。目的操作数制指定一个位置,要么是一个寄存器,要么是一个存储器。
- movb 传送字节
- movw 传送字
- movl 传送双字
- movs 符号位扩展
- movz 零扩展
push:把数据压入栈中
pop:删除数据
- 后进先出
- 栈指针指向栈顶元素
- 栈朝低地址方向增长
5.栈帧:
为单个过程分配的那部分栈称为栈帧。
最顶端的栈帧以两个指针界定:
-
寄存器%ebp-帧指针
-
寄存器%esp-栈指针
1.call
CALL指令的效果是将返回地址入栈,并跳转到被调用过程的起始处。
返回地址是还在程序中紧跟在call后面的那条指令的地址。
2.ret
ret指从栈中弹出地址,并跳转到这个位置。
3.leave
这个指令使栈做好返回的准备
第四章 处理器体系结构
-
程序员可见的状态
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。磁盘中有一个小的硬件/固件设备,成为磁盘控制器。可将一个逻辑块号翻译成一个(盘面、磁道、扇区)三元组。
- 直接存储器访问——设备自己执行读或写总线事务,不需要CPU的干涉。这种数据传送成为DMA传送
- 局部性原理:一种倾向性,倾向于引用邻近于其他最近引用过的数据项的数据项,或者最近引用过的数据项本身。
- 局部性有两种不同的形式:时间局部性和空间局部性。
- 存储器层次结构的中心思想:对于每个K,位于k层的更快更小的存储设备作为位于k+1层的更慢更大的存储设备的缓存。即每层存储设备都是下一层的“缓存”。
- 高速缓存结构可以用元组(S,E,B,m)来描述。高速缓存的大小(容量)C指的是所有块大小的和。标记位和有效位不包括在内。因此C=SEB。
- 高速缓存确定一个请求是否命中,然后抽取出被请求字的过程分为三步:(1)组选择;(2)行匹配;(3)字抽取。
四、收获
到现在已经进行了近半学期的学习,我一开始觉得学习压力大,作业量多难以完成,经过半学期的慢慢调整,现在已经逐渐的适应了这种学习节奏。现在看来,还是自己以前太懒散,学习动力不足,看着厚厚的一本书就觉得头疼。但现在一点一点的学习书本知识后发现,其实书是可以变薄的。只要慢慢研读,就会发现老师的课堂测试其实来自书本上的一些重要的小细节。看着自己从不适应到自如的这个过程其实是非常开心的,从一开始对linux的不了解到现在算是对它有了基本的认识。在学习过程中发现只要愿意主动去学习,学习其实并没有自己所想的那么痛苦。
五、自己的不足
自己在学习中的不足就是不会反复学习,之前学习的东西特别容易遗忘,常常学过考过就扔到了脑后。比如学习这门课的时候需要结合上学期学过的汇编知识,我因为对知识的遗忘导致我学习起来没有那么流畅,常常学习的同时去查阅相关资料,这样直接导致了我的学习速度直线下降。
原文:http://www.cnblogs.com/disturbia/p/4927651.html