【Linux】# 2022 Linux 笔试主要内容 MJ_University

2023-05-16

2022 Linux 笔试主要内容

看前须知道 带【】的都是老师复习课上提到的内容,但不代表说一定会考哦!

选择题(20分)
填空题(20分)
判断题(10分)【侧重 前面4个章节,偏理论的】
简答题6道(30分)【侧重在第四章 进程部分】
综合题(20分):

  1. shell编程、
  2. 进程PV编程
  3. C语言编程【附录里有,但会结合PV操作】
  4. Makefile编写【实验里的】

文章目录

  • 2022 Linux 笔试主要内容
    • 看前须知道 带【】的都是老师复习课上提到的内容,但不代表说一定会考哦!
  • 一、Linux常用命令(选择、填空、判断)
    • 1、文件操作命令
    • 2、目录操作命令Linux 操作系统中常用的目录操作命令包括:
    • 3、文件的权限信息
      • !!!还不如一道题目来的干脆!!!
    • 4、联机帮助
    • 5、输入/输出重定向(> / >> / < / |)
      • 1. 输出重定向(>):用于将命令的输出结果重定向到文件中。
      • 2. 输出重定向(>>):用于将命令的输出结果追加(≠覆盖)到文件的末尾。
      • 3. 输入重定向(<):用于将文件的内容作为命令的输入。
      • 4. 管道符(|):用于将一个命令的输出结果作为另一个命令的输入。
    • 6、vi基本用法
    • 7、GCC编译命令【要掌握分步到位 下面那4个】
      • gcc 编译过程 [想看更详细的 参考这个链接](https://www.cnblogs.com/wjchao/p/7460375.html)
    • 8、Makefile【复习一下之前的实验】-【书本P311 题目可能会给一张依赖树的图,让我们写出Makefile 或者是 给Makefile 来画依赖书(就是考它们的转换嘛)】
    • 9、操作系统的主要功能【书本P3】
    • 10、进程的概念【重要】【书本P70】
    • 11、引入进程的意义【书本P68】
    • 12、进程管理的功能
    • 13、程序顺序执行的特点【书本P68】
    • 14、程序并发执行的特点【书本P68】
    • 15、进程的基本状态及转换
      • 经典的3种【书本P71】
      • Linux下的5种【书本P72】
    • 16、进程控制块(PCB)的概念、作用【P71】
    • 17、PCB主要包括4方面的内容【书本P72】
    • 18、Linux查看进程、关闭进程的命令【P74】
    • 19、Linux系统的内核主要由4部分构成【书本P76】
    • 20、fork()、exec() 系统函数的作用【书本P82、P83】
    • 21、Linux系统的内核主要构成
    • 22、CPU的执行模式【书本P77】
    • 23、原语与普通函数的区别【老师给的pdf P86】
      • 什么是原语?
      • 什么是普通函数?
      • 区别
      • 书本上写的是
    • 24、进程调度的功能【不只是功能,还要关注调度的时机,复习的时候要与前面讲的“进程的状态转换”联系起来】
      • 书本上的内容【老师给的PDF P94】
    • 25、常用的进程调度算法及其特点【书本P90】
    • 26、临界资源、临界区的概念【书本P99】
    • 27、进程互斥、进程同步的概念【书本4.6节】
    • 28、信号量与P、V操作【主要是针对信号量、考试会考,让我们选择对哪个信号量进行P、V操作(进出公园做登记的例子)】
      • 什么是信号量?
      • 什么是P和V操作?
    • 29、进程的通信方式【书本P104】
    • 30、生产者和消费者-进程同步【书本P101(读写缓冲区)】
    • 31、停车场-进程的互斥(这不还是进出公园登记嘛)
    • 32、死锁产出的原因及解决措施【书本P103】
      • 死锁产生的原因通常有以下几个方面:
      • 解决死锁的常见方法有:
  • 二、简答题
    • 1、什么是操作系统?
    • 2、进程调度的功能是什么,调度工作包含哪些内容?
    • 3、操作系统为什么要引入进程概念,进程管理的功能是什么?
    • 4、目前操作系统采用的目录结构是什么?它具有什么优点?
    • 5、CPU两种工作状态, 为何要区分CPU的两种工作状态?
      • 为什么要区分 CPU 的两种工作状态呢?
    • 6、简述Linux系统支持的5种进程通信机制
    • 7、什么是绝对路径与相对路径,若要由/usr/share/doc进入到/usr/share/man写出相对路径与绝对路径所用的命令
    • 8、简述常用的4种进程调度算法,并说明它们各自的优缺点
    • 9、画Linux系统的进程状态转换图,并注明各种状态转换的条件【画图的时候要注明清楚 状态 和 转换时间】
    • 10、简述引发进程调度的4种时机
    • 11、进程间的制约关系
    • 12、进程与程序是两个完全不同的概念,但又有密切的联系,试写出两者的联系与区别。【书本P70】
    • 13、PCB的作用??为什么说PCB是进程存在的唯一标志?【书本P71】
    • 14、什么是临界区?进程进入临界区的调度原则是什么?
    • 15、简述使用信号量进行进程间通信
    • 16、在单处理机环境下,进程间有哪几种通信方式,是如何实现的
  • 三、应用题
      • **以老师复习课上讲过的内容整理的**
    • 1、生产消费(P、V)(书上图4-16、4-17)
      • 参考代码:
    • 2、停车场计数器(P、V)(书上图4-14、4-15)
    • 3、Fork()编程(书上图4-10,4-11,4-12)【书本上的例题要再复习一下】
      • 书上的4-10
      • 书上的4-11
      • 书上的4-12
      • 作业题
    • 4、编写C语言程序,并用Makefile进行编译。【复习实验】
    • 5、单道程序与多道程序CPU时间计算
  • 四、Shell(包括课后习题)
    • 复习一下 怎么生成和执行脚本
    • 1.编写个一个shell脚本,用来累加用户输入的多个数字,并在屏幕上输出累加的结果
    • 2.求100内的质数
    • 3.编写一个Shell脚本,它能计算用户通过命令行参数形式提供的多个整数的平均数
    • 4.编写个shell程序来判断用户所输入的参数是否是一个数字
    • 5.用Shell编程,判断一文件是不是字符设备文件,如果是将其拷贝到 /dev 目录下
    • 6.编写shell脚本,实现如下功能:(1)从命令行读入2个整数;(2)对两个数进行大小比较;(3)在屏幕上输出比较结果。
    • 7.编写shell程序,实现自动删除50个账号的功能。账号名为user1至user50
    • 8.编写一个Shell脚本,它能够显示下面序列的前10个数字:0,1,1,2,3,5,8,13,…....
    • 9.编写一个Shell脚本,它能将用户提供的二进制数转化为十进制数
  • 结束,在这也预祝大家能考出理想的成绩,过个开心年!新年快乐呀!!

一、Linux常用命令(选择、填空、判断)

1、文件操作命令

Linux 操作系统中常用的文件操作命令包括:

ls:用于显示文件列表。
cd:用于切换当前工作目录。
cp:用于复制文件。
mv:用于移动或重命名文件。
rm:用于删除文件。
touch:用于创建新文件或更新文件的时间戳。
mkdir:用于创建新的目录。
rmdir:用于删除空的目录。
find:用于查找文件。
grep:用于在文件中搜索指定的字符串。

这些命令均可以在 Linux 终端中使用,方便进行文件的管理操作。
此外,还有一些其他的文件操作命令,如 chmod、chown 等,它们可以用于修改文件的权限或所有者信息。


2、目录操作命令Linux 操作系统中常用的目录操作命令包括:

Linux 操作系统中常用的目录操作命令包括:

ls:用于显示目录的内容。
cd:用于切换当前工作目录。
mkdir:用于创建新的目录。
rmdir:用于删除空的目录。
pwd:用于显示当前工作目录的路径。
tree:用于显示目录结构。

这些命令均可以在 Linux 终端中使用,方便进行目录的管理操作。
此外,还有一些其他的目录操作命令,如 mv、cp 等,它们可以用于移动或复制目录。


3、文件的权限信息

文件的权限信息指的是文件所有者及其他用户对文件的操作权限。
Linux 系统中,文件的权限信息可以用数字和字母的组合来表示,一般由 3 个部分组成。
在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


!!!还不如一道题目来的干脆!!!

在这里插入图片描述


4、联机帮助

( man help who date pwd cd cp ls mkdir rmdir cat more less rm mv wc sort chmod touch find grep chown ps kill )
这些命令均为 Linux 系统中常用的命令。

1.【 man:用于显示命令的手册页。】

使用方法:
	man command
例如:
	man ls # 显示 ls 命令的手册页
2. 【help:用于显示命令的帮助信息。】

使用方法:
	help [command]
例如:
	help ls # 显示 ls 命令的帮助信息
	如果省略 command 参数,则会显示当前 shell 的帮助信息。
3. 【who:用于显示当前登录的用户信息。】

使用方法:
	who [options]
常用选项:
	-a:显示所有信息,包括用户登录时间、进程 ID 等。
例如:
	who # 显示当前登录的用户信息
	who -a # 显示所有信息
输出信息中,第一列表示用户名,第二列表示登录的设备名称,第三列表示登录时间,第四列表示进程 ID
(只有在使用 -a 选项时才会显示)
4. 【date:用于显示或设置系统时间。】

使用方法:
	date [options] [+format]
	常用选项:
	-d:显示指定日期。
	-s:设置系统时间。
例如:
	date # 显示当前系统时间
	date -d "2022-12-23 12:34:56" # 显示指定日期 2022-12-23 12:34:56 的时间
	date -s "2022-12-23 12:34:56" # 设置系统时间为 2022-12-23 12:34:56
注意:使用 -s 选项设置系统时间时,需要超级用户权限。
5. 【pwd:用于显示当前工作目录的路径。】

使用方法:
	pwd
例如:
	pwd # 显示当前工作目录的路径
	
注意:pwd 命令不带任何参数。
6. 【cd:用于切换当前工作目录。】

使用方法:
	cd [directory]
例如:
	cd /home/user # 切换到 /home/user 目录
	cd .. # 切换到上一级目录
	cd ~ # 切换到当前用户的主目录
注意:
	如果省略 directory 参数,cd 命令将会切换到当前用户的主目录。
7.【 cp:用于复制文件或目录。】

使用方法:
	cp [options] source destination
常用选项:
	-r:复制目录时,递归复制其子目录。
	-p:复制文件时,保留其原有的权限、时间戳等属性。
例如:
	cp file1.txt file2.txt # 复制文件 file1.txt 到文件 file2.txt
	cp -r dir1 dir2 # 复制目录 dir1 到目录 dir2,并递归复制其子目录
	cp -p file1.txt file2.txt # 复制文件 file1.txt 到文件 file2.txt,并保留其原有的权限、时间戳等属性
注意:
	如果目标文件已存在,使用 cp 命令将会覆盖该文件。
	如果希望在复制时保留原有文件,可以使用 cp -i 选项,在覆盖文件时会提示用户确认。
8. 【ls:用于显示目录的内容。】
 
使用方法:
	ls [options] [file...]
常用选项:
	【-l:以长格式显示文件信息。】
	-a:显示所有文件,包括以 . 开头的隐藏文件。
	-h:以人类可读的方式显示文件大小。
	-r:逆序显示文件。
例如:
	ls # 显示当前目录的内容
	ls -l # 以长格式显示当前目录的内容
	ls -a # 显示当前目录的所有文件
	ls -h # 以人类可读的方式显示当前目录的文件大小
	ls -r # 逆序显示当前目录的内容
	ls dir # 显示目录 dir 的内容 
9. 【mkdir:用于创建新的目录。】

使用方法:
	mkdir [options] directory
常用选项:
   【-p:如果指定的目录的父目录不存在,则同时创建父目录。】
	-m:设置目录的权限。
例如:
	mkdir dir # 创建名为 dir 的目录
	mkdir -p dir/subdir # 创建名为 dir/subdir 的目录,如果父目录 dir 不存在,则同时创建
	mkdir -m 755 dir # 创建名为 dir 的目录,并设置权限为 755
10. 【rmdir:用于删除空的目录。】

rmdir [options] directory
常用选项:
	-p:删除目录时,连同其父目录一起删除。
例如:
	rmdir dir # 删除空的目录 dir
	rmdir -p dir/subdir # 删除空的目录 subdir,并同时删除其父目录 dir

注意:
	使用 rmdir 命令删除目录时,该目录必须是空的,否则将会报错。
	如果要删除非空的目录,可以使用 rm -r 命令。
11. 【cat:用于显示文件内容。】

使用方法:
	cat [options] file
常用选项:
	-n:在每行开头显示行号。
	-E:在行末出现超过一个屏幕宽度的内容时,在行末显示 $。
例如:
	cat file.txt # 显示文件 file.txt 的内容
	cat -n file.txt # 显示文件 file.txt 的内容,并在每行开头显示行号
12.【more:用于分页显示文件内容。】

使用方法:
	more [options] file
常用选项:
-d:在输出底部显示提示信息。
-l:将所有行显示为一行。
例如:
	more file.txt # 分页显示文件 file.txt 的内容
	more -d file.txt # 分页显示文件 file.txt 的内容,并在输出底部显示提示信息

注意:more 命令相对于 less 命令来说功能较弱,不支持查找等功能。
13. 【less:用于分页显示文件内容。】

使用方法:
	less [options] file
常用选项:
	-E:在行末出现超过一个屏幕宽度的内容时,在行末显示 $。
	-N:在每行开头显示行号。
	-S:将连续多个空行压缩为一行。
例如:
	less file.txt # 分页显示文件 file.txt 的内容
	less -E file.txt # 分页显示文件 file.txt 的内容,并在行末显示 $
14. 【rm:用于删除文件。】

使用方法:
rm [options] file...
常用选项:
-f:强制删除,即不做任何询问就直接删除。
-i:在删除文件时询问用户确认。
-r:递归删除,即删除目录时将其中的所有文件和子目录一起删除。
例如:
rm file.txt # 删除文件 file.txt
rm -f file.txt # 强制删除文件 file.txt
rm -i file.txt # 删除文件 file.txt,并在删除时询问用户确认
rm -r dir # 递归删除目录 dir 及其中的文件和子目录
注意:rm 命令删除的文件不会进入回收站,删除后文件将无法恢复,请慎用。

需要注意的是,rm 命令默认不会删除目录,如果希望删除目录,需要使用 -r-R 选项。
15. 【mv:用于移动或重命名文件或目录。】

使用方法:
	mv [options] source destination
常用选项:
	-f:强制覆盖已存在的文件。
	-i:在覆盖文件时询问用户确认。
例如:
	mv file.txt dir/ # 将文件 file.txt 移动到目录 dir 中
	mv dir1 dir2 # 将目录 dir1 重命名为 dir2
	mv -i file1.txt file2.txt # 将文件 file1.txt 覆盖为 file2.txt,并在覆盖时询问用户确认
注意:
  使用 mv 命令移动或重命名文件或目录时,如果目标文件或目录已存在,默认情况下会覆盖已存在的文件或目录。
如果希望在覆盖文件时询问用户确认,可以使用 -i 选项。如果希望强制覆盖已存在的文件,可以使用 -f 选项。
16. 【wc:用于统计文件的字符数、单词数和行数。】

使用方法:
	wc [options] file...
常用选项:
	-c:统计字符数。
	-w:统计单词数。
	-l:统计行数。
例如:
	wc file.txt # 统计文件 file.txt 的字符数、单词数和行数
	wc -c file.txt # 统计文件 file.txt 的字符数
	wc -w file.txt # 统计文件 file.txt 的单词数
	wc -l file.txt # 统计文件 file.txt 的行数
注意:
  在使用 wc 命令时,可以同时指定多个文件,wc 命令会对每个文件分别统计信息。
  若不指定文件,则默认使用标准输入作为输入文件,在该情况下,可使用管道符(|)将其他命令的输出作为 wc 命令的输入
例如:
cat file.txt | wc # 统计文件 file.txt 的字符数、单词数和行数
17. 【sort:用于对文件中的行进行排序。】

使用方法:
sort [options] file...
常用选项:
-n:按照数值大小排序。
-r:倒序排列。
-k:指定排序的字段。
例如:
	sort file.txt # 对文件 file.txt 中的行进行升序排序
	sort -r file.txt # 对文件 file.txt 中的行进行倒序排序
	sort -k 2 file.txt # 对文件 file.txt 中的行按照第 2 列进行排序
注意:
  使用 sort 命令时,可以同时指定多个文件,sort 命令会将所有文件的行合并排序。
若不指定文件,则默认使用标准输入作为输入文件,在该情况下,可使用管道符(|)将其他命令的输出作为 sort 命令的输入
例如:
  还有一些其他的选项,如 -f 表示忽略大小写,-t 表示指定分隔符,-u 表示去除重复行等。
sort 命令默认情况下按照字典序排序,如果希望按照数值大小排序,可以使用 -n 选项。

cat file.txt | sort # 对文件 file.txt 中的行进行升序排序
18. 【chmod:用于修改文件的权限信息。】

使用方法:
	chmod [options] mode file...
其中,mode 指定新的权限信息,可以使用符号或数字表示。
常用选项:
	-R:递归修改,即对文件或目录的子目录中的文件也进行修改。
例如:【10个字符的意义】
	chmod 755 file.txt # 修改文件 file.txt 的权限为rwxr-xr-x
	chmod -R 755 dir # 递归修改目录dir 及其子目录中的文件的权限为rwxr-xr-x
	chmod 777 file.txt # 给文件 file.txt 所有者、用户组、其他用户都赋予读、写、执行权限
	chmod 755 file.txt # 给文件 file.txt 所有者赋予读、写、执行权限,用户组和其他用户赋予读、执行权限
	chmod 644 file.txt # 给文件 file.txt 所有者赋予读、写权限,用户组和其他用户赋予读权限

注意:
  在 Linux 系统中,文件的权限信息由 3 个部分组成,分别表示文件所有者、用户组、其他用户的权限。
每个部分分别包含 3 个权限位,分别表示读、写、执行权限。rwx
	# r:读权限,代表 4。
	# w:写权限,代表 2。
	# x:执行权限,代表 1。
在修改权限时,可以使用符号或数字表示。
19. 【touch:用于修改文件的时间戳或创建新文件。】

	touch 命令可以用于修改文件的时间戳,也可以用于创建新文件。
使用方法:
	touch [options] file...
常用选项:
	-a:修改文件的访问时间。
	-m:修改文件的修改时间。
	-c:不创建新文件,仅修改时间戳。
例如:
	touch file.txt # 修改文件 file.txt 的时间戳
	touch -c file.txt # 不创建新文件,仅修改文件 file.txt 的时间戳
	touch newfile.txt # 创建一个名为 newfile.txt 的新文件
注意:
	使用 touch 命令时,如果指定的文件不存在,则会创建新文件。如果文件已存在,则会修改其时间戳。
20. 【find:用于查找文件。】

	find 命令是一个用于查找文件的命令,可以查找指定目录下的文件,并按照指定的规则进行过滤。
使用方法:
	find path [options] [expression]
其中,path 指定要搜索的目录,options 指定搜索的规则,expression 指定过滤条件。
常用选项:
	-name:按照文件名查找。
	-type:按照文件类型查找。
	-size:按照文件大小查找。
例如:
	find . -name "*.txt" # 查找当前目录下所有名称以 ".txt" 结尾的文件
	find / -type f -size +100M # 查找根目录下大小超过 100MB 的文件
注意:
	find 命令可以通过使用表达式(expression)来进行精确的文件查找。
21. 【grep:用于在文件中查找指定的字符串。】

	grep 命令是一个强大的文本搜索工具,可以在文件中查找指定的字符串。
使用方法:
	grep [options] pattern [file...]
其中,pattern 指定要查找的字符串,file 指定要搜索的文件。
常用选项:
	-i:忽略大小写。
	-n:在输出结果中显示行号。
	-v:反转查找结果,输出不包含指定字符串的行。
	-c:仅输出包含指定字符串的行数。
例如:
	grep "hello" file.txt # 在文件 file.txt 中查找包含 "hello" 的行
	grep -i "hello" file.txt # 忽略大小写,在文件 file.txt 中查找包含 "hello" 的行
	grep -v "hello" file.txt # 在文件 file.txt 中查找不包含 "hello" 的行
注意:
  使用 grep 命令时,可以同时指定多个文件,grep 命令会在所有文件中查找指定的字符串。
如果不指定文件,则默认使用标准输入作为输入文件,在这种情况下,可以使用管道符(|)将其他命令的输出作为 grep 命令的输入,例如:

	cat file.txt | grep "hello" # 在文件 file.txt 中查找包含 "hello" 的行
22. 【chown:用于修改文件所有者。】

	chown 命令用于修改文件或目录的所有者。
使用方法:
	chown [-R] owner[:group] file...
其中,-R 选项表示递归修改,即对文件或目录的子目录中的文件也进行修改。
例如:
	chown user file.txt # 修改文件 file.txt 的所有者为 user
	chown -R user dir # 递归修改目录 dir 及其子目录中的文件的所有者为 user
注意:
	在修改文件所有者时,必须具有足够的权限才能执行操作。
	通常情况下,只有文件的所有者或者超级用户(root)才能修改文件的所有者。
23. 【ps:用于显示当前系统的进程信息】

	ps 命令是用于显示当前系统的进程信息的命令,其中进程信息包括进程的 PID(进程 ID)、进程的名称、进程的所有者、进程的状态等。
使用方法:
	ps [options]
常用选项:
	-e:显示所有进程的信息。
	-f:显示完整信息,包括进程的父进程、进程所在组等。
	-u:显示指定用户的进程信息。
	-p:显示指定进程的信息。
例如:
	ps -ef # 显示所有进程的信息
	ps -u user # 显示指定用户的进程信息
	ps -p 12345 # 显示 PID 为 12345 的进程信息
此外,ps 命令还有许多其他选项,可以根据需要使用。
例如
	可以使用 -l 选项显示详细的进程信息,包括进程的虚拟内存使用情况、进程的 CPU 使用时间等。
	还可以使用 -o 选项指定输出的信息格式,以便精确定位需要的信息。
24. 【kill:用于终止进程。】
	kill 命令可以终止指定的进程,其中,参数 -9 强制终止进程,而不管进程的状态。
使用方法:
	kill [-s signal | -p] [-a] [-q] [-l] [-v] [-signal] pid...
例如:
	kill -9 12345 # 终止 PID 为 12345 的进程
注意:
	使用 kill 命令终止进程时,应谨慎操作。
	如果强制终止的进程是系统的关键进程,可能会导致系统不稳定甚至崩溃。
	此外,使用 kill 命令时,需要注意进程的权限问题,只有进程的所有者或 root 用户才能终止进程。

5、输入/输出重定向(> / >> / < / |)

1. 输出重定向(>):用于将命令的输出结果重定向到文件中。

使用方法:

command > file

例如:
  ls > file.txt # 将 ls 命令的输出结果重定向到文件 file.txt 中
注意:
	如果文件已经存在,使用 > 重定向将会覆盖该文件的原有内容。

2. 输出重定向(>>):用于将命令的输出结果追加(≠覆盖)到文件的末尾。

使用方法:
command >> file

例如:
	ls >> file.txt # 将 ls 命令的输出结果追加到文件 file.txt 的末尾
注意:
	如果文件不存在,使用 >> 重定向将会创建该文件。

3. 输入重定向(<):用于将文件的内容作为命令的输入。

使用方法:
	command < file
例如:
	sort < file.txt # 将文件 file.txt 的内容作为 sort 命令的输入
注意:
	输入重定向不能与管道符结合使用。

4. 管道符(|):用于将一个命令的输出结果作为另一个命令的输入。

使用方法:
command1 | command2

例如:
	ls | grep "pattern" # 将 ls 命令的输出结果作为 grep 命令的输入,查找包含 "pattern" 的行

注意:
	管道符可以连接多个命令,形成命令链。
例如:
	ls | grep "pattern" | sort 
	#将 ls 命令的输出结果作为 grep 命令的输入,查找包含 "pattern" 的行,
	#再将 grep 命令的输出结果作为 sort 命令的输入,对结果进行排序。

6、vi基本用法

vi 是一种功能强大的文本编辑器,在 Linux 系统中广泛使用。vi 命令可以在命令行下使用,也可以作为其他命令的编辑器使用。

vi 的常用命令如下:

进入 vi 编辑器:vi [filename]
保存文件::w
退出 vi 编辑器::q
退出并保存::wq
强制退出::q!
撤销上一次操作:u
删除一个字符:x
删除一行:dd
复制一行:yy
粘贴一行:p
查找字符串:/pattern

vi 主要有两种模式:命令模式输入模式

  1. 进入 vi 编辑器后,默认处于命令模式。在命令模式下,你可以输入各种命令来操作文本。
  2. 如果要输入文本,需要先按下i 键进入输入模式,然后输入文本。输入完文本后,按下 Esc 键退回命令模式。

7、GCC编译命令【要掌握分步到位 下面那4个】

GCC(GNU Compiler Collection)是一组开源的编译器,用于编译 C、C++、Objective-C、Fortran、Ada 等语言。GCC 可以在 Linux 系统中通过命令行使用,也可以作为其他开发工具的编译器使用。

GCC 编译命令的基本格式如下:

gcc [options] source_files -o output_file

其中,source_files 指定要编译的源文件,output_file 指定编译后生成的目标文件的名称。options 指定编译选项,常用的编译选项如下:
-c:仅编译源文件,不链接。
-o:指定编译后生成的目标文件的名称。
-I:指定头文件的搜索目录。
-L:指定库文件的搜索目录。
-l:指定需要链接的库文件。

例如,要编译文件 main.c 并生成可执行文件 main,可以使用如下命令:(一步到位

gcc main.c -o main

例如,分步到位

gcc 编译过程 想看更详细的 参考这个链接

hello.chello(或 a.out)文件, 必须历经 hello.ihello.shello.o,最后才得到 hello(或a.out)文件,分别对应着预处理编译汇编链接 4 个步骤,
这 4 步大致的工作内容如下:

在这里插入图片描述


  1. 预处理, C 编译器对各种预处理命令进行处理,包括头文件包含、宏定义的扩展、条件编译的选择等;
gcc -E hello.c -o hello.i
  1. 编译,将预处理得到的源代码文件,进行“翻译转换”,产生出机器语言的目标程序,得到机器语言的汇编文件;
gcc -S hello.i -o hello.s
  1. 汇编,将汇编代码翻译成了机器码,但是还不可以运行;
gcc -C hello.s -o hello.o 
  1. 链接,处理可重定位文件,把各种符号引用和符号定义转换成为可执行文件中
    的合适信息,通常是虚拟地址。
gcc hello.o -o hello(或 a.out)

a.out 是 gcc 默认输出文件名称,可以通过-o 参数指定新的文件名。例如加上“-o hello”


8、Makefile【复习一下之前的实验】-【书本P311 题目可能会给一张依赖树的图,让我们写出Makefile 或者是 给Makefile 来画依赖书(就是考它们的转换嘛)】

Makefile 是一种描述如何编译和链接源文件的文本文件。
使用 Makefile 可以自动管理编译过程中的依赖关系,只有当源文件发生变化时才会重新编译

Makefile 的常见语法如下:

目标文件:依赖文件
命令

其中,目标文件是要生成的文件,依赖文件是用来生成目标文件的文件,命令是用来生成目标文件的命令。

举个例子:

Makefile test for exam program
#written by Emdoor
matexam mat.o exam.o main.o
	gcc mat.o exam.o main.o -o matexam
	
mat.o mat.h mat.c
	gcc -c mat.c -o mat.o
	
exam.o mat.h exam.h exam.c
	gcc -c exam.c -o exam.o
	
main.o mat.h exam.h main.c
	gcc -c main.c -o main.o

在这个例子中,matexam 是目标文件, mat.o exam.o main.o 是依赖文件,gcc 命令是用来生成目标文件的命令。
要使用 Makefile 编译程序,需要使用 make 命令。
例如:

make matexam

这条命令会检查 matexam 目标文件的依赖文件,如果有文件发生了变化,就会重新编译并生成新的目标文件。
Makefile 还有一些其他的常见用法:

  • 变量定义:在 Makefile 中可以定义变量,例如 CC=gcc 表示定义了一个 CC 变量,值为 gcc。在命令中可以使用 $(CC) 来代替变量的值。

  • 隐含规则:Makefile 中可以使用一些预定义的隐含规则,例如 .c.o 表示所有 .c 文件可以通过编译成 .o 文件。

  • 模式规则:Makefile 中可以使用模式规则来匹配多个文件,例如 %.o: %.c 表示所有 .c 文件可以通过编译成 .o 文件。

Makefile 可以让我们更方便地管理编译过程,避免手动执行多条命令的麻烦。它是许多软件项目中常用的工具之一。


9、操作系统的主要功能【书本P3】

操作系统的主要功能包括:

  • CPU管理、 存储管理、 文件管理、设备管理、 用户接口

10、进程的概念【重要】【书本P70】

进程是一个可并发执行的程序在一个数据集上的一次运行。简单地说,进程就是程序的一次运行过程。
进程是计算机中的程序的一次执行过程。在Linux系统中,每个进程都有一个唯一的进程 ID,每个进程都占用一定的系统资源,包括内存、文件描述符、信号处理程序等。进程可以通过系统调用 fork() 创建子进程,也可以通过 exec() 函数执行新的程序。进程可以通过信号互相通信,也可以通过管道或共享内存进行通信。


11、引入进程的意义【书本P68】

进程是现代操作系统的核心概念,它用来描述程序的执行过程,是实现多任务操作系统的基础。


12、进程管理的功能

进程管理是操作系统的一个重要功能,它负责创建、销毁、调度和管理进程。
具体功能包括:

  1. 创建进程:操作系统负责创建新的进程,包括分配进程所需的资源、设置进程的状态、分配进程的优先级等。
  2. 销毁进程:操作系统负责销毁不再需要的进程,释放进程占用的资源。
  3. 调度进程:操作系统负责决定哪个进程能够获得处理器的使用权,以便尽快完成任务。
  4. 管理进程:操作系统负责管理进程的资源,包括分配内存、分配输入/输出设备等。

进程管理的功能使得计算机能够有效地执行多个任务,同时还可以保证资源的合理利用,提高计算机的效率。


13、程序顺序执行的特点【书本P68】

在这里插入图片描述


14、程序并发执行的特点【书本P68】

在这里插入图片描述
在这里插入图片描述


15、进程的基本状态及转换

有两种 分别是 经典的3种Linux下的5种

经典的3种【书本P71】

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Linux下的5种【书本P72】

在这里插入图片描述


16、进程控制块(PCB)的概念、作用【P71】

在这里插入图片描述

17、PCB主要包括4方面的内容【书本P72】

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RCEdrp9W-1672584903430)(null)]
——————

