天天看点

期中总结

期中总结

各章基本命令

1 Linux Bash中,Ctrl+a快捷键的作用是(将光标移至输入行头,相当于Home键)。

2 在 Linux 里面可以使用使用(groups)命令知道自己属于哪些用户组。

3 在 Linux 里面可以使用使用(chmod)命令修改文件的权限。

4 强制删除test文件的命令是(rm -f test )。

5 cat -n 和 nl 命令功能等价。

6 Linux Bash中,ls . | sort 命令的功能是: 显示当前目录内容并排序

7 Linux Bash中,使用grep查找当前目录下*.c中main函数在那个文件中的命令是:grep main *.c (涉及正则表达式)

8 Linux Bash中,tee命令可以同时重定向到多个文件。

9 man -k:相应格式:man -k xx|grep xx常用搜索工具

(1) 常用关键数字尾缀 3 表示C语言函数,例:man sort 3

(2)数据结构中有线性查找算法,C标准库中没有这个功能的函数,但Linux中有,这个函数是(lfind或lsearch)

(3)Linux中显示文件(file )属性(status)的命令是( stat )

10 cheat:作弊工具,方便功能查看 cheat xx

(1)To list the content of /path/to/foo.tgz archive using tar ( tar -jtvf /path/to/foo.tgz )

(2)使用du命令对当前目录下的目录或文件按大小排序 的命令是( du -sk *| sort -rn )

11 objdump -d xx,例如:对目标代码code.o进行反汇编的命令是(objdump -d code.o)

工具基础:

vim:

1 在vi中,查看scanf和printf man pages(帮助文档)的命令分别是:K 3K

2 编译和运行以上代码的命令gcc *.c -o main ;./main

操作格式:(1)vim xxx  (2):wq 保存,退出   (3)dd 2d 3d 删除    (4)p 复制  ,y粘贴  v可以编辑视图

GCC:编译工具

基本参数:

-c 只编译不链接,生成目标文件.o

-S 只编译不汇编,生成汇编代码

-E 只进行预编译,不做其他处理

-g 在可执行程序中包含标准调试信息

-o file 将file文件指定为输出文件

格式:gcc -x xxx

GDB:gcc -g 编译成GDB可调用文件

1 使用GDB调试以上代码:编译代码的命令是?main.c中如何给main函数设置断点?如何在第六行设置断点?

gcc -g *.c -o main 

b main 

b 6

2 基本操作:

info b 查看断点情况

run 开始运行程序

bt 打印函数调用堆栈

p 查看变量值

c 从当前断点继续运行到下一个断点

n 单步运行(不进入)

s 单步运行(进入)

quit 退出GDB

静态/动态库以及make makefile:

1  除了main.c外,其他4个模块(add.c sub.c mul.c div.c)的源代码不想给别人,如何制作一个mymath.a静态库?main.c如何使用mymath.a?

gcc -c add.c sub.c mul.c div.c

ar rcvs libmymath.a add.o sub.o mul.o div.o

gcc main.c -o main -L. -lmymath (or gcc main.c ./libmymath.a -o main)

2 除了main.c外,其他4个模块(add.c sub.c mul.c div.c)的源代码不想给别人,如何制作一个mymath.so共享库?main.c如何使用mymath.so?

gcc -fPIC -c add.c sub.c mul.c div.c

gcc -shared -o libmymath.so add.o sub.o mul.o div.o

gcc -o main main.c -L. -lmymath

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

3 编译上面代码的makefile,编译出来的目标文件为testmymath(GCC前加tab)

testmymath: main.o add.o sub.o mul.o div.o 

gcc main.o add.o sub.o mul.o div.o -o testmymath

main.o: main.c head.h

gcc -c main.c

add.o: add.c head.h

gcc -c add.c

sub.o: sub.c head.h

gcc -c sub.c

mul.o: mul.c head.h

gcc -c mul.c

div.o: div.c head.h

gcc -c div.c

各章基本概念及思想

信息:计算机系统中的所有信息都是位串表示的,所谓(信息)就是位+上下文

存储器层次结构:主要思想是上层存储器作为下层存储器的(高速缓存)

四个抽象:操作系统中最基本的四个抽象是(虚拟机、进程、虚拟存储器、文件)

链接器:链接器的两个主要任务是(符号解析和重定位)

平坦寻址:从i386开始,x86体系结构扩展到了32位,增加了(平坦)寻址模式

2个抽象:对于机器级编程来说,两种重要的抽象是(ISA,虚拟地址)

程序值:汇编代码不会记录程序值的类型 

条件表达式:C语言中的条件表达式在汇编中是结合(有条件跳转和无条件跳转)实现的

循环结构:C语言中的循环结构可以用(条件测试和跳转组合起来)实现

栈用来(ABCD) A 传递参数 B 存储返回信息 C保存寄存器 D本地存储

