Linux第七次实验笔记
期中总结
习题总结与分析
填空:Linux Bash中,Ctrl+a快捷键的作用是(将光标移至输入行头,相当于Home键)。
- [ctrl]+u 从游标处向前删除指令串
- [ctrl]+k 从游标处向后删除指令串
- [ctrl]+a 将光标移至输入行头,相当于Home键
- [ctrl]+e 将光标移至输入行尾,相当于End键
判断:Linux Bash中, man printf和man 1 printf 功能等价。 √
man的用法如下:
man [-adfhktwW] [section] [-M path] [-P pager] [-S list] [-m system] [-p string] name ...
section为可选参数,分别为1~8:
- 可执行程序或shell命令
- 系统调用
- 库调用(库函数)
- 特殊文件(设备文件)
- 文件格式和习惯
- 游戏
- 文件系统标准描述、网络协议、ASCII和其他字符集
- 系统管理命令
当未对section做出指定时,会默认查找section=1中的指令。
填空:在 Linux 里面可以使用使用(groups)命令知道自己属于哪些用户组。
groups命令:显示用户所在组
groups命令在标准输入输出上输出指定用户所在组的组成员,每个用户属于/etc/passwd中指定的一个组和在/etc/group中指定的其他组
Usage: groups [OPTION]... [USERNAME]...
填空:在 Linux 里面可以使用使用(chmod)命令修改文件的权限。
- chmod [who] [+ | - | =] [mode] 文件名
- 具体用法见第一次实验报告文件权限部分。
填空:Linux中没有C盘,D盘,其文件系统的目录是由(FHS)标准规定好的。
- FHS(英文:Filesystem Hierarchy Standard 中文:文件系统层次结构标准),多数 Linux 版本采用这种文件组织形式。
判断:Linux Bash中,cd - 命令可以切换到'home'目录。 ×
进入你的“home”目录:
cd ~ 或者 cd /home/<你的用户名>
回到上一次所在目录:
cd -
进入上一级目录:
cd ..
回到根目录:
cd
填空:Linux Bash中,强制删除test文件的命令是(rm -f test )
强制删除文件:
rm -f 文件名
删除目录:
rm -r 目录名
判断:Linux Bash中,cat -n 和 nl 命令功能等价。√
- 两种命令均为在行号字段最左端显示
判断:Linux Bash中,source 和 . 命令功能等价。 √
填空:Linux Bash中,查找home目录中前天创建的文件的命令是(find ~ -ctime 2)。
- -mtime n: n 为数字,表示为在n天之前的”一天之内“修改过的文件
- -mtime +n: 列出在n天之前(不包含n天本身)被修改过的文件
- -mtime -n: 列出在n天之前(包含n天本身)被修改过的文件
- -atime 最后访问时间
- -ctime 创建时间
判断:Linux Bash中,使用tar命令把home目录打包成home.tar的命令是( tar -cf home.tar ~)
填空:Linux Bash中,zip命令使用(-e)参数可以创建加密压缩包。
判断:Linux Bash中,df和 du 命令功能等价。x
- df:命令查看磁盘的容量
- du:命令查看目录的容量
填空:Linux Bash中,ls . | sort 命令的功能是( 显示当前目录内容并排序)
- ls:列出当前目录的内容
- .:表示当前目录下
- sort:进行排序
填空:Linux Bash中,使用grep查找当前目录下*.c中main函数在那个文件中的命令是( grep main *.c )
grep 填空:查找宏 STDIN_FILENO 的值的命令是(grep -nr XXX /usr/include)
填空:Linux Bash中,使用wc统计hello.c共有几行代码的的命令是( wc -l hello.c)
行数
$ wc -l /etc/passwd
单词数
wc -w /etc/passwd
字节数
wc -c /etc/passwd字符数
wc -m /etc/passwd最长行字节数
wc -L /etc/passwd
判断:col 命令的-h参数可以将Tab换成对等数量的空格建。x
col -x:
将Tab转换为空格
col -h:
将空格转换为Tab(默认选项)
填空:Linux Bash中,把ls命令显示当前目录的结果存入ls.txt的命令输出重定向命令是(ls > ls.txt)
填空:Linux Bash中,(tee)命令可以同时重定向到多个文件
man -k 填空: 数据结构中有线性查找算法,C标准库中没有这个功能的函数,但Linux中有,这个函数是(lfind或lsearch)
- man -k line |grep search 即可找到
man -k 填空:Linux中显示文件(file )属性(status)的命令是( stat )
- man -k file |grep status 即可找到
cheat 填空:To list the content of /path/to/foo.tgz archive using tar ( tar -jtvf /path/to/foo.tgz )
- cheat tar即可寻找到答案
find 填空:查找当前目录下所有目录的find命令是(find . -type d)
CH01填空:计算机系统中的所有信息都是位串表示的,所谓(信息)就是位+上下文。
CH01填空:存储器层次结构的主要思想是上层存储器作为下层存储器的(高速缓存)。
CH01填空:操作系统中最基本的四个抽象是(虚拟机、进程、虚拟存储器、文件)。
CH07填空:链接器的两个主要任务是(符号解析和重定位)。
CH07 判断:C语言中,全局变量是强符号。(X)
- 对C++来说,编译器默认函数和初始化了的全局变量称为强符号,未初始化的全局变量为弱符号。
CH07 填空:(加载器)将可执行文件的内容映射到存储器,并运行这个程序。
CH07 选择:Linux中,反汇编.text节中的二进制指令使用的工具是objdump
在vi中,查看scanf和printf man pages(帮助文档)的命令分别是K 和 3K
gdb 判断: gdb中next和step都可以单步跟踪,根据自顶向下原则应该优先选用step. (X )
- 优先运行next,si为单步运行。
ch01 填空:抽象是CS中一个重要的概念,在出来器里,(指令集结构)提供了对实际处理器的抽象。
ch01 选择:并行的三个层次不包含(C)。A 线程级并发 B指令级并行 C进程级并发 D SIMD
- 并行地三个层次:
- 线程级并发
- 指令级并发
- SIMD
- 并行地三个层次:
ch07 填空:gcc -f PIC xxx.c 中的PIC的意思是(位置无关的代码 or Position-Independent Code)
ch07章中其余题目应注意与、或、非、补码、反码、移位等运算,详见第四周的报告
regex 判断: 正则表达式r.t可以匹配rt. (x)
- .匹配的除换行符( \n )以外任意一个字符,不包括空字符
regex 判断:正则r表达式zo*可以匹配z. (√)
- 表达式不出现或出现任意次
CH03 填空:从i386开始,x86体系结构扩展到了32位,增加了(平坦)寻址模式
CH03 填空:在64位机器上,要用gcc编译出32位机器码,需要使用(-m32) 选项
CH03 填空:对于机器级编程来说,两种重要的抽象是(ISA,虚拟地址)
CH03 填空:Linux中,对目标代码code.o进行反汇编的命令是(objdump -d code.o)
CH03 填空:IA32指令中,操作数的三种类型是(立即数、寄存器、存储器)
3.1 填空: 针对练习3.1中的图,操作数 8(%eax,%ecx,4)的值是(0x11)
- 8+(%eax)+4(%ecx)
CH03 判断: 把内存中地址为0x4050处的字复制到地址为0x405c处的指令是 movw ($0x4050) ,($0x405c) (x)
CH03 判断: %esp的值为0x10c, pushl %eax后,%esp的值为0x108. (√)
3.3 判断: movb $0xF, (%eax) 是正确汇编语句. (√)
3.5 填空: decode1函数的功能是( 数据交换 )
3.6 填空: 指令leal 3(%eax,%ecx,4), %edx 存储在%edx中的值为( 3+x+4y )
3.9 填空: arith函数的功能是( ~((x^y)>>3) -z )
3.14 判断: 汇编代码不会记录程序值的类型。(√)
CH03 填空:C语言中的条件表达式在汇编中是结合(有条件跳转和无条件跳转)实现的。
CH03 填空:C语言中的循环结构可以用(条件测试和跳转组合起来)实现。
CH03 选择:栈用来(ABCD) A 传递参数 B 存储返回信息 C保存寄存器 D本地存储。
CH03 填空:Linux汇编中,形成空调用栈帧的语句是(push %ebp movl %esp %ebp)
CH03 填空:Linux汇编中,函数有返回值存在( %eax )寄存器中。
CH04 判断:Y86中,程序员的可见状态包括PC。(√)
CH04 判断:Y86中,状态码INS表示遇到非法指令。(√)
CH04 填空:创建Y86代码唯一的工具是(汇编器 or YAS)
4.6 判断:Y86中,pushl压入栈的是减去4的%esp的值。(x)
- 根据题意应该是压入原始值
CH04 填空:实现一个数字系统需要三组成部分(组合逻辑、存储器元素、时钟信号)。
CH04 填空:HCL代表(Hardware Control Language, 硬件控制语言)
CH04 填空:Y86中,使用时钟寄存器保存程序计数器PC、条件代码CC和(程序状态Stat)
CH04 填空:Y86中,指令执行分为六个阶段(取指、译码、执行、访存、写回、更新PC)
CH04 填空:Y86中对于PC值p=100,指令包括一个寄存器指示符字节和,常数1,增加器产生值(106)
CH06 判断: SRAM比DRAM快。(√)
CH06 判断:EEPROM可以用紫外线进行擦除。(x)
- EPROM紫外线光照射过窗口即可被清楚为0.
- EEPROM电子可擦出ROM,直接在印刷电路卡上编程。
CH06 填空:根据携带信号不同,总线可分为(数据总线、地址总线、控制总线)三种。
6.2 填空:计算磁盘容量(327.68G):4个盘片,100000个柱面,每条磁道800个扇区,每个扇区512个字节。
- 51280041000002=327680000000字节
- 1G=10^9字节
CH06 填空:对磁盘扇区的访问时间包括三个部分(寻道时间、旋转时间、传送时间)。
6.3 填空:最大旋转时间是(4ms)。
- 求Tmax rotation
CH06 填空:逻辑磁盘块的逻辑块号可以翻译成一个(盘面、磁道、扇区)三元组。
CH06 填空:CPU使用(存储器映射I/O)技术向I/O设备发出命令。
CH06 填空:局部性有两种形式(时间局部性、空间局部性)。
CH06 判断:程序访问一个向量,步长越大空间局部性越好。(x)
- 具有步长为k的引用模式的程序,步长越小,空间局部性好。
CH06 判断:程序中的循环语句具有良好的时间局部性和空间局部性。(√)
- 在小结中给出
6.8 填空:只修改第八行,让程序具有良好的空间局部性。改为:( sum +=a[i][j][k] )
- 使最右边的索引变化最快。
CH06 填空:存储层次结构的中心思想是(上层作为下层的缓存)。
CH06 填空:缓存不命时,决定哪个块是牺牲块由(替换策略)来控制。
CH06 填空:空缓存的不命中叫(强制性不命中或冷不命中)
CH06 填空:容量不命中的原因是(缓存太小)
CH06 填空:高速缓存结构可以用元组(S,E,B,m)来描述。
6.10 填空:高速缓存容量为1024,高速缓存结构为(( 32 ),4,8,32)
- S = 2^s
- B = 2^b
- m = log2(M)
- t = m-(s+b)
- C=B×E×SS
6.11 填空:3/4的命中率的如何计算的((32-8)/32,或每4次有一次不命中)
CH06 判断:存储器山中山脊代表空间局部性。(x)
gcc的考察需要注意并熟练掌握
以练习题为例
编译和运行以上代码的命令(2分)
gcc *.c -o main
./main
使用GDB调试以上代码:编译代码的命令是?main.c中如何给main函数设置断点?如何在第六行设置断点?
gcc -g *.c -o main
b main
b 6
除了main.c外,其他4个模块(add.c sub.c mul.c div.c)的源代码不想给别人,如何制作一个mymath.a静态库?main.c如何使用mymath.a?(3分)
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)
除了main.c外,其他4个模块(add.c sub.c mul.c div.c)的源代码不想给别人,如何制作一个mymath.so共享库?main.c如何使用mymath.so?(4分)
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
写出编译上面代码的makefile,编译出来的目标文件为
testmymath, 只用显式规则就可以.(4分)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
gdb的补充内容
- 在编译程序前需要加上-g
- 利用disassemable可以查看该程序的汇编代码以及此时运行到哪个语句了
- 利用p指令查看元素值,若在寄存器中可以利用$来进行调用查看
- list可以查看程序的部分代码,便于利用b来设置断点。
不足之处以及改正方法
- 看书时对于一些定义与细节直接忽略过去,而并未在意。以致在考试过程中需要重新翻书查找。对于考试中涉及到的内容课后重新阅读与学习。
- 在学习过程中也发现理解书中的内容,其实有的时候利用课后习题。这样可以让理解更深,更容易记忆。
Linux第七次实验笔记的更多相关文章
- Linux 第七周实验 及总结
姬梦馨 原创作品 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 第七周 Linux内核如何装载和启动一 ...
- linux第七章读书笔记
Vim编辑器 Vim 仅仅通过键盘来在插入和执行命令等多种模式之间切换.这使得Vim可以不用进行菜单或者鼠标操作,并且最小化组合键的操作,对文字录入员或者程序员可以大大增强速度和效率. CHAPTER ...
- Linux 基础入门第一次实验笔记
第一节.实验介绍 本节主要介绍 Linux 的历史,Linux 与 Windows 的区别等入门知识.如果你已经有过充分的了解,可以跳过本节,直接进入下一个实验. 一.Linux 为何物 Linux ...
- 20135316王剑桥 linux第四周课实验笔记
第三章 程序的机器级表示 3.1历史观点 Intel处理器的换代:8086——80286——i386——i486——Pentium——PentiumPro——PentiumII——PentiumIII ...
- 20135320赵瀚青LINUX第七周学习笔记
赵瀚青原创作品转载请注明出处<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 概述 本周学习的内容主要是讨 ...
- 20135316王剑桥 linux第二周课实验笔记
Linux中命令格式为: command [options选项] [arguments参数] //中括号代表是可选的,即有些命令不需要选项也不需要参数 ls或ls .显示是当前目录的内容,这里“.”就 ...
- Linux 第七章学习笔记
1:链接概述 链接(linking)是将各种代码和数据部分收集起来并组合成为一个单一文件的过程,这个文件可被加载(或被拷贝)到存储并执行. 编译系统提供的调用预处理器.编译器.汇编器和链接器来构造目标 ...
- 《Linux内核分析》第七周学习笔记
<Linux内核分析>第七周学习笔记 可执行程序的装载 郭垚 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/co ...
- Linux内核分析第七周学习笔记——Linux内核如何装载和启动一个可执行程序
Linux内核分析第七周学习笔记--Linux内核如何装载和启动一个可执行程序 zl + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study. ...
随机推荐
- Javascript中的五种数据类型
Undefined 未定义.只有一个值undefined Null 只有一个值,null Boolean 在javascript中,只要逻辑表达式不返回undefined不返回null ...
- sql2008备份集中的数据库备份与现有的xxx数据库不同解决方法
原文链接:http://wncbl.cn/posts/1993c22/ 问题描述 今天在配置一个 ASP 站点时,导入以前的数据库备份文件,提示:sql2008备份集中的数据库备份与现有的xxx数据库 ...
- 烂泥:centos安装及配置DHCP服务器
本文由秀依林枫提供友情赞助,首发于烂泥行天下. 有关DHCP服务器的配置一直打算学习,这几天终于抽出时间来专门学习这个知识点. DHCP:动态主机配置协议,在此就不多做介绍.不清楚的童鞋,可以去百度下 ...
- Java读取、创建xml(通过dom方式)
创建一个接口 XmlInterface.java public interface XmlInterface { /** * 建立XML文档 * @ ...
- iTOP-4412开发板低功耗高性能的开源硬件平台——上手评测
iTOP-4412开发板现在比较热门的开发板,笔者近期入了一套.也推荐给初学ARM的朋友学习,4412开发板搭载三星Exynos四核处理器,配备1GB内存,4GB固态硬盘EMMC存储,兼具快速读取与超 ...
- 教你一招 - 如何给nopcommerce做一套自己的主题
nopcommerce拥有一套不错的模板机制,可以让你快速的做一套属于自己的主题.\Presentation\Nop.Web下面有个Themes文件夹,这里面就是放主题的地方,每个主题对应一个文件夹, ...
- Zabbix监控windows部署安装
Zabbix agent 在windows上安装部署 1. 下载与解压 地址: http://www.zabbix.com/downloads/2.4.0/zabbix_agents_2.4.0.w ...
- Qt与VC编程合作起龌龊
由于历史原因,某软件项目的界面采用QT,而后台用了VC,界面静态调用了VC生成的dll,一直以来都能够快乐的合作,然而最近出现两个小问题,觉得两者之间的合作并没有想象的那么美好. 在VC下用多媒体定时 ...
- 《TCP/IP详解 卷一》读书笔记-----TCP超时重传
1.TCP提供的是可靠传输,它通过接收方发送一个确认报文ACK来提供这种可靠性.但是数据报文和确认报文都可能会丢失,所以TCP会给发出的数据报文设置一个时间,如果超时了则进行重传 2.Karn's A ...
- [cocos2dx]利用NDK崩溃日志查找BUG
摘要: 在android上开发c++应用, crash日志都是汇编码, 很难对应到c++代码中去. 通过此文, 你可以定位到程序崩溃时的C++代码, 精确查找问题. 博客: http://www.cn ...