18、Linux查看进程、关闭进程的命令【P74】

查看进程:
ps 命令 — 查看当前运行的进程
例如:

ps aux #这条命令会列出当前系统中所有进程的信息。

关闭进程:
要关闭进程,可以使用 kill 命令。例如,要关闭进程 ID 为 12345 的进程,可以使用:

kill 12345  #这条命令会向进程发送信号,要求进程终止。

注意,如果进程不响应信号或者不能被终止,可以使用 kill -9 强制终止进程。


19、Linux系统的内核主要由4部分构成【书本P76】

  1. 系统调用接口
  2. 进程管理子系统
  3. 文件与I/O子系统
  4. 硬件控制接口
    在这里插入图片描述

20、fork()、exec() 系统函数的作用【书本P82、P83】

fork() 系统函数的作用是创建一个新的进程。
这个新的进程会拷贝调用 fork() 函数的进程的状态,然后从 fork() 函数的调用处开始执行。
fork() 函数会返回两次,一次在父进程中,一次在子进程中。(调用1次,返回2次)
在父进程中,fork() 函数返回子进程的进程号;在子进程中,fork() 函数返回0。

exec() 系统函数的作用是将参数中指定的程序代替当前进程执行。
这意味着,原来的进程会被销毁,替换成新的进程。
这个新的进程会从 exec() 函数的调用处开始执行。

