期中总结


习题总结与分析

  • 填空: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第七次实验笔记的更多相关文章

  1. Linux 第七周实验 及总结

    姬梦馨 原创作品 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 第七周 Linux内核如何装载和启动一 ...

  2. linux第七章读书笔记

    Vim编辑器 Vim 仅仅通过键盘来在插入和执行命令等多种模式之间切换.这使得Vim可以不用进行菜单或者鼠标操作,并且最小化组合键的操作,对文字录入员或者程序员可以大大增强速度和效率. CHAPTER ...

  3. Linux 基础入门第一次实验笔记

    第一节.实验介绍 本节主要介绍 Linux 的历史,Linux 与 Windows 的区别等入门知识.如果你已经有过充分的了解,可以跳过本节,直接进入下一个实验. 一.Linux 为何物 Linux ...

  4. 20135316王剑桥 linux第四周课实验笔记

    第三章 程序的机器级表示 3.1历史观点 Intel处理器的换代:8086——80286——i386——i486——Pentium——PentiumPro——PentiumII——PentiumIII ...

  5. 20135320赵瀚青LINUX第七周学习笔记

    赵瀚青原创作品转载请注明出处<Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 概述 本周学习的内容主要是讨 ...

  6. 20135316王剑桥 linux第二周课实验笔记

    Linux中命令格式为: command [options选项] [arguments参数] //中括号代表是可选的,即有些命令不需要选项也不需要参数 ls或ls .显示是当前目录的内容,这里“.”就 ...

  7. Linux 第七章学习笔记

    1:链接概述 链接(linking)是将各种代码和数据部分收集起来并组合成为一个单一文件的过程,这个文件可被加载(或被拷贝)到存储并执行. 编译系统提供的调用预处理器.编译器.汇编器和链接器来构造目标 ...

  8. 《Linux内核分析》第七周学习笔记

    <Linux内核分析>第七周学习笔记 可执行程序的装载 郭垚 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/co ...

  9. Linux内核分析第七周学习笔记——Linux内核如何装载和启动一个可执行程序

    Linux内核分析第七周学习笔记--Linux内核如何装载和启动一个可执行程序 zl + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study. ...

随机推荐

  1. [独孤九剑]持续集成实践(二)– MSBuild语法入门

    本系列文章包含: [独孤九剑]持续集成实践(一)- 引子 [独孤九剑]持续集成实践(二)– MSBuild语法入门 [独孤九剑]持续集成实践(三)- Jenkins安装与配置(Jenkins+MSBu ...

  2. 5+ App开发入门指南

    HTML5 Plus应用概述 HTML5 Plus移动App,简称5+App,是一种基于HTML.JS.CSS编写的运行于手机端的App,这种App可以通过扩展的JS API任意调用手机的原生能力,实 ...

  3. Effective Java 08 Obey the general contract when overriding equals

    When it's the case that each instance of the class is equal to only itself. 1. Each instance of the ...

  4. 【Other】U盘FAT32转NTFS且无数据丢失

    序: 做了一个U盘启动盘后发现文件系统格式为FAT32.这种格式支持单个文件最大4G,超过4G就无法拷贝了.为了防止以后突发情况所以提前把FAT32转换成NTFS.为避免导入导出数据最简单的方法利用D ...

  5. 《MySQL技术内幕——SQL编程》读书笔记(二)——数据类型

    对数据类型的选择将影响与数据库交互的应用程序的性能. 1.通常来说,如果一个页内可以存放尽可能多的行,那么数据库的性能就越好,因此选择一个正确的数据类型至关重要. 2.另一方面,如果在数据库中创建表时 ...

  6. CI框架SESSION重写

    这个是我平时用的是 PHP 自己的 Session 机制,是真正的 PHP Session,存储在服务器端,而不是用的 cookie 接口完全兼容于 CI 2.0.x 的 Session 类库,也就是 ...

  7. ORA-01034: ORACLE not available如何解决

    一个小小的问题,让我折腾了一个上午,下午三点彻底解决了,分享一个给大家解决方法,尽管在测试服务器上,但是经验是值得总结和分享的. ERROR:ORA-01034: ORACLE not availab ...

  8. 【Android 基础】Animation 动画介绍和实现

    在前面PopupWindow 实现显示仿腾讯新闻底部弹出菜单有用到Animation动画效果来实现菜单的显示和隐藏,本文就来介绍下吧. 1.Animation 动画类型 Android的animati ...

  9. div中的内容垂直居中的五种方法

    一.行高(line-height)法 如果要垂直居中的只有一行或几个文字,那它的制作最为简单,只要让文字的行高和容器的高度相同即可,比如: p { height:30px; line-height:3 ...

  10. java 16-1 ArrayList的练习1

    需求: ArrayList去除集合中字符串的重复值(去掉相同的字符串) 分析: 第一种做法:创建一个新的空集合: A:创建1个具有相同字符串的集合 B:创建1个空的集合 C:遍历第一个集合里面的元素 ...