总结

 

前六周考试题目及答案总结

第六周:ch06
CH06 判断: SRAM比DRAM快。(ok)
CH06 判断:EEPROM可以用紫外线进行擦除。(x)
CH06 填空:根据携带信号不同,总线可分为(数据总线、地址总线、控制总线)三种。
6.2 填空:计算磁盘容量(327.68G):4个盘片,100000个柱面,每条磁道800个扇区,每个扇区512个字节。
CH06 填空:对磁盘扇区的访问时间包括三个部分(寻道时间、旋转时间、传送时间)。
6.3 填空:最大旋转时间是(4ms)。
CH06 填空:逻辑磁盘块的逻辑块号可以翻译成一个(盘面、磁道、扇区)三元组。
CH06 填空:CPU使用(存储器映射I/O)技术向I/O设备发出命令。
CH06 填空:局部性有两种形式(时间局部性、空间局部性)。
CH06 判断:程序访问一个向量,步长越大空间局部性越好。(x)
CH06 判断:程序中的循环语句具有良好的时间局部性和空间局部性。(ok)
6.8 填空:只修改第八行,让程序具有良好的空间局部性。改为:( sum +=a[i][j][k] )
CH06 填空:存储层次结构的中心思想是(上层作为下层的缓存)。
CH06 填空:缓存不命时,决定哪个块是牺牲块由(替换策略)来控制。
CH06 填空:空缓存的不命中叫(强制性不命中或冷不命中)
CH06 填空:容量不命中的原因是(缓存太小)
CH06 填空:高速缓存结构可以用元组(S,E,B,m)来描述。
6.10 填空:高速缓存容量为1024,高速缓存结构为(( 32 ),4,8,32)
6.11 填空:3/4的命中率的如何计算的((32-8)/32,或每4次有一次不命中)
CH06 判断:存储器山中山脊代表空间局部性。(x)

第五周:

man -k 填空:Linux中显示文件(file )属性(status)的命令是( stat )
cheat 填空:使用du命令对当前目录下的目录或文件按大小排序 的命令是( du -sk *| sort -rn )
grep 填空:~/test 文件夹下有很多c源文件,查找main函数在哪个文件中的命令( grep main *.c )
vi 填空: vi中查看函数qsort的帮助文档的快捷键为(K)
gdb 判断: gdb中next和step都可以单步跟踪,根据自顶向下原则应该优先选用step. (X )
ch01 填空:抽象是CS中一个重要的概念,在出来器里,(指令集结构)提供了对实际处理器的抽象。
ch01 选择:并行的三个层次不包含(C)。A 线程级并发 B指令级并行 C进程级并发 D SIMD
ch07 填空:gcc -f PIC xxx.c 中的PIC的意思是(位置无关的代码 or Position-Independent Code)
2.4 填空:计算 0x503C + 100 = ( 0x50A0 ) ,结果用16进制表示
2.6 填空:练习2.6中匹配的二进制共21位,用16进制表示是( 0x159141 )
2.8 填空: a,b长度都是一个字节,a=1,b=6, a|b = ( 7 or [00000111] ) 
2.11 判断: 代码中第四行 "<=" 换成“>=” 就可以解决代码问题。 ( X )
2.13 判断: /*compute x&y, only calls to functions bis and bic*/
int bool_and(int x, int y){
int result = bic(x, y);
return result;
} (X)
2.14 填空:a,b长度都是一个字节,a=1,b=6, a||b = ( 1 or true ) 
2.18 填空:16位机器上,补码0x8004转化等值的十进制是( -2044 ) 
2.19 判断:T2U4(-8) + 8 = 16 (OK)
2.21 判断:C语言中: -2147483647-1U < -2147483647 ( ok )
2.23 填空:fun2(0xED005380) = (0xFFFFFF80)
2.24 填空:四位数0xC 截断为3位数,解释为无符号数的截断值是(4)
2.25 判断:代码for中条件 i<=(int) length -1 可以消除程序bug ( ok ) 
2.27 判断: 函数代码可以是 ruturn x+y >= y; (ok) 
2.29 填空: [11000] + [11000] = ([110000])
2.33 填空:对于四位数补码8,其补码的非表示为十进制为(-8)
2.34 填空:补码 [100] * [101] = ([001100])
2.40 填空:K=31 移位2,加/减1,表达式为((x<<5)-x)
2.44 判断: 针对题目:(x>0)|| ((x-1)<0)的值为真 (x)
2.45 填空:二进制小数1.101转化为十进制为(1.625)
2.47 判断:浮点数 00111转化为十进制为1.5 (X)
2.50 填空:二进制数10.110舍入到最接近的二分之一的十进制的值为(2.5)
2.54 判断: f== -(-f) (ok)