在常用的操作系统中,fork() 和 exec() 经常被结合使用,以创建一个新的进程并加载新的程序执行。


21、Linux系统的内核主要构成

Linux系统的内核主要由四部分构成:

  1. 内核核心(Kernel Core):提供了系统调用、内存管理、进程管理、文件系统等基本功能。
  2. 核心态服务(Core Services):提供了驱动程序框架、网络协议栈、安全模块等服务。
  3. 内核态服务(Kernel Services):提供了常用的库函数、调试工具、系统信息获取等服务。
  4. 用户态服务(User Services):提供了应用程序所需的接口,如 C 库函数、图形界面库等。

22、CPU的执行模式【书本P77】

CPU执行模式是指 CPU 在执行程序时的工作方式。

在这里插入图片描述


23、原语与普通函数的区别【老师给的pdf P86】

什么是原语?

原语是操作系统内核提供的特殊函数,它们是操作系统的基本功能,是操作系统的核心。原语通常在内核态运行,用于完成底层的操作,如内存管理、进程管理、文件系统等。

什么是普通函数?

普通函数是用户程序中定义的函数,它们是用户程序的基本功能,是用户程序的核心。普通函数通常在用户态运行,用于完成应用程序的功能,如计算、输入输出等。

区别

原语与普通函数的区别主要在于它们的运行环境和功能范围不同。原语是操作系统的核心,在内核态运行,用于完成底层的操作。而普通函数是用户程序的核心,在用户态运行,用于完成应用程序的功能。