空栈:Linux汇编中,形成空调用栈帧的语句是(push %ebp movl %esp %ebp) 

PC:Y86中,程序员的可见状态包括PC

数字系统三组成:实现一个数字系统需要三组成部分(组合逻辑、存储器元素、时钟信号)

时钟寄存器:Y86中,使用时钟寄存器保存程序计数器PC、条件代码CC和(程序状态Stat) 

指令六阶段:Y86中,指令执行分为六个阶段(取指、译码、执行、访存、写回、更新PC) 

总线:根据携带信号不同,总线可分为(数据总线、地址总线、控制总线)三种

局部性有两种形式(时间局部性、空间局部性)

存储层次结构的中心思想是(上层作为下层的缓存)

缓存不命中决定哪个块是牺牲块由(替换策略)来控制

空缓存的不命中叫(强制性不命中或冷不命中)

容量不命中的原因是(缓存太小)

存储器山:山脊代表时间局部性

贯穿内容:

正则表达式:

基本符号表示:

1 \ 特殊符号,表示后面的字符本身

2 [ ] 匹配其中任意字符,但每次匹配只匹配一个

3 [^ ] 匹配除其中的任意字符,每次匹配只匹配一个

4 {n} 次数修饰,重复n次,(?为0或者1次,+为1到无穷,*为0到无穷)

5 ^ 从字符串开始的地方匹配

6 $ 从字符串结束的地方匹配

7 | 可以匹配左或者右

常用消除汇编“.”语句:g/\.\d

C语言基础:

头文件#include<>为加载提供可执行文件

详见百度及搜狗,知乎(以下仅供参考)

http://wenku.baidu.com/view/eafa5a5f312b3169a451a429.html

http://wenwen.sogou.com/z/q138846880.htm

main()为运行提供通用入口

linux操作系统:

详见参考:

如果使用GUI,Linux和Windows没有什么区别。Linux学习应用的一个特点是通过命令行进行使用。

登录Linux后,我们就可以在#或$符后面去输入命令,有的时候命令后面还会跟着

选项

(options)或

参数

(arguments)。即Linux中命令格式为:

command [options] [arguments] //中括号代表是可选的,即有些命令不需要选项也不需要参数
           

选项

是调整命令执行行为的开关,

选项

不同决定了命令的显示结果不同。

参数

是指命令的作用对象。

如ls命令,

ls

ls .

显示是当前目录的内容,这里“.”就是参数,表示当前目录,是缺省的可以省略。我们可以用

ls -a .

显示当前目录中的所有内容,包括隐藏文件和目录。其中“-a” 就是选项,改变了显示的内容

1. 课程资料:https://www.shiyanlou.com/courses/413   

2. Linux 基础入门:https://www.shiyanlou.com/courses/1

收获:

      半个学期的收获不小就各章而言:第一章初步的带领我们走进另一种操作系统LINUX的世界,一些常用的基本命令不仅方便了操作还极大地提高了学习的热情。第二章主要就是数据存储与变换了,所谓计算机,无非二进制之间的有效排列与规则制定,数据自然而然成为计算机运行的纽带。第三章主要是汇编,进一步了解更基础的机器代码的同时让我感受到语言的转换需要的不仅仅是一个大脑,其次就是堆栈的概念,作为一种数据结构,可以说人类发掘计算机的可利用空间的思维实在大的可怕。第四章主要的是对第三章的进一步补充,Y86等更进一步接近计算机语言,为实现进一步深入了解计算机系统奠定基础。第六章为存储结构就自其硬件备受瞩目高速发展史来看,存储结构的改进以及相应材料设备等的更替把计算机运算水平推向一个又一个高峰,局部性的属性要求我们,走的是遵循计算机存储规则的道路,虽然不利于我们理解,却可以为计算机带来更好更快的运算效率。总的来说,这本书从程序员的视角详细阐述计算机系统的本质概念,并展示这些概念如何实实在在地影响应用程序的正确性、性能和实用性,本书的最大优点是为程序员描述计算机系统的实现细节,帮助其在大脑中构造一个层次型的计算机系统,从最底层的数据在内存中的表示到存储结构的构成。 

不足:

     由于刚开学以来各种事情久没处理显得比较生疏耽误了学习的时间,造成学习质量下降,前面的第一章的内容没有很好的理解以及实际的操作,一些零散的内容没有了解到,为后面的学习带来了一定的困难,但在随后的学习中,意识到前面留下的毛病有点碍事,索性将前面的知识果断复习了一下,效果还是比较理想的。可问题还是会有的,就比如第四章的后半部分虽然没有要求,但要细致了解计算机系统还是必不可少的,第六章的存储结构后面涉及的存储器山以及几个偏僻的不命中类型就没有做到深入的理解,只是片面知道而已,在日后因做详细了解防止后续学习中产生不必要的麻烦。