第四周:ch03

regex 判断: 正则表达式r.t可以匹配rt. (x)
regex 判断:正则r表达式zo*可以匹配z. (ok)
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)
CH03 判断: 把内存中地址为0x4050处的字复制到地址为0x405c处的指令是 movw ($0x4050) ,($0x405c) (x)
CH03 判断: %esp的值为0x10c, pushl %eax后,%esp的值为0x108. (ok)
3.3 判断: movb $0xF, (%eax) 是正确汇编语句. (ok)
3.5 填空: decode1函数的功能是( 数据交换 )
3.6 填空: 指令leal 3(%eax,%ecx,4), %edx 存储在%edx中的值为( 3+x+4y ) 
3.9 填空: arith函数的功能是( ~((x^y)>>3) -z )
3.14 判断: 汇编代码不会记录程序值的类型。(ok) 
CH03 填空:C语言中的条件表达式在汇编中是结合(有条件跳转和无条件跳转)实现的。
CH03 填空:C语言中的循环结构可以用(条件测试和跳转组合起来)实现。
CH03 选择:栈用来(ABCD) A 传递参数 B 存储返回信息 C保存寄存器 D本地存储。
CH03 填空:Linux汇编中,形成空调用栈帧的语句是(push %ebp movl %esp %ebp) 
CH03 填空:Linux汇编中,函数有返回值存在( %eax )寄存器中。

ch04: 

find: 填空:查找当前目录下2天前被更改过的文件 (find . -mtime +2 -type f -print)    
CH04 判断:Y86中,程序员的可见状态包括PC。(ok)
CH04 判断:Y86中,有5个双字节指令。(x)
4.1 Y86中 jmp 0x100 对应的机器码是(0x7000010000)
4.2 Y86中 0xa00f 对应的汇编语句是(pushl %eax)
CH04 判断:Y86中,状态码INS表示遇到非法指令。(ok)
CH04 填空:创建Y86代码唯一的工具是(汇编器 or YAS)
4.6 判断:Y86中,pushl压入栈的是减去4的%esp的值。(x)
CH04 填空:实现一个数字系统需要三组成部分(组合逻辑、存储器元素、时钟信号)。
CH04 填空:HCL代表(Hardware Control Language, 硬件控制语言)
4.8 填空:xor的HCL表达式是(bool xor = (!a &&b) ||(a && !b))
CH04 填空:HCL表达式bool Eq = (A==B)的功能是(判断字A、B是否相等) 
CH04 填空: 

对应的HCL描述是( )。 

4.10 填空:写出HCL代码,求输入字A、B中的最小值( 注意是两个 ) 
CH04 填空:Y86中,使用时钟寄存器保存程序计数器PC、条件代码CC和(程序状态Stat) 
CH04 填空:Y86中,指令执行分为六个阶段(取指、译码、执行、访存、写回、更新PC) 
CH04 填空:Y86中对于PC值p=100,指令包括一个寄存器指示符字节和,常数1,增加器产生值(106) 
4.17 填空:实现HCL代码,需要查看教材第( 232 )页的图。 
CH04 填空:p266, icode == IOPL :ifun; 的功能是(加减与异或运算的选择) 
4.24 填空:mem_write中为什么有IRMMOVL( 寄存器往内存写 )

第四周:
man -k 填空: 数据结构中有线性查找算法,C标准库中没有这个功能的函数,但Linux中有,这个函数是(lfind或lsearch)
cheat 填空:To list the content of /path/to/foo.tgz archive using tar ( tar -jtvf /path/to/foo.tgz )
find 填空:查找当前目录下所有目录的find命令是(find . -type d)
grep 填空:查找宏 STDIN_FILENO 的值的命令是(grep -nr XXX /usr/include)
CH01填空:计算机系统中的所有信息都是位串表示的,所谓(信息)就是位+上下文。
CH01填空:存储器层次结构的主要思想是上层存储器作为下层存储器的(高速缓存)。
CH01填空:操作系统中最基本的四个抽象是(虚拟机、进程、虚拟存储器、文件)。
CH07填空:链接器的两个主要任务是(符号解析和重定位)。
CH07选择:教材p449中 swap.c中的bufp1 是( A ) A 全局符号 B外部符号 C本地符号 D以上都不对
CH07 判断:C语言中,全局变量是强符号。(X)
CH07 填空:(加载器)将可执行文件的内容映射到存储器,并运行这个程序。
CH07 选择:Linux中,反汇编.text节中的二进制指令使用的工具是(d)A ar B strings C readelf D objdump