书本上写的是

在这里插入图片描述


在这里插入图片描述
在这里插入图片描述


24、进程调度的功能【不只是功能,还要关注调度的时机,复习的时候要与前面讲的“进程的状态转换”联系起来】

书本上的内容【老师给的PDF P94】

在这里插入图片描述


25、常用的进程调度算法及其特点【书本P90】

在这里插入图片描述
特点:

  1. 先来先出法(First-Come, First-Served,FCFS)
    优点:简单,易于实现。
    缺点:不能有效地利用处理器的时间,对于长作业会带来较长的等待时间。

  2. 短进程优先(Shortest Job First,SJF)
    优点:能够提高处理器的利用率。
    缺点:需要对每个进程的执行时间进行预估,实际运行时间可能会与预估值有差异。

  3. 优先级调度法(Priority Scheduling)
    优点:能够支持优先级的设置,提高重要进程的执行效率。
    缺点:可能会导致高优先级的进程无法执行。

  4. 时机片轮转法(Round Robin)
    优点:能够公平地分配处理器的使用权。
    缺点:会导致系统的开销增加,因为每个进程都需要保存自己的运行状态。


26、临界资源、临界区的概念【书本P99】

在这里插入图片描述


27、进程互斥、进程同步的概念【书本4.6节】

进程互斥(Mutual Exclusion,简称 Mutex)是指在多个进程之间,同一时间只有一个进程能够访问共享资源。这种机制可以保证在多进程环境下,共享资源不会被多个进程同时访问。

进程同步(Synchronization)是指在多个进程之间,通过一些机制来协调进程的执行,使得进程的执行满足特定的关系。进程同步可以帮助解决进程之间的协作问题,如协作进程之间的数据传递、信号量的管理等。


28、信号量与P、V操作【主要是针对信号量、考试会考,让我们选择对哪个信号量进行P、V操作(进出公园做登记的例子)】

什么是信号量?

信号量(Semaphore)是一种用于进程间同步的数据结构,可以在多个进程之间共享。信号量有一个计数器,表示当前可用的资源数量。

什么是P和V操作?

P(Proberen)操作:进程请求一个资源。如果当前有足够的资源,则计数器减一,进程可以访问资源;如果当前没有足够的资源,则进程进入等待状态,直到有足够的资源为止。

V(Verhogen)操作:进程释放一个资源。计数器加一,如果有进程正在等待该资源,则从等待队列中取出一个进程,让它访问资源。

信号量的P、V操作可以用于进程间的同步和互斥,保证在多个进程之间共享资源时的正确性。


29、进程的通信方式【书本P104】

在这里插入图片描述


30、生产者和消费者-进程同步【书本P101(读写缓冲区)】

生产者和消费者是一种常见的进程同步模型,表示有一个生产者进程生产物品,有一个消费者进程消费物品。这两个进程之间的同步是为了保证物品的生产和消费的正确性

常见的解决方案是使用缓冲区(Buffer)来存储物品。

生产者进程生产的物品放入缓冲区,消费者进程从缓冲区中取出物品消费。
当缓冲区为空时,消费者进程需要等待;当缓冲区满时,生产者进程需要等待。

为了保证同步的正确性,可以使用信号量或互斥锁(Mutex)进行控制。
例如:

可以使用一个信号量表示缓冲区的可用空间,在生产者进程生产物品时进行P操作,在消费者进程消费物品时进行V操作;
或者使用互斥锁保护缓冲区的访问,在生产者进程和消费者进程访问缓冲区时进行加锁和解锁操作。

这种方案可以保证缓冲区在生产者进程和消费者进程之间的正确访问,从而保证物品的生产和消费的正确性。

但是,这种方案的缺点是存在等待的情况,如果生产者进程生产速度较慢或消费者进程消费速度较慢,会导致其他进程的等待,降低系统的效率
为了提高系统的效率,可以使用其他的解决方案,例如条件变量(Condition Variable)或消息队列。


31、停车场-进程的互斥(这不还是进出公园登记嘛)

停车场是一种常见的进程同步模型,表示有多辆车需要停放在停车场内,每辆车对应一个进程。停车场的容量有限,只能容纳一定数量的车辆。因此,当停车场满时,新的车辆进程需要等待;当停车场空时,车辆进程需要等待。

