2022-09-17_Linux环境与版本
1. 命令拓展(了解)
linux查看cpu占用的命令是什么?
A.top
B.netstat
C.free
D.df
【答案解析】A
2022-09-24_Linux环境与版本
2. 命令拓展(了解)
以下哪个命令输出Linux内核的版本信息:
A.uname -r
B.vmstat
C.sar
D.stat
【答案解析】A
3. 内核文件系统(了解)
linux 2.6.* 内核默认支持的文件系统有哪些?[多选]
A.ext3
B.ext2
C.ext4
D.xfs
E.ufs
【答案解析】ABCD
A ext全称Linux extened file system, extfs,即Linux扩展文件系统,ext2为第二代
D XFS一种高性能的日志文件系统
2000年5月,Silicon Graphics以GNU通用公共许可证发布这套系统的源代码,之后被移植到Linux 内核上。
XFS 特别擅长处理大文件,同时提供平滑的数据传输
E UFS是UNIX文件系统的简称,它来源于4.3Tahoe发行版中提供的BSD Fat Fast File System(FFS)系统,属于FFS的演化版本
4. grep命令
在Linux系统中, 为找到文件try_grep含有以a字母为行开头的内容, 可以使用命令?
A.grep -E #$ try_grep
B.grep -E #a try_grep
C.grep -E ^$ try_grep
D.grep -E ^a try_grep
【答案解析】D
//grep选项中,-E选项可以用来扩展选项为正则表达式;
//$表示匹配文件末尾,字符需要在$之前表示以字符结尾 a$表示以a结尾
//^表示匹配文件起始,字符需要在^之后表示以字符起始 ^a表示以a起始
5. 批量删除文件
如何批量删除当前目录下后缀名为.c的文件。如a.c、b.c()
A.rm *.c
B.find . -name "*.c" -maxdepth 1 | xargs rm
C.find . -name "*.c" | xargs rm
D.以上都不正确
【答案解析】AB
xargs是一个强有力的命令,它能够捕获一个命令的输出,然后传递给另外一个命令,用于很多不支持|管道来传递参数的命令,相当于将前边命令的执行结果,也就是查找到的文件名,传递给后边的rm指令进行删除
/*
A rm *.c *通配符,表示匹配任意字符任意次
B find . -name "*.c" -maxdepth 1 | xargs rm
find . -name "*.c" -maxdepth 1 找到当前目录下.*结尾的文件,目录深度为1
C find . -name "*.c" | xargs rm 没有进行深度控制,删除的不仅是当前目录下的文件,会将子目录下的文件也删除
D 以上都不正确
*/
2022-10-16_粘滞位
6. yum命令常见选项
以下描述正确的是
A.在Centos中可以使用yum install 命令安装软件包
B.在Centos中可以使用yum uninstall 命令卸载软件包
C.在Centos中可以使用yum list 查看所有可安装软件包
D.在Centos中可以使用yum show查看所有可安装软件包
【答案解析】AC
yum工具的常用选项有:
install 表示安装软件包
list 列出所有可供安装的软件包
search 搜索包含指定关键字的软件包
remove 卸载指定的软件包
根据常用操作的选项可排除出B和D是错误的。yum不具备这两个操作选项
7. yum命令拓展(了解)
以下命令正确的是:
A.yum makecache命令的功能是将服务器的软件包信息缓存到本地
B.yum search命令可以在所有软件包中搜索包含有指定关键字的软件包
C.yum clean all 命令可以清除缓存中老旧的头文件和软件包
D.yum upgrade命令可以更新所有的rpm软件包
【答案解析】ABC
yum工具在每次安装指定软件包的时候,都会检测源服务器上的软件包信息。
为了便捷不用每次都去搜索软件包信息,因此使用 yum makecache将软件包信息缓存到本地,使用 yum clean all 清理老旧的缓存信息。
因此A和C是正确的
yum search 用于在搜索包含有指定关键字的软件包,B也是正确的
D选项:
yum -y update:升级所有包同时,也升级软件和系统内核;
yum -y upgrade:只升级所有包,不升级软件和系统内核,软件和内核保持原样。 所以D选项不完整严谨
2022-10-22_vim使用
8. 替换操作
Vi编辑器中,怎样将字符AAA全部替换成yyy?
A.p/AAA/yyy/
B.s/AAA/yyy/g
C.i/AAA/yyy/
D.p/AAA/yyy/h
【答案解析】
/*
在vim的底行模式中,
:s 表示substitute,也就是替换, 格式为以下
:[range]s[ubstitute]/{pattern}/{string}/[flags] [count]
range 表示区间 % 用于表示全文, 2,3 表示从第2行开始到第3行
{pattern} 表示字符串匹配规则,要匹配什么样的字符串 , 比如^a 表示以a字符起始的字符串
{string} 表示要将匹配到的字符串替换为的新的string字符串
[flags] s_flags中,g比较常用,通常使用g表示全部替换,默认如果不给的话,表示只替换一次
[count] 表示在一行中匹配多少次,很少会用到....
如果想要将文件中所有 nihao 替换为 hello 则命令为: %s/nihao/hello/g
:p 用于打印指定区间的行
:[range]p[rint] [flags]
:i 在指定行上方添加文本
:{range}i[nsert][!]
根据这些选项能够确定B选项正确,其他错误。
*/
9. 保存操作
你使用命令”vi/etc/inittab”查看该文件的内容,你不小心改动了一些内容,为了防止系统出为,你不想保存所修改的内容,你应该如何操作
A.在末行模式下,键入:wq
B.在末行模式下,键入:q!
C.在末行模式下,键入:x!
D.在编辑模式下,键入”ESC”键直接退出vi
【答案解析】B
A 在末行模式下,键入:wq 保存并退出编辑,就算没有修改也会写入,并修改文件时间属性
(change time和modify time都会发生改变)
B 在末行模式下,键入:q! 强制退出编辑,但并不保存当前修改
C 在末行模式下,键入:x! 保存并退出编辑,仅当文件有修改时会保存,并修改文件时间属性
D 在编辑模式下,键入”ESC”键并非直接退出vi编辑,而是用于返回普通模式
根据题意,想要退出编辑,但是又不想保存修改,因此选择B选项。
10. 预编译/编译/汇编/链接
将一个test.c文件仅仅进行汇编而不生成可执行程序的命令是?
A.gcc -S test.c
B.gcc -E test.c
C.gcc -c test.c
D.gcc test.c
【答案解析】C
gcc常见选项:
-c 汇编完成后停止,不进行链接
-E 预处理完成后停止,不进行编译
-S 编译完成后停止,不进行汇编
-o 用于指定目标文件名称
-g 生成debug程序。向程序中添加调试符号信息
题目要求为仅执行到汇编就结束,而不生成可执行程序,因此选择C选项。
11. parse tree(了解)
在编译过程中,产生parse tree的过程是哪个阶段?
A.语法分析
B.语义分析阶段
C.词法分析
D.目标代码生成阶段
【答案解析】A
编译过程为 扫描程序–>语法分析–>语义分析–>源代码优化–>代码生成器–>目标代码优化;
扫描程序进行词法分析,从左向右,从上往下扫描源程序字符,识别出各个单词,确定单词类型
语法分析是根据语法规则,将输入的语句构建出分析树,或者语法树,也就是我们答案中提到的分析树parse tree或者语法树syntax tree
语义分析是根据上下文分析函数返回值类型是否对应这种语义检测,可以理解语法分析就是描述一个句子主宾谓是否符合规则,而语义用于检测句子的意思是否是正确的
目标代码生成指的是,把中间代码变换成为特定机器上的低级语言代码。
根据以上各个阶段的理解,可以分析出正确选项为A选项。
12. Makefile(了解)
下列关于makefile描述正确的有?【多选题】
A.makefile文件保存了编译器和连接器的参数选项
B.主要包含了五个东西:显式规则、隐晦规则、变量定义、文件指示和注释
C.默认的情况下,make命令会在当前目录下按顺序找寻文件名为“GNUmakefile”、“makefile”、“Makefile”的文件, 找到了解释这个文件
D.在Makefile不可以使用include关键字把别的Makefile包含进来
【答案解析】ABC
makefile文件中,保存了编译器和链接器的参数选项,并且描述了所有源文件之间的关系。
make程序会读取makefile文件中的数据,然后根据规则调用编译器,汇编器,链接器产生最后的输出。
根据makefile的功能理解,A选项是正确的
Makefile里主要包含了五个东西:显式规则、隐晦规则、变量定义、文件指示和注释, B选项是正确的
显式规则说明了,如何生成一个或多个目标文件。
make有自动推导的功能,所以隐晦的规则可以让我们比较粗糙地简略地书写makefile,
比如源文件与目标文件之间的时间关系判断之类在makefile中可以定义变量,
当makefile被执行时,其中的变量都会被扩展到相应的引用位置上,通常使用 $(var) 表示引用变量文件指示。
包含在一个makefile中引用另一个makefile,类似C语言中的include; 根据这一项可以推导D选项是错误的。
注释,makefile中可以使用 # 在行首表示行注释
默认的情况下,make命令会在当前目录下按顺序找寻文件名为“GNUmakefile”、“makefile”、“Makefile”的文件,C选项也正确
13. 编译优化
程序的完整编译过程分为是:预处理,编译,汇编等,如下关于编译阶段的编译优化的说法中不正确的是
A.死代码删除指的是编译过程直接抛弃掉被注释的代码
B.函数内联可以避免函数调用中压栈和退栈的开销
C.for循环的循环控制变量通常很适合调度到寄存器访问
D.强度削弱是指执行时间较短的指令等价的替代执行时间较长的指令
【答案解析】A
死代码删除是编译最优化技术,指的是移除根本执行不到的代码,或者对程序运行结果没有影响的代码,而并不是删除被注释的代码,因此A选项错误
内联函数,也叫编译时期展开函数, 指的是建议编译器将内联函数体插入并取代每一处调用函数的地方,从而节省函数调用带来的成本,
使用方式类似于宏,但是与宏不同的是内联函数拥有参数类型的校验,以及调试信息,而宏只是文本替换而已。因此B选项正确
for循环的循环控制变量,通常被cpu访问频繁,因此如果调度到寄存器中进行访问则不用每次从内存中取出数据,可以提高访问效率,因此C选项正确
强度削弱是指执行时间较短的指令等价的替代执行时间较长的指令, 比如 num % 128 与 num & 127 相较,则明显&127更加轻量, 故D也是正确的
2022-10-29_gdb使用
14. 冯诺依曼组成部分
不属于冯诺依曼体系结构必要组成部分是:
A.CPU
B.Cache
C.RAM
D.ROM
【答案解析】B
A CPU 运算器与控制器
B Cache 缓存(一种技术)
C RAM 内存(存储器)
D ROM 磁盘(输入输出设备)
15. 系统调用概念
下面关于系统调用的描述中,错误的是()
A.系统调用把应用程序的请求传输给系统内核执行
B.系统调用函数的执行过程应该是在用户态
C.利用系统调用能够得到操作系统提供的多种服务
D.是操作系统提供给编程人员的接口
E.系统调用给用户屏蔽了设备访问的细节
F.系统调用保护了一些只能在内核模式执行的操作指令
【答案解析】B
系统调用是操作系统向上层提供的用于访问内核特定功能的接口。
A正确,应用程序通过系统调用将自己需要完成的功能传递给内核,进行执行完成
B错误,系统调用的运行过程是在内核态完成的,操作系统并不允许用户直接访问内核,也就是说用户运行态并不满足访问内核的权限。
C正确,因为系统调用就是想上层提供用于完成特定内核服务或功能的。
D正确,
E正确,用户只需要将自己的请求以及数据通过系统调用接口传递给内核,内核中完成对应的设备访问过程,最终返回结果正确
F正确,系统向上层提供系统调用接口用于访问内核服务或功能的很大原因也是因为这样可以最大限度的保护内核的稳定运行。
2022-11-05_进程的理解
16. 进程 | 程序 | 作业
下列有关进程的说法中,错误的是? [多选]
A.进程与程序是一一对应的
B.进程与作业是一一对应的
C.进程是静态的
D.进程是动态的过程
【答案解析】ABC
程序是静态的指令集合,保存在程序文件中,
进程是程序的一次运行过程中的描述。
作业是用户需要计算机完成的某项任务,是要求计算机所做工作的集合。
根据以上概念理解:
A选项错误,因为一个程序可以同时运行多次,也就有了多个进程
B选项错误,因为一个作业任务的完成可由多个进程组成,且必须至少由一个进程组成
C选项错误,因为程序是静态的,而进程是动态的。
D选项正确
17. PCB进程控制块概念
系统感知进程的唯一实体是
A.进程id
B.进程控制块
C.进程管理器
D.进程名
【答案解析】B
进程是操作系统对于程序运行过程的描述,而这个描述学名叫做进程控制块-PCB,它是操作系统操作系统管理以及调度控制程序运行的唯一实体。
根据进程的理解分析:
A选项错误,因为进程ID只是进程的标识符,是系统能够找到特定进程的标识而已
C选项错误,进程管理器只是对大量PCB进行管理的一个程序而已
D选项错误,进程本质上来说没有名字,它有所调度管理运行的程序的名称,它的标识是进程ID,可以理解进程ID是它的名字
因此只有B选项正确,在系统角度看来,进程就是对于程序运行的描述,就是PCB进程控制块。
18. 进程抢占
在抢占式多任务处理中,进程被抢占时,哪些运行环境需要被保存下来?[多选]
A.所有cpu寄存器的内容
B.全局变量
C.页表指针
D.程序计数器
【答案解析】ACD
A 所有cpu寄存器的内容 cpu上正在处理的数据
B 全局变量 程序内的数据(并不一定正在被处理)
C 页表指针 程序切换时会将页表起始地址加载到寄存器中
D 程序计数器 下一步程序要执行的指令地址
2022-11-07_僵尸进程的理解
19. 精灵进程和守护进程
以下描述错误的有
A.守护进程:运行在后台的一种特殊进程,独立于控制终端并周期性地执行某些任务。
B.僵尸进程:一个进程 fork 子进程,子进程退出,而父进程没有wait
/waitpid
子进程,那么子进程的进程描述符仍保存在系统中,这样的进程称为僵尸进程。
C.孤儿进程:一个父进程退出,而它的一个或多个子进程还在运行,这些子进程称为孤儿进程。(孤儿进程将由 init 进程收养并对它们完成状态收集工作)
D.精灵进程:精灵进程退出后会成为僵尸进程
【答案解析】D
僵尸进程:子进程先于父进程退出,父进程没有对子进程的退出进行处理,因此子进程会保存自己的退出信息而无法释放所有资源成为僵尸进程导致资源泄露。
孤儿进程:父进程先于子进程退出,子进程成为孤儿进程,运行在后台,父进程成为1号进程(而孤儿进程的退出,会被1号进程负责任的进行处理,因此不会成为僵尸进程)
守护进程&精灵进程:这两种是同一种进程的不同翻译,是特殊的孤儿进程,不但运行在后台,最主要的是脱离了与终端和登录会话的所有联系,也就是默默的运行在后台不想受到任何影响
根据以上理解分析:
D错误:精灵进程其实和守护进程是一样的,不同的翻译叫法而已,它的父进程是1号进程,退出后不会成为僵尸进程