针对如下代码:


1. 在vi中,查看scanf和printf man pages(帮助文档)的命令分别是?(2分)
K 3K
2. 编译和运行以上代码的命令(2分) 
gcc *.c -o main 
./main
3. 使用GDB调试以上代码:编译代码的命令是?main.c中如何给main函数设置断点?如何在第六行设置断点?(3分)
gcc -g *.c -o main 
b main 
b 6
4. 除了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)

5. 除了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

6. 写出编译上面代码的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

第三周:

填空:实验楼环境中所有的默认系统用户名和密码均为 (shiyanlou                )。

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

判断:Linux Bash中, man printf和man 1 printf 功能等价。 ok

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

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

填空:Linux中没有C盘,D盘,其文件系统的目录是由(FHS)标准规定好的。

判断:Linux Bash中,cd - 命令可以切换到'home'目录。 x     应该是cd ~ , cd -切换到上一个目录

判断:Linux Bash中,强制删除test文件的命令是(rm -f test )。

判断:Linux Bash中,cat -n 和 nl 命令功能等价。ok

判断:Linux Bash中,source 和 . 命令功能等价。 ok

填空:Linux Bash中,查找home目录中前天创建的文件的命令是(find ~ -ctime 2)。 区分 2 +2 -2 的意义, 三种时间参考学姐李冰清的研究

判断:Linux Bash中,使用tar命令把home目录打包成home.tar的命令是( tar -cf home.tar  ~)

填空:Linux Bash中,zip命令使用(-e)参数可以创建加密压缩包。

判断:Linux Bash中,df和 du 命令功能等价。x

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

填空:Linux Bash中,使用grep查找当前目录下*.c中main函数在那个文件中的命令是(  grep main *.c )

填空:Linux Bash中,使用wc统计hello.c共有几行代码的的命令是( wc -l hello.c                      )

判断:col 命令的-h参数可以将Tab换成对等数量的空格建。x  , 空格换tab

填空:Linux Bash中,把ls命令显示当前目录的结果存入ls.txt的命令输出重定向命令是(ls > ls.txt)

填空:Linux Bash中,(tee   )命令可以同时重定向到多个文件。

 

常用命令总结

man -k:

常用来搜索,结合管道使用。

man手册共有8个区段,最常用的是123,含义如下:

1.Linux2.系统调用3.c语言

但是当单独用man语句的时候,想查看其中的单独某个区段内的解释时,用法是这样的:

man 3 printf即查找c语言中printf的用法。

gcc语句

常用选项

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

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

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

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

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

-v 打印出编译器内部编译各过程的命令行信息和编译器的版本

-I dir 在头文件的搜索路径列表中添加dir目录

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 [行数或函数名] <条件表达式>

正则表达式

正则表达式的作用 

验证字符串是否符合指定特征

查找和提取字符串

替换文本

规则

\d  0~9 中的任意一个数字

\w  任意一个字母或数字或下划线,即 A~Za~z0~9中任意一个

\s  包括空格、制表符、换页符等空白字符的其中任意一个

.   匹配除换行符(\n)以外任意一个字符

\r, \n  代表回车和换行符

\t  制表符

\^  代表符号本身

\$  代表符号本身

\.  代表小数点(.)本身

    学习体会

    经过半个学期的学习,对《深入理解计算机系统》这本书有了自己的一些认识,也对这门课程有了一定的理解。在娄老师这种自主学习的授课方式下,由一开始的不适应慢慢的学会这种学习方法,对整本书的脉络大体掌握,在书本上的知识和在虚拟机里操作相结合的过程中,对相关知识点有更深刻的见解,而且娄老师的这种授课给了我们充足的自我思考空间,而且对问题能够有自己的认识,锻炼了自己解决问题的能力和动手实践能力。慢慢的不再害怕那一本厚厚的书,而是知道该怎么去学习。另外在学习方面的不足主要是知识点没有深入,几个方面都停留在表面,没有做到举一反三深入理解,特别是家庭作业。还有就是平时的考试试题错的没有及时对正确答案进行理解。在今后的学习中我会注意这些方面,更好的去自主学习,提高自己的学习能力。

 

 

 

 

 

 

posted @ 2015-11-01 21:56  20135316王剑桥  阅读(209)  评论(1编辑  收藏  举报