停车场进程的互斥是指在多个车辆进入和离开停车场时,需要保证车辆的正确性和安全性。

一种常见的方案是使用互斥锁(Mutex)进行控制。

当车辆进入停车场时,需要加锁;当车辆离开停车场时,需要解锁。这样可以保证在任意时刻,只有一辆车可以进入或离开停车场。

此外,还可以使用信号量(Semaphore)进行控制。

可以使用一个信号量表示停车场的剩余车位数量,在车辆进入停车场时进行P操作,在车辆离开停车场时进行V操作。这样可以保证在任意时刻,停车场的车位数量是正确的。

需要注意的是,在使用信号量或互斥锁时,需要考虑同步的正确性和效率,避免出现死锁或活锁的情况。


32、死锁产出的原因及解决措施【书本P103】

在这里插入图片描述

死锁产生的原因通常有以下几个方面:

在这里插入图片描述
在这里插入图片描述

解决死锁的常见方法有:

在这里插入图片描述


二、简答题

1、什么是操作系统?

操作系统(Operating System,简称 OS)是计算机系统的核心部分,负责管理和控制计算机系统的硬件资源(如 CPU、内存、磁盘等)和软件资源(如程序、数据等),同时提供用户与计算机系统之间的接口。


2、进程调度的功能是什么,调度工作包含哪些内容?

进程调度是操作系统的一项核心功能,负责管理和调度计算机系统中的进程,以确保系统的有效运行。

具体来说,进程调度的功能包括:

  1. 调度进程的执行:进程调度负责决定哪个进程应该获得 CPU 的使用权,以便运行。
  2. 切换进程的执行:当进程获得 CPU 的使用权后,它会一直运行直到执行完毕或者被挂起。进程调度负责切换进程的执行,使得系统能够同时执行多个进程。
  3. 管理进程的状态:进程可以处于不同的状态,如就绪、运行、挂程。
  4. 管理进程的状态:进程可以处于不同的状态,如就绪、运行、挂起等。进程调度负责管理进程的状态,并决定下一个要调度的进程。
  5. 维护进程的优先级:进程可以有不同的优先级,优先级越高的进程越有可能获得 CPU 的使用权。进程调度负责维护进程的优先级,以决定下一个要调度的进程。

调度工作包括以上几项内容,主要是负责确定哪些进程应该获得 CPU 的使用权,以及如何切换进程的执行。


3、操作系统为什么要引入进程概念,进程管理的功能是什么?

操作系统引入进程概念是为了更好地管理和控制计算机系统的资源。进程是操作系统中资源分配和调度的基本单位,它把计算机系统中的程序和数据封装起来,方便进行调度和管理。

进程管理的功能包括:

  1. 创建和销毁进程:操作系统要能够创建和销毁进程,以满足用户的需求。管理进程的状态:操作系统要能够维护进程的状态,并能够根据进程的状态决定下一步的操作。
  2. 切换进程的执行:操作系统要能够切换进程的执行,使得系统能够同时执行多个进程。
  3. 维护进程的优先级:操作系统要能够维护进程的优先级,以便根据优先级决定调度的顺序。

此外,进程管理还包括其他功能,如进程通信、同步和互斥等。


4、目前操作系统采用的目录结构是什么?它具有什么优点?

**目前操作系统中常用的目录结构是树形目录结构。**树形目录结构是把目录组织成一个树状结构,根目录是树的根节点,其他目录是根目录的子目录,每个目录可以有若干子目录,形成一个多层的树状结构。

树形目录结构具有如下优点:

  1. 方便文件组织和管理:树形目录结构把文件和目录组织成一个多层的树状结构,方便用户组织和管理文件。
  2. 方便文件查找:树形目录结构把文件和目录组织成一个层次关系,可以通过层次关系来快速查找文件。
  3. 有利于跨平台兼容:树形目录结构是目前比较流行的目录结构,跨平台兼容性好,可以在不同的操作系统中使用。

5、CPU两种工作状态, 为何要区分CPU的两种工作状态?

CPU有两种工作状态,分别是用户态和内核态。

  • 用户态:用户态是 CPU 为应用程序服务的状态。在用户态下,CPU 可以执行用户程序的指令,但是不能直接访问系统的硬件资源,必须通过系统调用来访问。
  • 内核态:内核态是 CPU 为操作系统服务的状态。在内核态下,CPU 可以直接访问系统的硬件资源,也可以执行操作系统的指令。

为什么要区分 CPU 的两种工作状态呢?

这是因为,在用户态下,CPU 只能访问用户程序的指令,不能访问系统的硬件资源,这样可以防止应用程序直接访问系统的硬件资源,从而保证系统的安全性。而在内核态下,CPU 可以访问系统的硬件资源,因此可以执行操作系统的指令,比如访问硬盘、执行中断处理等。通过这种方式,操作系统可以控制系统的资源,保证系统的正常运行。


6、简述Linux系统支持的5种进程通信机制

Linux系统支持五种进程间通信机制,分别是:

  1. 管道(Pipe):管道是一种半双工通信机制,可以在两个相互关联的进程之间进行通信。管道分为有名管道和无名管道。有名管道是在文件系统中的一个文件,可以被所有进程访问,可以实现跨进程间的通信。无名管道是在内存中的一个缓冲区,只能被进程组内的进程访问,只能实现同进程组内进程间的通信。
  2. 信号量(Semaphore):信号量是一种整型变量,用于控制多个进程对共享资源的访问。信号量可以用于实现互斥和同步。
  3. 共享内存(Shared Memory):共享内存是一段内存区域,可以被多个进程共同访问。共享内存可以用于实现高效的进程间通信。
  4. 消息队列(Message Queue):消息队列是一种异步通信机制,可以在不同进程之间传递消息。消息队列由消息发送进程和消息接收进程组成,消息发送进程向消息队列中写入消息,消息接收进程从消息队列中读取消息。
  5. 套接字(Socket):套接字是一种通信机制,可以在不同计算机之间进行通信。套接字可以用于实现跨计算机的进程间通信。

7、什么是绝对路径与相对路径,若要由/usr/share/doc进入到/usr/share/man写出相对路径与绝对路径所用的命令

  • 绝对路径(Absolute Path)是一种描述文件在文件系统中的位置的路径,从文件系统的根目录开始描述,一直到文件或目录所在的位置。例如:/usr/share/doc。

  • 相对路径(Relative Path)是一种描述文件在文件系统中的位置的路径,相对于当前目录描述文件或目录的位置。例如,在/usr/share/doc目录下,要访问/usr/share/man目录,可以使用相对路径 …/man。

若要由/usr/share/doc进入到/usr/share/man 可以使用两种方式

使用绝对路径:cd /usr/share/man
使用相对路径:cd ../man

注意:在 Linux 系统中,路径分隔符是"/“,不要和 Windows 系统中的”"混淆。【嘻嘻可以这么记,Linux和Windows两个在爬滑题,Linux从左往上爬,所以是/,Windows从右往上爬,所以就 \
此外,"."表示当前目录,".."表示上一级目录。"~"表示用户目录下。例如,在/usr/share/doc目录下,要访问/usr/share/doc目录中的文件file.txt,可以使用相对路径 .(当前目录)/file.txt。


8、简述常用的4种进程调度算法,并说明它们各自的优缺点

常用的进程调度算法有四种,分别是先来先服务调度算法(FCFS)、最短进程优先调度算法(SJF)、高响应比优先调度算法(HRRN)和时间片轮转调度算法(RR)。

  1. 先来先服务调度算法(FCFS):最简单的进程调度算法之一,它的原则是按照进程到达的先后顺序,依次调度进程的执行。

优点:实现简单
缺点:不能有效利用 CPU,可能会导致等待时间长的进程饥饿


  1. 最短进程优先调度算法(SJF):根据进程的服务时间(即进程所需的 CPU 时间)来调度进程的执行,优先调度服务时间短的进程。

优点:能有效利用 CPU,减少等待时间,
缺点:不能充分考虑进程的等待时间,可能会导致长期等待的进程被忽略。


  1. 高响应比优先调度算法(HRRN):是一种兼顾进程的等待时间和服务时间的调度算法,它计算每个进程的响应比(Response Ratio),将响应比最高的进程优先调度。响应比 = (当前时间 - 进程到达时间 + 进程服务时间) / 进程服务时间。

优点:能有效利用 CPU,减少等待时间,同时也能充分考虑进程的等待时间
缺点:需要计算每个进程的响应比,实现较为复杂。


  1. 时间片轮转调度算法(RR):是一种多级反馈调度算法,它将所有就绪进程放在一个等待队列中,每个进程按照轮转的方式依次调度执行。

优点:是能有效利用 CPU,减少等待时间,同时也能充分考虑进程的等待时间,
缺点:需要设置时间片,如果时间片过小,会导致调度次数增加,影响系统效率;如果时间片过大,会导致短作业等待时间增加,影响系统公平性。


9、画Linux系统的进程状态转换图,并注明各种状态转换的条件【画图的时候要注明清楚 状态 和 转换时间】

(也可以看书上的,比较少,但它实际上是有这么多状态的)
在这里插入图片描述

图中的状态如下:

  1. 创建(Creating):进程刚刚被创建,正在准备执行的状态。
  2. 就绪(Ready):进程已经准备好执行,等待获得 CPU 资源的状态。
  3. 运行(Running):进程正在运行,正在占用 CPU 执行任务的状态。
  4. 暂停(Stopped):进程被暂停执行,等待获得信号后恢复运行的状态。
  5. 僵尸(Zombie):进程已经结束执行,但是其父进程还未回收其资源的状态。
  6. 等待(Waiting):进程处于等待状态,等待其他资源(如 I/O 设备)或事件(如信号)的状态。
  7. 终止(Terminated):进程已经结束执行,其所有资源已经被回收的状态。

状态转换的条件如下:

  1. 创建 转 就绪:当一个新的进程被创建时,它会进入就绪态。
  2. 运行 转 等待:进程执行 I/O 操作或等待信号时会进入 等待状态。
  3. 等待 转 就绪:进程等待的资源或事件已经就绪,进入 就绪状态 等待调度。
  4. 就绪 转 运行:进程被调度器选中,获得 CPU 资源执行任务。
  5. 运行 转 就绪:当前运行的进程的时间片到了。
  6. 运行 转 僵尸:当进程的执行完成时,或者遇到某些异常情况导致进程退出时。(资源未被收回)
  7. 运行 转 终止:进程收到 STOP 信号时会进入 停止状态(资源被收回)
  8. 运行 转 暂停:暂停态是指进程被暂停执行,等待获得信号后恢复 运行状态。
  9. 暂停 转 运行:进程的输入输出设备完成操作、其它进程(正在运行的且优先级较高的进程)操作完成、互斥锁可用。

10、简述引发进程调度的4种时机

进程调度的时机通常有以下四种:

  1. 进程执行完毕:进程执行完毕后,系统需要调度其他进程执行。
  2. 进程申请 I/O 设备:当进程申请 I/O 设备时,系统会将其置为等待状态,并调度其他进程执行。
  3. 进程申请系统资源:当进程申请系统资源时,如果资源不足,则进程会被阻塞,系统需要调度其他进程执行。
  4. 进程收到信号:当进程收到信号时,系统可能需要调度其他进程执行
    其实还有一个:
  5. 时间片到期:在时间片轮转调度算法中,当进程使用完规定的时间片后,系统需要调度其他进程执行。

11、进程间的制约关系

进程间的制约关系


12、进程与程序是两个完全不同的概念,但又有密切的联系,试写出两者的联系与区别。【书本P70】

在这里插入图片描述


13、PCB的作用??为什么说PCB是进程存在的唯一标志?【书本P71】

PCB(Process Control Block)是操作系统中用于管理进程的数据结构。它是进程在操作系统内部存在的唯一标志,记录了进程的各种信息,包括进程的状态、优先级、资源占用情况等。

PCB 的作用包括:

  1. 管理进程:PCB 记录了进程的各种信息,操作系统可以通过 PCB 来管理进程的执行状态、优先级、资源占用情况等。
  2. 调度进程:PCB 中记录了进程的优先级等信息,操作系统可以根据这些信息来调度进程。
  3. 维护进程的上下文:PCB 中记录了进程的上下文信息,包括进程的寄存器、堆栈、内存映像等。当进程被挂起或恢复时,操作系统可以通过 PCB 中的信息来维护进程的上下文。
  4. PCB 是进程在操作系统内部存在的唯一标志,因为它记录了进程的各种信息,并且操作系统只能通过 PCB 来管理和调度进程。如果没有 PCB,操作系统就无法区分不同的进程,也无法管理和调度进程。

此外,PCB 还可以用于进程间通信和同步,例如操作系统可以通过 PCB 中的信号量、信号处理函数等机制来实现进程间的通信和同步。


14、什么是临界区?进程进入临界区的调度原则是什么?

临界区(Critical Section)是指在多进程环境下,对共享资源进行访问时,为了保证数据的正确性和完整性,必须保证同时只能有一个进程进入的区域。临界区内的代码通常称为临界代码。

进程进入临界区的调度原则是:

  1. 互斥原则:同时只能有一个进程进入临界区。
  2. 请求与保持原则:当进程请求进入临界区时,必须先满足其他进程已经退出临界区的条件。
  3. 循环等待原则:进程在等待进入临界区时,不能占用 CPU,应该被挂起,以避免系统进入死锁状态。

15、简述使用信号量进行进程间通信

信号量是一种常用的进程间通信机制,可以用来实现进程间的同步和互斥。
简述:

  1. 在使用信号量进行进程间通信时,需要初始化一个信号量变量,并设置一个初始值。每个进程在访问共享资源前,都需要获取信号量,如果信号量的值大于 0,则进程可以访问共享资源,并将信号量的值减 1;如果信号量的值等于 0,则进程需要等待,直到信号量的值大于 0 为止。在访问完共享资源后,进程需要释放信号量,将信号量的值加 1。
  2. 信号量的值代表了共享资源的剩余数量,通过信号量的获取和释放来实现进程间的同步和互斥。信号量可以用于解决多进程间共享资源的竞争问题,避免出现数据不一致的现象。
  3. 此外,信号量还可以用来实现进程间的消息传递。一个进程可以在获取信号量之前向另一个进程发送消息,另一个进程在获取信号量时就可以收到消息。这种方式可以用来实现进程间的简单通信。
  4. 总之,信号量是一种常用的进程间通信机制,可以用来实现进程间的同步和互斥,也可以用来实现进程间的消息传递。

16、在单处理机环境下,进程间有哪几种通信方式,是如何实现的

在单处理机环境下,进程间通常有以下几种通信方式:

  1. 共享内存:多个进程共享一段内存区域,通过对内存区域的读写来实现通信。共享内存是一种快速的通信方式,但是需要使用互斥机制(如互斥锁)来保护共享内存区域,避免多个进程同时对内存进行修改,从而引起数据不一致的问题。
  2. 消息队列:进程间通过消息队列进行通信,消息队列是一个先进先出的数据结构,用于存储进程间发送的消息。进程可以通过读写消息队列来实现通信。消息队列通常使用互斥机制来保护,避免多个进程同时对消息队列进行读写。
  3. 信号量:进程间通过信号量进行通信,信号量是一种常用的进程间同步机制,可以用来实现进程间的互斥和同步。信号量的值代表了共享资源的剩余数量,进程在访问共享资源前,需要获取信号量;在访问完共享资源后,需要释放信号量。
  4. 管道:进程间通过管道进行通信,管道是一种半双工的通信方式,只能在一个进程写入管道时,另一个进程才能从管道中读取数据。管道通常用于进程间的父子关系,父进程可以通过管道向子进程传递数据,子进程可以通过管道向父进程返回数据。
  5. 信号:进程间通过信号进行通信,信号是一种异步的通信方式,可以用来在进程间传递简单的消息或者通知。进程可以通过向另一个进程发送信号来实现通信,也可以通过设置信号处理函数来响应信号。

三、应用题

以老师复习课上讲过的内容整理的

  1. shell编程
  2. 进程PV编程
  3. C语言编程【附录里有,但会结合PV操作】
停车场计数用到1个信号量
生产者消费者用到2个信号量
  1. Makefile编写【实验里的】

1、生产消费(P、V)(书上图4-16、4-17)

本次考试的P、V操作不会展开写,只要在需要的地方写上P、或V 就行了(比较简单)
若是要写,体会是会给出详细的代码【关键是 要清楚 实际上是要对哪个信号量进行P、V操作(重点关注)】
在这里插入图片描述

参考代码:

int full = 0;
int empy = 100;
int mutex = 1;

(2)游客进入公园的程序片段
void *visitor_enter(void *arg)
{
	while (1)
	{
		P(empy);  // 等待信号量empy,表示公园有空位
	    P(mutex);// 使用互斥锁保护登记表
	    // 登记游客
	    // ...
	    V(mutex);// 登记完成,释放互斥锁
	    V(full);// 增加信号量full,表示公园的人数增加
	}
}

(3)游客离开公园的程序片段

void *visitor_leave(void *arg)
{
	while (1)
	{
		P(full);// 等待信号量full,表示公园有人
	    P(mutex);// 使用互斥锁保护登记表
	    // 去掉游客的登记
	    // ...
	    V(mutex);// 去掉登记完成,释放互斥锁
	    V(empy);// 增加信号量empy,表示公园的空位数增加
	}
}

其中P(sem)V(sem)分别表示获取信号量sem释放信号量sem的操作。

  1. 上述程序片段中,使用信号量empyfull控制游客进入和离开的次数,使用互斥信号量mutex保护登记表的访问,避免多个游客同时对登记表进行操作。
  2. 在游客进入公园时,使用P(empy)操作,将empy信号量的值减1,表示公园中少了一个空位。如果empy信号量的值为0,则表示公园已经满员,游客需要等待。
  3. 在游客离开公园时,使用V(full)操作,将full信号量的值加1,表示公园中多了一个空位。如果有游客在等待进入公园,则会恢复执行。
  4. 使用互斥信号量mutex保护登记表的访问,避免多个游客同时对登记表进行操作。在访问登记表前,需要使用P(mutex)操作获取互斥信号量,在访问结束后,使用V(mutex)进行释放。这样可以保证同一时刻只有一个游客能够访问登记表,避免产生冲突。

此外,这段程序片段还使用了条件变量来控制游客的进出。
当公园已满时,游客需要等待,直到有空位才能进入。同样的,当公园空余位置为0时,游客也需要等待,直到有空位才能离开。

总之,这段程序片段使用了信号量和互斥信号量来控制游客的进出和对登记表的访问,使用条件变量来控制游客的等待和唤醒。这些机制的作用是保证在多线程环境下,登记表的访问和公园的进出是安全的。


2、停车场计数器(P、V)(书上图4-14、4-15)

【其实就是进出公园做登记那个 一样的】


3、Fork()编程(书上图4-10,4-11,4-12)【书本上的例题要再复习一下】


书上的4-10

在这里插入图片描述


书上的4-11

在这里插入图片描述
在这里插入图片描述


书上的4-12

在这里插入图片描述
在这里插入图片描述


作业题

【子进程执行命令ls -l】用的是shell命令,不是C命令。execl("bin/ls","ls",NULL);

在这里插入图片描述

int main()
{
	int rid;
	rid = fork();
	if( rid < 0 )
	{
		printf("fork failed\n");
		exit(1);
	}
	if( rid == 0 )
	{
		execl("bin/ls","ls",NULL);
		perror("execl failed");
		exit(1);
	}
	if( rid > 0 )
	{
		wait(NULL);
		printf("child pid=%d\n",rid);
		exit(0);
	}
	return 0;
}

4、编写C语言程序,并用Makefile进行编译。【复习实验】

Linux 实验二 Makefile博客


5、单道程序与多道程序CPU时间计算

单道程序的 CPU 时间就是该程序运行的时间,多道程序的 CPU 时间则是多个程序运行时间的总和。在多道程序情况下,一个程序可能会因为其他程序在 CPU 上占用时间而被挂起,这样就会影响到该程序的 CPU 时间。在计算 CPU 时间时,需要考虑每个程序的实际运行时间,以及每个程序被挂起的时间。


四、Shell(包括课后习题)

复习一下 怎么生成和执行脚本

  1. 使用文本编辑器打开一个新文件,在文件中编写脚本内容。
vi script.sh
  1. 给脚本文件设置可执行权限。
chmod +x script.sh
  1. 运行脚本文件。
./script.sh

注意:在windows中则是.exe,在 Linux 系统中,脚本文件通常以 .sh 为后缀名。


1.编写个一个shell脚本,用来累加用户输入的多个数字,并在屏幕上输出累加的结果

#!/bin/bash
# 初始化结果为 0
result=0

# 循环处理用户输入的每个数字
while true
do
  # 读取一个数字
  read -p "请输入一个数字(输入 Q 结束):" num

  # 如果输入的是 Q,则退出循环
  if [[ "$num" == "Q" ]]; then
    break
  fi

  # 累加结果
  result=$((result + num))
done

# 输出结果
echo "累加结果:$result"

在这里插入图片描述


2.求100内的质数

#!/bin/bash
#检查每个数是否为质数
for i in {2..100}
do
#将 $i 赋值给变量 prime
prime=$i
#检查 $i 是否能被 2 到 sqrt(i) 之间的数整除
for j in $(seq 2 $(($(echo "sqrt($i)" | bc))))
do
# 如果 $i 能被 $j 整除,那么 $i 不是质数
if [ $(($i % $j)) -eq 0 ]; then
prime=0
break
fi
done
#如果 $prime 仍然是质数,则输出它
if [ $prime -ne 0 ]; then
echo $prime
fi
done

在这里插入图片描述


3.编写一个Shell脚本,它能计算用户通过命令行参数形式提供的多个整数的平均数

#!/bin/bash
read theseNums
length=0
sum=0
for i in $theseNums
do
        length=$((length + 1))
        sum=$((sum + i))
done
average=$((sum/length))
echo "the averge is:$average"

在这里插入图片描述

4.编写个shell程序来判断用户所输入的参数是否是一个数字

#!/bin/bash

#判断用户是否输入了参数
if [ $# -eq 0 ]
then
echo "错误:未输入参数"
exit 1
fi

#判断参数是否为数字
if [[ $1 =~ ^[0-9]+$ ]]; then
echo "$1 是一个数字"
else
echo "$1 不是一个数字"
fi

exit 0

在这里插入图片描述


5.用Shell编程,判断一文件是不是字符设备文件,如果是将其拷贝到 /dev 目录下

#!/bin/bash

# 获取用户输入的文件名
file=$1

# 判断文件是否存在
if [ ! -e $file ]
then
  echo "文件 $file 不存在!"
  exit 1
fi

# 判断文件是否是字符设备文件
if [ -c $file ]
then
  # 拷贝文件到 /dev 目录
  cp $file /dev
  echo "已将文件 $file 拷贝到 /dev 目录下"
else
  echo "文件 $file 不是字符设备文件!"
fi

在这里插入图片描述
使用方法:

  1. 使用文本编辑器(例如 vi、nano 等)打开一个新文件,将上面的代码复制粘贴进去。
  2. 保存文件,并将文件名设为 copyToDev.sh。
  3. 使用命令 chmod +x copyToDev.sh 将文件设为可执行文件。
  4. 使用命令 ./copyToDev.sh fileName 来运行脚本,其中 fileName 是你要判断的文件的名称。

例如,如果你想判断 /dev/tty 目录下的 tty0 文件,则可以使用以下命令运行脚本:

./copyToDev.sh /dev/tty/tty0

6.编写shell脚本,实现如下功能:(1)从命令行读入2个整数;(2)对两个数进行大小比较;(3)在屏幕上输出比较结果。

#!/bin/bash

#读入两个整数
echo "请输入两个整数:"
read num1 num2

#对两个数进行大小比较
if [ $num1 -gt $num2 ]
then  echo "$num1 大于 $num2"
elif [ $num1 -eq $num2 ]
then  echo "$num1 等于 $num2"
else
  echo "$num1 小于 $num2"
fi

在这里插入图片描述


7.编写shell程序,实现自动删除50个账号的功能。账号名为user1至user50

#!/bin/bash

#循环删除50个账号
for i in {1..50}
do
# 删除账号
userdel user$i
done

#提示删除完成
echo "账号删除完成"

在这里插入图片描述


8.编写一个Shell脚本,它能够显示下面序列的前10个数字:0,1,1,2,3,5,8,13,……

#!/bin/bash

#定义输出的数字个数
count=10

#定义前两个数字
num1=0
num2=1

#循环输出数字
for i in $(seq 1 $count)
do

#输出当前数字
echo $num1

#将当前数字保存起来,用于下次循环
temp=$num1

#计算下一个数字
num1=$num2
num2=$((num1 + temp))
done
        

在这里插入图片描述


9.编写一个Shell脚本,它能将用户提供的二进制数转化为十进制数

#!/bin/bash

#读入二进制数
echo "请输入一个二进制数:"
read binary

#定义转化后的十进制数
decimal=0

#定义二进制数的位数
length=${#binary}

#循环转化
for i in $(seq 1 $length)
do

#取出第 $i 位的数字
num=${binary:$i-1:1}

#如果当前位数字是1,则将其加入到十进制数中
if [ $num -eq 1 ]
then  decimal=$((decimal + 2**$((length-i)) ))
fi
done

#输出十进制数
echo "十进制数为:$decimal"

在这里插入图片描述


结束,在这也预祝大家能考出理想的成绩,过个开心年!新年快乐呀!!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Linux】# 2022 Linux 笔试主要内容 MJ_University 的相关文章

  • ubuntu 20.04 | 设置默认 python、pip(软连接)并换源

    ubuntu 20 04 设置默认python pip xff08 软连接 xff09 并换源 PythonPip1 安装pip32 建立软连接3 更换pip源4 更新pip5 卸载pip6 使用pip6 1 pip安装软件包6 2 pip
  • JavaWeb实现简单登录功能

    创建一个web项目 xff0c 配置好Tomcat xff0c java环境 xff0c 并部署到idea中 xff0c 安装好MySQL并导入jar包 mysql connector的jar包 jquery的js包 servlet api
  • telnet是什么

    Telnet是远程连接服务 xff0c 它工作于tcp ip协议的应用层 telnet命令通常用来远程登录 是Internet远程登陆服务的标准协议和主要方式 它为用户提供了在本地计算机上完成远程主机工作的能力 在终端使用者的电脑上使用te
  • 头文件与库文件的区别

    一 头文件与库文件的区别 头文件一般而言 xff0c 是申明和定义 库文件是已经编译好的二进制代码 这个二进制代码可以是动态的 xff0c 如 so xff1b 也可以是静态的 xff0c 如 a 如果是动态的 xff0c 则最后生成的程序
  • C++入门 vector的使用 + 进阶【模拟实现】

    目录 基本接口函数介绍迭代器空间容量增删查改迭代器失效问题探讨 vector模拟实现reserve迭代器空间容量删除insert析构函数vector拷贝构造函数拷贝赋值运算符 基本接口函数介绍 函数名功能vector xff08 重点 xf
  • C++11:继承

    目录 继承的基本概念 继承方式 基类和派生类对象赋值转换 切片 继承中的作用域 派生类的四个成员函数 xff1a 构造函数 拷贝构造函数 赋值重载 析构函数 静态成员 继承与友元 多继承 菱形继承 多继承的指针偏移问题 组合 继承的基本概念
  • socket编程二十六:基于UDP的服务器端和客户端

    前面的文章中我们给出了几个 TCP 的例子 xff0c 对于 UDP 而言 xff0c 只要能理解前面的内容 xff0c 实现并非难事 UDP中的服务器端和客户端没有连接 UDP 不像 TCP xff0c 无需在连接状态下交换数据 xff0
  • 下载高清电影的必须收藏的网站

    下载高清电影的必须收藏的网站 Posted 2012 12 06 分类 生活范儿 电影 生活范儿 电影 CHD 虽然蓝光推出 xff0c 但是高清已经势不可挡 xff0c 动辄几G甚至几十G一部的电影冲击着我们的视觉 xff0c 也考验着我
  • 电赛总结|电赛注意事项

    电赛总结 赛前 1 准备模块非常重要 如果没有提前准备模块 xff0c 在赛中也是在想尽办法买模块 xff0c 只是花更多的钱和运费等 xff0c 也不会去自己搭 所以赛前一定要准备模块 常见模块 降压模块 xff0c 升压稳压模块 xff
  • Putty使用教程

    Putty作为免费且开源的老牌 SSH 客户端 xff0c PuTTY 经常用于 Windows 下连接管理远程服务器 为方便刚接触 VPS 的新手参考使用 xff0c 本文配合截图介绍 PuTTY 的基础用法及一些设置技巧 xff0c 希
  • #Python实现话题的发布与订阅

    Python实现话题的发布与订阅 首先我们的先了解ROS文件系统的基本框架 xff0c 如下图所示 xff1a 由上图可知 xff0c py文件放在工作包里面的scripts文件夹内 xff0c 所以 xff0c 整活 xff01 1 在工
  • #创建自定义topic

    创建自定义topic 前面我们学了用C 43 43 和Python创建发布者与订阅者 xff0c 这次我们创建自定义的话题 xff0c 其实同C 43 43 实现topic差不多 xff0c 都是编写 cpp文件 步骤有点多且繁琐 xff0
  • #使用TF实现海龟机器人跟随

    使用TF实现海龟机器人跟随 昨天粗略地讲解了一会儿TF变换 xff0c 用的是ROS系统中自带的功能包实现小海龟跟随的功能 xff08 具体见 初识TF变换 xff09 今天我们将用自己编写节点的方式实现小海龟跟随的功能 xff0c 并且
  • #创建虚拟机器人URDF模型

    创建虚拟机器人URDF模型 题外话 xff1a 作业发布已有一两天了 xff0c 之所以今天才编辑这篇博客 xff0c 是因为我也遇到问题了 xff0c 现在以及解决了 xff08 小细节 xff1a 创建功能包之前先编译工作空间确保里面已
  • # gazebo 仿真

    gazebo 仿真 1 给 base link 添加惯性 xff0c 碰撞以及 gazebo 属性 在路径xqrobot description urdf xacro 件夹下新建 件夹 gazebo xff0c 并在 gazebo 件下创建
  • #Gmapping

    Gmapping 开始之前先安装两个功能包 xff0c 命令如下 xff1a sudo apt span class token operator span get install ros span class token operator
  • #navigation

    navigation 1 安装相关依赖 sudo apt span class token operator span get install ros span class token operator span kinetic span
  • # Qt_day1

    Qt day1 1 项目框架 span class token macro property span class token directive hash span span class token directive keyword i
  • ros先订阅后发布 无法收到消息的解决办法

    现象 今天遇到的问题是 使用的是Ros1 在先订阅后发布时 会导致订阅者无法收到订阅的消息 除非在发布者发布后重新订阅 思考 以前使用的是Ros2似乎并不关心订阅和发布的先后顺序 nbsp 似乎都可以收到消息 nbsp nbsp 这个问题后
  • C/C++中关于struct和class类的区别

    struct和class的主要的区别在于两者默认的访问权限有所不同 在不设置类中的成员属性和成员方法的权限时 xff0c struct默认的访问权限是公共权限 xff0c class默认的访问权限是私有权限 补充 xff1a 成员属性和成员

随机推荐

  • C++中STL容器的主要使用及含义

    1 stack栈容器的使用 假如栈中存放的是字符串 xff0c 我们做如下定义 xff1a stack lt string gt ss 设该变量名为ss 其主要用法如下 xff1a ss push a 存入栈中元素a ss top 读取栈顶
  • 电赛备赛记录第一篇(控制部分)

    2022 5 25 九校联赛备赛阶段第一天 联赛小车系统沿用去年国赛使用的树莓派驱动底板与外设 整车情况良好 xff0c 摄像头通信 连接均正常 xff0c 现已拼装完整 复产复工的初步成果为 xff1a 小车可以实现开机自启动的程序运行
  • 数据结构——栈详解

    1 栈 Stack 是一种线性存储结构 xff0c 它具有如下特点 xff1a xff08 1 xff09 栈中的数据元素遵守 先进后出 34 First In Last Out 的原则 xff0c 简称FILO结构 xff08 后进先出的
  • 双目相机标定

    一 运行环境 opencv2 windows vs 二 图像获取 分割 保存 参考博客opencv打开双目摄像头 图像切割保存 scutqq的博客 CSDN博客 双目图像分割 include amp lt opencv2 core core
  • uart1接收不定长度数据和发送:STM32 HAL库串口+DMA+IDLE空闲中断

    DMA增加 xff1a usart1 gpio 默认即可 usart1中断必须打开 在 STM32 中 USART 发送接收有三种基本方式 xff0c 轮询 中断和 DMA 1 轮询方式为堵塞模式 xff0c 使用超时管理机制 它每次接收一
  • 串口、网口等自定义通信协议的问题

    自定义通信协议的问题 一 串口1 通信分为网络通信和串口通信2 协议格式3 协议设计4 代码实现 二 网口1 TCP粘包与拆包 包的划分 出现TCP粘包的原因 粘包与拆包的几种情况 常见的粘包与拆包解决方案 2 为什么UDP没有粘包 xff
  • 如何理解奇偶校验位?

    奇偶校验位提供对传输数据的简单错误 xff08 奇偶校验 xff09 检查 此表描述奇偶校验的类型 奇偶校验类型 xff1a Even 描述 xff1a 数据位加上奇偶校验位产生偶数个1 xfffc 奇偶校验类型 xff1a Mark 描述
  • C语言----隐藏代码文件

    在C语言中 xff0c 常用的文件主要是后缀为 c的源文件以及后缀名为 h的头文件 我们通常使用头文件对函数进行声明 xff0c 使用源文件对具体的函数进行实现 有些时候会由于各种原因需要将函数的功能交给别人使用 xff0c 但是又不想将具
  • c++入门系列(三)之头文件

    1 什么是头文件 xff1f 在C语言家族程序中 xff0c 头文件被大量使用 一般而言 xff0c 每个C 43 43 C程序通常由头文件和定义文件组成 头文件作为一种包含功能的函数 数据接口声明的载体文件 xff0c 主要用于保存程序的
  • std::atomic_thread_fence

    在原子变量的存取上应用不同的memory order可以实现不同的内存序来达到数据同步的目的 xff0c 而在C 43 43 11及之后的标准里 xff0c 除了利用原子操作指定内存序 xff0c 还定义了单独使用 内存栅栏 xff08 s
  • 【数据结构】【期末复习】知识点总结

    算法 线性表 概念明晰 xff1a 随机存取 顺序存取 随机存储和顺序存储 随机存取 顺序存取 随机存储和顺序存储这四个概念是完全不一样的 xff0c 切不可将之混淆 很多人包括我可能认为随机存取就是随机存储 xff0c 顺序存取就是顺序存
  • 【单片机学习】51单片机【定时/计数器】,详细介绍

    51单片机学习 一 先知先会1 CPU时序的有关知识1 1 周期换算2 在学习定时器之前需要明白的3 定时 计数器的工作原理4 51单片机定时器结构 二 定时 计数器的控制1 工作方式寄存器TMOD2 控制寄存器TCON3 定时 计数器的工
  • 【跟着江科大学Stm32】GPIO_LED_流水灯_蜂鸣器

    只要坚持下来了 xff0c 一定会有收获 xff01 一 LED闪烁 span class token macro property span class token directive hash span span class token
  • STM32F103C8T6 PWM驱动舵机(SG90)

    小知识 xff1a 同一个定时器 xff0c 不同通道输出不同输出PWM的特点 对于同一个定时器的不同通道输出PWM xff0c 因为它们是共用一个计数器的 xff0c 所以频率必须一样 xff0c 而占空比由各自的CCR决定 xff0c
  • STM32 PWM周期与频率的计算

    文章目录 STM32 PWM周期与频率的计算频率的计算占空比的计算笔记仅供自学 xff0c 用来回看复习 xff0c 不一定适合你 xff0c 如有错误请指出 STM32 PWM周期与频率的计算 TIM TimeBaseInitTypeDe
  • STM32F103C8T6 实现舵机与电机的控制 2个定时器输出不同频率的PWM

    智能小家居 舵机开门 xff0c 电机做风扇 or 拉窗帘 呼吸灯做提示 xff0c 小OLED屏幕显示当前状态 文章目录 直接上代码main cpwm hpwm cservo hservo cmotor hmotor c笔记仅供自学 xf
  • 【学习记录】Tpro遥控器_暂时取消Tpro的控制权(简易)

    文章目录 按照如下图示配置1 设置好 96 逻辑开关 96 2 选择执行该 96 逻辑开关指令 96 的 96 通道 96 3 配置成功附 xff1a 继电器与R88的接法 按照如下图示配置 1 设置好逻辑开关 2 选择执行该逻辑开关指令的
  • 【Linux】gcc编译工具,断点的设置,gdb调试

    文章目录 注意1 在gcc编译过程中一定要加入选项 96 g 96 xff1b 2 只有在代码处于 96 运行 96 中在 96 暂停 96 状态时才能查看变量值 xff1b 3 设置断点后 xff0c 程序在指定行之前停止 总结主要内容1
  • 【Linux】信号量操作函数

    文章目录 二 实验原理1 semget 函数函数作用 xff1a 参数意义 xff1a 例子 xff1a 2 semop 函数函数作用 xff1a 参数意义 xff1a struct sembuf 结构体定义如下例子 xff1a 再来个完整
  • 【Linux】# 2022 Linux 笔试主要内容 MJ_University

    2022 Linux 笔试主要内容 看前须知道 带 的都是老师复习课上提到的内容 xff0c 但不代表说一定会考哦 xff01 选择题 xff08 20分 xff09 填空题 xff08 20分 xff09 判断题 xff08 10分 xf