https://blog.csdn.net/qq_52741360/article/details/122063578
1.linux 中把分区和目录对应的过程叫做( )。
挂载
2.信号是在软件层次上对()机制的一种模拟, 是一种异步通信方式。
中断
3.用 GCC 编译过程可以被细分为四个阶段:( )
预处理,编译,汇编,连接
4.编译有线程的文件要加( )参数。
-lpthread
5.父进程等待子进程的结束,可以使用的函数是( )和( )。
wait( ) waitpid( )
6.linux 主要有两个信号安装函数,分别是
signal( ) , sigaction( )
7.Linux 操作系统内核由( )编写完成。
C 和汇编
8.目录( )下存放 linux 操作系统启动时所要用到的程序
/boot
9.Linux 中采用“一对一”的线程机制,也就是一个用户线程对应一个( )。
内核线程
10.vim 三种模式:在命令模式下按下( )就进入了底线命令模式。
:
11.linux 文件系统由四部分组成,( )用于存放文件的控制信息。
超级块
12.线程本身调用( )函数可以退出线程。
pthread_exit()
13.向消息队列发送消息的函数是( )。
msgrcv()
14.( )系统调用可以根据文件描述符来操作文件特性。
stat()
15.Valgrind 包括很多工具,( )是 valgrind 应用最广泛的工具,一个重量级的内存检查器,能
够发现开发中绝大多数内存错误使用情况,( )是主要用来检查程序中缓存使用出现的问题。
Memcheck,Cachegrind
16.信号发送函数中,( )用于设置定时器,当计时时间到达时,向进程发送 SIGALRM 信号。
setitimer()
17.当一个线程的属性设置为( ),该线程结束时立即释放它所占有的系统资源。
分离状态
18.以下哪种方式属于异常终止一个进程(D)
D.接到一个信号并终止。
19.下列命令哪个是创建线程私有数据命令(A)
A.pthread_key_create()
20.下面哪种通信方式适用于不同机器之间的进程通信。(D )
套接字
21.创建或打开消息队列的函数为(A )
msgget()
22.linux 中通过调用 waitpid()函数得到进程的退出信息,该函数原型为 pid_t waitpid(pit_t pid,
int *statloc, int options);当第一个参数 pid 取值为-1 时,表示(A)
A 等待任一子进程退出,相当于 wait()。
23.Linux 环境中使用 kill 函数向进程或进程组发送信号。Kill 函数原型为 int kill(pid_t pid,
int signo);当第一个参数 pid>0 时,表示( A )
A 发送信号给进程 ID 为 pid 的进程;
24.共享主存基本操作( A )将共享主存区映射到进程虚拟地址空间。
A shmat()
25.修改消息队列状态信息的命令是(B)
B msgctl()
26.使用 gdb 调试程序时,next 和 step 命令的作用?( ) 统调用的函数原型
next:单步运行,不进入函数内部;
setp:单步运行,进入函数内部
27.Linux 系统的设备文件分为三类?( )
字符设备文件、块设备文件和网络设备文件
28.标准 I/O 提供了三种类型的缓冲,分别是?( )
全缓冲,行缓冲,不带缓冲
29. 一个完整的信号生命周期包含 4 个重要的事件,这 4 个重要事件分别是?( )
信号诞生 信号在进程中注册 信号在进程中注销 信号处理函数执行完毕
30.互斥锁只有两种状态,即?( )
开锁和上锁
31.在标准 IO 库中,rewind 函数作用?( )
将文件流指针指向文件起始位置
32.c 语言中没有明确给定初值的全局变量和静态变量存放在哪儿?( )
未初始化数据区
33.函数 geteuid()用于得到进程的?( )
用户有效 UID
34.一个进程是 ( )
C、PCB 结构与程序和数据的组合。
35.一个进程调用 wait 或 waitpid 函数,可能产生 3 中情况,下列不属于这 3 种
情况的是 ( )。
D、如果该进程没有子进程,立即返回,返回值为 0。
36.返回调用进程的进程标识号的系统函数是 ( )。
A、 getpid
37.程序和进程是两个不同的概念,以下不能描述这个观点的是 ( )。
B、同一个程序运行 10 次,产生的是同一个进程
38.fork 函数在父进程中的返回值是 ( )。
A、创建的子进程的进程标识号
39.在 Linux 中,下列不属于正常结束进程的方法是 ( )。
D、调用 abort 函数。
40.以下程序的输出结果是( )
B、===================start of file
—parent my child is 4759,my pid is 4758,myparent pid is 3700
—child,my pid is 4759,my parent pid is 4758
===================end of file
===================end of file
41.以下程序输出结果是( )
C、parent, var = 288
child, var = 100
------------finish---------------
------------finish---------------
42.以下程序输出结果是( )
A、child, *p = 7000, var = 1000
parent, *p = 0, var = 100
43.哪种进程之间的通信,数据不可以重复读( )
B、fifo C、管道
44.下述是 Linux 下多线程编程常用的 pthread 库提供的函数名和意义,说法不正确的是?( )
D、pthread_exit 杀死一个线程
45.对线程函数来说,说法正确的是( ):
A、pthread_create 中参数 arg 是传递给 start_routine 函数的参数
46.对互斥锁及条件变量说法不正确的是( ):
D、在使用条件变量时,互斥锁会失去作用,所以是否有互斥锁关系不重要
47.以下说明正确的是( ):
B、线程是一个独立的指令流,是在进程中被创建的,随进程的关闭而关闭
48.线程 A SendMessage 给线程 B,线程 B 处理该消息时又 SendMessage 给线程 A,会出现
( ):
B、继承执行
48.linux 文件系统通常由四部分组成:引导块,超级块,索引节点和( )。
B、数据块
49.任何进程在运行时默认打开的三个流对象,都有相应的文件描述符,标准文件描述符定
义标准输入设备的值为( )。
A、0
50.系统调用的函数原型 int open(const char *pathname, int flags),flag 值中( )表示以读写的
方式打开文件。
C、O_RDWR
51 系统调用的函数原型 int open(const char *pathname, int flags),flag 值中( )表示若文件
存在且为只读或只写成功打开,则将长度截为 0。
B、O_TRUNC
52此行代码 length=lseek(fd,0,SEEK_END);中的 length 的值表示( )。
A、文件 lseek.txt 的大小
53.使用下列函数调用 int fcntl(int fd, int cmd);来实现文件描述符的复制,cmd 参数应使用哪
一个?
A、F_DUPFD
54.阅读程序填空:如果想要获取文件的大小,空白处应该填写以下哪个答案。
A、 statBuf.st_size
55.在创建文件和目录时候,有默认权限。如果 umask 值为 0022,则文件的默认权限为( )
B、0644
56.执行程序,代码输出结果为( )。
A.link num:2
57.获取目录的系统调用函数为( ) 。
B、getcwd()
简答
1.简述一下系统调用和库函数 举例说明
库函数:由系统提供,用户无须定义,也不必在程序中作类型说明,只需在程序前包含有该函数
原型的头文件即可在程序中直接调用 如使用 printf return
系统调用:操作系统的一部分;用户应用程序访问并使用内核所提供的各种服务的途径即是系
统调用。如 exit
2.open 系统调用的打开标志
只读:O_RDONLY
只写:O_WRONLY
读写:O_RDWR
写入时添加至文件末尾:O_APPEND
不存在时创建:O_CREAT
截断文件为零长度:O_TRUNC
-
vfs 虚拟文件系统
虚拟文件系统(Virtual File System, 简称 VFS), 是 Linux 内核中的一个软件层,用于给用
户空间的程序提供文件系统接口;同时,它也提供了内核中的一个 抽象功能,允许不同的
文件系统共存。系统中所有的文件系统不但依赖 VFS 共存,而且也依靠 VFS 协同工作。 -
VFS 是什么
VFS 的作用就是采用标准的 Unix 系统调用读写位于不同物理介质上的不同文件系统,即 为
各类文件系统提供了一个统一的操作界面和应用编程接口。VFS 是一个可以让 open()、read()、
write()等系统调用不用关心底层的存储介质和文件系统类型就可以工作的粘合层。 -
linux 文件类型
普通文件、目录文件、管道文件、字符设备文件、软链接文件、块文件、套接字文件 -
什么是进程,进程资源由哪两个组成
进程是计算机中程序的一次数据集合运算的活动,是系统进行调度和分配的基本单元,是操
作系统的基础
进程资源由内核空间进程资源 用户空间进程资源 -
进程结构
一个正在运行着的进程在内存空间中申请的代码区、初始化数据区、未初始化数据区、堆区、
栈区 5 个部分。 -
程序与进程的区别
动态和静态的区别:进程是程序及其数据在计算机上的一次运行活动,是一个动态的概念,
而程序是一组有序的指令集和,是一种静态的概念
生命周期的区别:进程是程序的一次执行过程,他是动态创建和消亡的,程序是一组代码的
集合,他是永久存在的
组成的区别:进程由程序 数据和 PCB 三部分组成,程序是一组有序的集合指令
9.fork 返回值的意义
如果执行成功,在父进程中将返回子进程的 PID,类型为 pid_t,子进程将返回 0,以区别父
子进程。
如果执行失败,则在父进程中返回-1,错误原因存储在 errno 中。
10.return 和 exit 的区别:
return 是语言级别的,它表示了调用堆栈的返回;而 exit 是系统调用级别的,它表示一个进
程的结束。
在 main 函数里,return(0)和 exit(0)是一样的,子函数用 return 返回,而子进程用 exit 退出,
调用 exit 时要调用一段终止处理程序,然后关闭所有 I/O 流
- 什么是孤儿进程 谁负责回收孤儿进程
孤儿进程就是其在正常运行时,父进程已经结束,导致其内核资源无法被父进程回收,孤儿
进程在父进程结束时将会把父进程设置为 init 进程,init 会对孤儿进程的资源进行回收处理
12.僵尸进程是什么,谁消灭
僵尸进程:进程已经退出,但它的父亲进程还没有回收内核资源的进程,即该进程在内核空
间的 PCB 没有释放。利用 kill 函数杀死父进程,僵尸进程会变成孤儿进程被 init 进程收养。
- fork 和 vfork 的区别与联系
区别:
fork()用于创建一个新进程。由 fork()创建的子进程是父进程的副本。即子进程获取 父 进 程
数据空间,堆和 栈的副本。父子进程之间不共享这些存储空间的部分。而 vfork()创建的进
程并不将父进程的地址空间完全复制到子进程中,因为子进程会立即调用 exec (或 exit)
于是也就不会存放该地址空间。相反,在子进程调用 exec 或 exit 之前,它在父 进 程 的
空间进行。
vfork()与 fork()另一个区别就是:vfork 保证子进程先运行,在它调用 exec 或 exit 之 后
父进程才可能被调度运行。
相同:
两者被调用一次,但是返回两次。两次返回的唯一区别是子进程的返回值是 0,而 父 进 程
的返回值则是新子进程的进程 ID。
14.父进程调用 wait 能出现的三种情况
当子进程都在执行时,wait 会使父进程进入阻塞状态
当恰好有子进程结束时,wait 会回收子进程资源并且获得子进程结束状态
当无子进程时 wait 会立刻返回-1 并且显示报错信息
15.简述可靠信号和不可靠信号的处理过程:
如果进程在屏蔽某个信号的时间内,其他进程多次向其发送同一个信号,不可靠信号只有一
次未决记录,当进程解除屏蔽后,该信号只会被捕捉一次;而可靠信号操作系统会记录所有
的发送,当进程解除屏蔽后,操作系统会捕捉对等次数。
16.简单介绍一下信号的定义及其分类。
信号是表示消息的物理量,是运载消息的工具
信号是软件中断,是在软件层次上对中断机制的一种模拟,在原理上,一个进程收到一个信
号与处理器收到一个中断请求可以说是一样的
分类:确定信号和随机信号;连续信号和离散信;周期信号和非周期信号;能量信号与功率
信号;因果信号与反因果信号;实信号与复信号
17.进程间通信方式:
信号,匿名管道,命名管道,信号量,共享内存,消息队列,套接字,Socket
- 请解释一下有名管道和匿名管道的区别?
匿名管道是由 pipe 函数创建 并打开的
命名管道是由 mkfifo 函数创建 的 ,打开用 open
命名管道和匿名管道唯一的区别就是在创建的打开,一旦这些工作完成后,它们有相同的意
义
19.简单介绍一下匿名管道及其特点
匿名管道是半双工的,只有一个写端和一个读端
匿名管道不是普通的文件,不是在磁盘上,而是在内存中的,所以它的生命周期随进程的结
束而结束
匿名管道是基于字节流来通信的
其本身有同步互斥的效果
匿名管道只能使用于有血缘关系的进程之间的通信
20.Please describe the difference of signal() and sigaction() in brief(描述一下 signal 和
sigaction 的区别与联系英文题)
不同点:signal 只能调用信号处理函数,但是无妨向其输入附带的数据
sigaction 可以向信号处理函数传递信息,并且可以设置信号掩码,返回设置之前的 sigaction
相同点:都可以为信号设置信号处理函数
共用了同一个内核函数 do_sigaction
21.信号处理方式
忽略此信号。
自定义捕捉信号函数。
执行系统默认操作。
- 信号产生的方式
当用户按某些键时产生信号。
硬件异常产生信号。
终止进程信号。
软件异常产生信号
23.信号的生命周期
在目的进程中安装信号;进程产生信号;信号在目的进程中被注册(目的进程收到信号);
信号在进程中被注销(在执行相应处理函数之前);信号生命终止(执行完响应处理函数后
再恢复到被中断的位置继续执行)。
24.简述什么是线程及特点
线程就是系统运算执行的最小单位,其所占资源较少
线程是进程的一个执行序列
线程可以看作是轻量化的进程,线程之间的切换代价小
25.pthread_kill 函数和 pthread_cancle 函数的区别:(两个都是终止进程的)
pthread_kill 函数的功能是向指定线程发送信号,信号为 0 时用于检查此线程 ID 的线程 是
否存活。
pthread_cancel 函数的功能是给线程发送取消信号,使线程从取消点退出。
-
pthread_exit()和 pthread_cancel()的区别
pthread_exit()是结束本线程
pthread_cancel()是结束其他线程 -
简述互斥锁与读写锁的区别与联系。
区别:读写锁区分读者和写者,而互斥锁不区分
互斥锁同一时间只允许一个线程访问该对象,无论读写;读写锁同一时间内只允许一个写者,
但是允许多个读者同时读对象。
联系:读写锁在获取写锁的时候机制类似于互斥锁。
28.条件变量中 pthread_cond_wait 实现的步骤
解锁 判断条件是否成立 如果成立则上锁执行,不成立将进入阻塞状态
-
线程与进程的区别
进程是资源分配的最小单位,线程是程序执行的最小单位。
进程有自己的独立地址空间,每启动一个进程,系统就会为它分配地址空间,建立数 据
表来维护代码段、堆栈段和数据段。而线程是共享进程中的数据的,使用相同的地址 空
间,因此 CPU 切换一个线程的花费远比进程要小很多,同时创建一个线程的开销也 比
进程要小很多。
线程之间的通信更方便,同一进程下的线程共享全局变量、静态变量等数据,而进程 之
间的通信需要以通信的方式进行。
多进程程序更健壮,多线程程序只要有一个线程死掉,整个进程也死掉了,而一个进 程
死掉并不会对另外一个进程造成影响,因为进程有自己独立的地址空间。 -
tcp 和 udp 的区别
TCP 需要连接,UDP 是无连接的,发送数据之前不需要建立连接
TCP 提供可靠的服务,通过 TCP 连接传送的数据,无差错,不丢失
TCP 逻辑通信信道是全双工的可靠信道,UDP 则是不可靠信道 -
TCP 的三次握手
第一次握手
客户主动(active open)去 connect 服务器,并且发送 SYN 假设序列号为 J,
服务器是被动打开(passive open)
第二次握手
服务器在收到 SYN 后,它会发送一个 SYN 以及一个 ACK(应答)给客户,
ACK 的序列号是 J+1 表示是给 SYN J 的应答,新发送的 SYN K 序列号是 K
第三次握手
客户在收到新 SYN K, ACK J+1 后,也回应 ACK K+1 以表示收到了,
然后两边就可以开始数据发送数据了 -
osi 七层模型
应用层 表示层 会话层 传输层 网络层 数据链路层 物理层
33.使用 gdb 调试程序时,next 和 step 命令的作用?
next:单步运行,不进入函数内部;
setp:单步运行,进入函数内部
34.Linux 系统的设备文件分为三类?
字符设备文件、块设备文件和网络设备文件
35.标准 I/O 提供了三种类型的缓冲,分别是?
全缓冲,行缓冲,不带缓冲
- 一个完整的信号生命周期包含 4 个重要的事件,这 4 个重要事件分别是?
信号诞生 信号在进程中注册 信号在进程中注销 信号处理函数执行完毕
37.互斥锁只有两种状态,即?
开锁和上锁
38.在标准 IO 库中,rewind 函数作用?
将文件流指针指向文件起始位置
39.c 语言中没有明确给定初值的全局变量和静态变量存放在哪儿?
未初始化数据区
40.函数 geteuid()用于得到进程的?
用户有效 UID
tk
-
gcc 编译过程:预处理、编译、汇编、连接。
Jdb:b:设置断点;r:执行程序;c:执行下面的程序
Vim:nyy:赋值 n 行;ndd:删除 n 行;p 或 P:粘贴在光标所在行的下一行或者上一
行。 -
进程初始化数据区:全局初始化数据区/静态数据区。
进程的运行环境:代码区、初始化数据区、未初始化数据区、堆区、
栈区 -
进程的堆区:用于动态内存分配。一般由程序员分配和释放,若程序员不释放,程序结
束时由 OS 回收。 -
Linux 文件系统中的块有(根据块使用的不同):引导块、超级块、Inode 块、数据块。
控制信息、文件基本属性等是 Inode 节点,为文件系统索引。存放数据的为数据块。超
级块中含有文件系统的基本信息,如块大小、指向空间 inode 和数据块的指针等相关信
息。 -
进程运行时默认打开的标准对象:标准输入设备 stdin、标准输出设备 stdout、标准错误
输出设备 stderr。 -
软连接和硬链接的特点:硬链接和原来的文件公用一个 Inode 节点。相当于加了个相同
的文件,只是改了改名字。
硬链接创建函数:link
删除硬链接函数:unlink
软连接创建函数:symlink
读取软连接中的内容所用的函数:readlink(文件名,读取到的空间,读取的大小)。 -
修改文件权限命令:chmod、chgrp、chown。
-
文件描述符为整形:对于用户空间来说,任何打开的文件都将分配一个唯一非负整数,
用于标识该打开文件,该值即文件描述符,为一个大于等于 0 的整数。 -
权限的值,读:4 写:2 执行:1 注意:前三位为用户的权限,再三位为所属组的权
限,再三位为其他用户的权限。 -
获取文件属性,是否穿透。stat 函数具有穿透能力,能够穿透链接文件;而 lstat 函数不
具有穿透能力,不穿透链接文件,文件类型还为链接文件。 -
opendir 函数:打开一个目录,返回一个目录流指针。参数为欲打开目录的名称(路径)。
mkdir 函数:第一个参数时欲创建的目录文件路径,第二个参数时创建目录的权限。 -
wait 函数:调用 wait 函数的父亲进程将堵塞式等待改进的任意一个子进程结束后,回收
该子进程的内核进程资源。参数用来接受子进程退出状态。返回值为子进程的 PID。
waitpid 函数,用来等待指定子进程结束。返回值为子进程的 PID。
第一个参数,大于 0 时,表示等待进程 PID 为该 PID 值的进程结束;
等于 0 时,表示等待与当前进程的进程组 PGID 一致的进程结束;
等于-1 时,与 wait 函数相同;
小于-1 时,表示等待进程组 PGID 是此值的绝对值的进程结束。
第二个参数用来接受等待进程的结束状态。第三个参数一般设置为。 -
fork 函数:创建进程。
-
进程的进程块没有被释放,称为进程的僵死状态。
-
Fcntl 函数:修改某个文件描述符的特殊属性
-
创建硬链接的系统调用:link()
-
安装信号处理函数:signal 和 sigaction。
-
信号的生命周期:在目的进程中安装信号;进程产生信号;信号在目的进程中被注册(目的进程收到信号);
信号在进程中被注销(在执行相应处理函数之前);信号生命终止(执行完响应处理函数后
再恢复到被中断的位置继续执行)。 -
消息队列中发送信息的函数:msgsnd
-
信号是在软件层次上对中断机制的一种模拟,是一种异步通信方式。
-
接受消息队列的函数 msgrcv
-
alarm()设置定时器
-
信号分为可靠信号和不可靠信号。
-
管道分为有名管道和匿名管道。
-
互斥锁的两种状态:上锁和解锁。
-
自己退出线程的函数:pthread_exit()
被取消线程运行:pthread_cancle() -
互斥锁、条件变量、读写锁的初始化
互斥锁的初始化:pthread_mutex_init()
条件变量的初始化:pthread_cond_init()
读写锁的初始化:pthread_rwlock_init() -
读写锁:非阻塞的加锁解锁和阻塞的加锁解锁。
堵塞的方式申请读锁:pthread_rwlock_rdlock()
非堵塞的方式申请读锁:pthread_rwlock_tryrdlock()
堵塞方式申请写锁:pthread_rwlock_wrlock()
非堵塞方式申请写锁:pthread_rwlock_trywrlock() -
线程编译的时候加上-lpthread。
-
回收线程的函数:pthread_join()
-
互斥锁的上锁函数是 pthread_mutex_lock(),非阻塞加 try;
解锁函数是 pthread_mutex_unlock()。 -
面向连接的编程:TCP;面向无连接的是:UDP
-
在不同主机间进行通讯的是:scoket 或者是套接字
-
TCP 和 UDP 都是传输层的协议。
-
三次握手:连接建立、数据传输、连接释放。
-
创建套接字的函数 scoket()
-
网络编程的常见函数 j
监听网络函数:listen()
发起连接函数:connect()
接受连接函数:accept()
读写 scoket 对象:read()/write()
TCP 发送和接受数据:send()/recv()
关闭 scoket 对象:close()
Linux编程技术知识要点
1.linux中把分区和目录对应的过程叫做 挂载 。
2.信号是在软件层次上对 中断 机制的一种模拟, 是一种异步通信方式。
3.用GCC编译过程可以被细分为四个阶段:预编译,编译,汇编,链接。
4.编译有线程的文件要加 -lpthread 参数。
5.父进程等待子进程的结束,可以使用的函数 wait() 和 waitpid() 。
6.linux主要有两个信号安装函数,分别是什么signal(),sigaction()。
7.Linux操作系统内核由 C语言 编写完成。
8.使用gdb调试程序时,next和step命令的作用?
step 就是单步执行,遇到子函数就进入并且继续单步执行;
next 是在单步执行时,在函数内遇到子函数时不会进入子函数内单步执行,而是将子 函数整个执行完再停止,也就是把子函数整个作为一步。
9.目录 /Boot 下存放linux操作系统启动时所要用到的程序
10.Linux 系统的设备文件分为三类?块设备文件,字符设备文件,网络设备文件
11.Linux 中采用“一对一”的线程机制,也就是一个用户线程对应一个 内核线程 。
12.vim三种模式:在命令模式下按下 Esc 就进入了底线命令模式。
13.标准I/O提供了三种类型的缓冲,分别是?全缓冲,行缓冲,不带缓冲
14.linux文件系统由四部分组成, 超级块 用于存放文件的控制信息。
引导块:在文件系统的开头,通常为一个扇区,其中存放引导程序,用于读入并启动操 作系统;超级块:用于记录文件系统的管理信息。特定的文件系统定义了特定的超级块; inode区(索引节点):一个文件或目录占据一个索引节点。第一个索引节点是该文件 系统的根节点。利用根节点,可以把一个文件系统挂在另一个文件系统的非叶节点上; 数据区:用于存放文件数据或者管理数据。
15.一个完整的信号生命周期包含4个重要的事件,这4个重要事件分别是?
信号诞生;信号在进程中注册完毕;信号在进程中的注销完毕;信号处理函数执行完毕。
16.互斥锁只有两种状态,即?上锁,解锁
17.线程本身调用 return 函数可以退出线程。
18.向消息队列发送消息的函数是 msgsnd 。
19. 系统调用可以根据文件描述符来操作文件特性。
Valgrind包括很多工具, memcheck 是valgrind应用最广泛的工具,一个重量级的内存检查器,能够发现开发中绝大多数内存错误使用情况, cachegrind 是主要用来检查程序中缓存使用出现的问题。
memcheck ------> 这是valgrind应用最广泛的工具,一个重量级的内存检查器,能 够发现开发中绝大多数内存错误使用情况,
callgrind ------> 它主要用来检查程序中函数调用过程中出现的问题。
cachegrind ------> 它主要用来检查程序中缓存使用出现的问题。
helgrind ------> 它主要用来检查多线程程序中出现的竞争问题。
massif ------> 它主要用来检查程序中堆栈使用中出现的问题。
extension ------> 可以利用core提供的功能,自己编写特定的内存调试工具
20.信号发送函数中, alarm函数 用于设置定时器,当计时时间到达时,向进程发送SIGALRM信号。
21.在标准IO库中,rewind函数作用?
将文件内部的位置指针重新指向一个流(数据流/文件)的开头
22.c语言中没有明确给定初值的全局变量和静态变量存放在哪儿?
全局存储区(静态存储区)
23.函数geteuid()用于得到进程的?当前进程的实际用户UID值
24.当一个线程的属性设置为 detach ,该线程结束时立即释放它所占有的系统资源。
25.以下哪种方式属于异常终止一个进程( D)
A从main函数返回。
B调用exit。
C最后一个线程从其启动例程返回。
D接到一个信号并终止。
26.下列命令哪个是创建线程私有数据命令(A)
A pthread_key_create() B pthread_setspecific()
C pthread_getspecific() D pthread_key_delete();
27.下面哪种通信方式适用于不同机器之间的进程通信。( D)
A.消息队列 B.共享内存 C.信号量 D.套接字
28.创建或打开消息队列的函数为(A )
A.msgget() B.msgsnd() C.msgrcv() D. msgctl()
29.什么是进程?进程资源由哪两部分组成?
进程是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础
进程资源包括内核空间进程资源和用户空间进程资源
30.linux中通过调用waitpid()函数得到进程的退出信息,该函数原型为
pid_t waitpid(pit_t pid, int *statloc, int options);当第一个参数pid取值为-1时,表示(A)
A等待任一子进程退出,相当于 wait()。
B等待进程组ID与调用进程组ID相同的任一子进程。
C只等待进程ID等于PID的子进程。
D等待指定进程组中的进程,该进程组id等于 pid的绝对值。
31.pid_t fork() 返回值的意义?
创建失败时返回负数;创建成功时返回两个值:父进程的fork返回一个正数表示子进 程的进程ID,子进程的fork返回0
32.Linux环境中使用kill函数向进程或进程组发送信号。Kill函数原型为
int kill(pid_t pid, int signo);当第一个参数pid>0时,表示( A )
A发送信号给进程ID为pid的进程;
B发送信号给进程组ID和该进程相同的进程;
C发送信号给进程组内进程ID为pid的绝对值的进程;
D发送信号给系统的所有进程;
pid>0 将信号传给进程识别码为pid 的进程。
pid=0 将信号传给和目前进程相同进程组的所有进程
pid=-1 将信号广播传送给系统内所有的进程
pid<0 将信号传给进程组识别码为pid绝对值的所有进程
33.共享主存基本操作(A )将共享主存区映射到进程虚拟地址空间。
A shmat() B shmdt()共享内存 C shmctl()控制对共享内存的使用 D shmget() 创建共享内存
9.修改消息队列状态信息的命令是(B)
A msgsnd()发送信息 B msgctl() 控制 C msgrcv() 获取信息 D msgget() 创建
33.父进程调用wait() 可能出现的三种情况?(5分)。
1.如果其所有子进程都还在运行,则阻塞;
2.如果一个子进程已经终止,正等待父进程获取其终止状态,则取得该子进程的终止状态立即返回;
3.如果它没有任何子进程,则立即出错返回;
34.在进程中,return和exit() 的区别?
return是语言级别的,它表示了调用堆栈的返回;而exit是系统调用级别的,它表示一个进程的结束。
在main函数里,return(0)和exit(0)是一样的,子函数用return返回,而子进程用exit退出,调用exit时要调用一段终止处理程序,然后关闭所有I/O流
35.什么是孤儿进程?谁负责回收孤儿进程的内核空间资源?
孤儿进程:因父亲进程先退出而导致一个子进程被init进程收养的进程,即孤儿进程的父亲更改为init进程,该进程在孤儿进程退出后回收它的内核空间资源。
36.僵尸进程是什么?如何消灭僵尸进程?
僵尸进程:进程已经退出,但它的父亲进程还没有回收内核资源的进程,即该进程在内核空间的PCB没有释放。利用kill函数杀死父进程,僵尸函数会被init进程收养
37.简述进程对可靠信号和不可靠信号的处理过程。
如果进程在屏蔽某个信号的时间内,其他进程多次向其发送同一个信号,不可靠信号只 有一次未决记录,当进程解除屏蔽后,该信号只会被捕捉一次;而可靠信号操作系统会 记录所有的发送,当进程解除屏蔽后,操作系统会捕捉对等次数。
38.简单介绍一下信号的定义及其分类。
信号是表示消息的物理量,是运载消息的工具
信号是软件中断,是在软件层次上对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的
分类:确定信号和随机信号;连续信号和离散信;周期信号和非周期信号;能量信号与功率信号;因果信号与反因果信号;实信号与复信号
39.简单介绍一下匿名管道及其特点。
匿名管道用于进程之间通信,且仅限于本地父子进程之间通信,结构简单。
1.只提供单向通信,也就是说,两个进程都能访问这个文件,假设进程1往文件内写东 西,那么进程2 就只能读取文件的内容。
2.只能用于具有血缘关系的进程间通信,通常用于父子进程建通信
3.管道是基于字节流来通信的
4.依赖于文件系统,它的生命周期随进程的结束结束(随进程)
5。其本身自带同步互斥效果
40.请解释一下有名管道和匿名管道的区别?
匿名管道是由pipe函数创建 并打开的
命名管道是由mkfifo函数创建 的 ,打开用open
命名管道和匿名管道唯一的区别就是在创建的打开,一旦这些工作完成后,它们有相同的意义。
41.什么是线程?进程和线程的区别?
线程是操作系统能够进行运算调度的最小单位。
进程是运行中的程序,线程是进程的内部的一个执行序列
进程是资源分配的单元,线程是执行行单元
进程间切换代价大,线程间切换代价小
进程拥有资源多,线程拥有资源少
多个线程共享进程的资源
42.Please describe the difference of signal() and sigaction() in brief
signal在调用handler之前先把信号的handler指针恢复;sigaction调用之后不会恢复handler指针,直到再次调用sigaction修改handler指针。
这样,(1)signal就会丢失信号,而且不能处理重复的信号,而sigaction就可以。因为signal在得到信号和调用handler之间有个时间把handler恢复了,这样再次接收到此信号就会执行默认的handler。(虽然有些调用,在handler的以开头再次置handler,这样只能保证丢信号的概率降低,但是不能保证所有的信号都能正确处理)
2、signal在调用过程不支持信号block;sigaction调用后在handler调用之前会把屏蔽信号(屏蔽信号中自动默认包含传送的该信号)加入信号中,handler调用后会自动恢复信号到原先的值。
(2)signal处理过程中就不能提供阻塞某些信号的功能,sigaction就可以阻指定的信号和本身处理的信号,直到handler处理结束。这样就可以阻塞本身处理的信号,到handler结束就可以再次接受重复的信号。
编程:重点了解以下实验的程序
1.简述一下系统调用和库函数 举例说明
库函数:由系统提供,用户无须定义,也不必在程序中作类型说明,只需在程序前包含有该函数原型的头文件即可在程序中直接调用 如使用printf return
系统调用:操作系统的一部分;用户应用程序访问并使用内核所提供的各种服务的途径即是系统调用。如exit
2. open系统调用的打开标志
只读:O_RDONLY 只写:O_WRONLY 读写:O_RDWR
写入时添加至文件末尾:O_APPEND 不存在时创建:O_CREAT 截断文件为零长度:O_TRUNC
3 .vfs含义(虚拟文件系统)
虚拟文件系统(Virtual File System, 简称 VFS), 是 Linux 内核中的一个软件层,用于给用户空间的程序提供文件系统接口;同时,它也提供了内核中的一个 抽象功能,允许不同的文件系统共存。系统中所有的文件系统不但依赖 VFS 共存,而且也依靠 VFS 协同工作。VFS 作为一个通用的文件系统,抽象了文件系统的四个基本概念:文件、目录项 (dentry)、索引节点 (inode) 及挂载点,其在内核中为用户空间层的文件系统提供了相关的接口。VFS 实现了 open()、read() 等系统调并使得 cp 等用户空间程序可跨文件系统。VFS 真正实现了上述内容中:在 Linux 中除进程之外一切皆是文件。
4 Linux中主要有哪几种文件类型
普通文件、目录文件、管道文件、字符设备文件、软链接文件、块文件、套接字文件
5.软链接,硬链接特点与不足之处
硬链接存在以下几点的特性:
1.文件有相同的indoe 及文data block
2.只能对已存的文件进行创建
3.不能垮分区创建硬链接
4.不能对目录进行创建,只可对文件创建
5.删除一个硬链接文件并不影响其他有相同ionde 号的文件
软链接特点如下:
1.软连接有自己的文件属性及权限等
2.可对不存放在的文件或者目录创建软连接
3.软链接可垮分区创建
4.软接接可对文件或目录创建
5.创建软链接时,链接计数不会增加
6.删除软链接并不影响被指向的文件,但若被指向的原文件被删除,则相关软链接被称为死链接,若被指向路径文件被重新创建,死链接可恢复为正常的软链接
6.进程的状态
运行就绪状态:TASK_RUNNING
处于等待队伍中,可中断唤醒:TASK_INTERRUPTIBLE
处于等待队伍中,不可中断唤醒:TASK_UNINTERRUPTIBLE
进程资源用户空间被释放,等待父进程回收:TASK_ZOMBIE
进程被外部程序暂停,可被唤醒:TASK_STOPPED
7.Linxu进程通信的目的有以下几个特点:
(1)数据传输,一个进程需要将它的数据发送给另一个进程,发送的数据量在一个字节到几兆字节之间。
(2)共享数据,多个进程想要操作共享数据,一个进程对共享数据的修改,别的进程应该立刻看到。
(3)通知事件,一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某件事(如终止进程需要通知父进程)。
(4)资源共享,多个进程之间共享同样的资源。为了做到这一点,需要内核提供锁和同步机制。
(5)进程控制,有些进程希望完全控制另一个进程的执行(Denug),此时控制进程希望能够拦截另一个进程的所有信息和异常,
8什么是进程 进程资源由那两部分组成
进程是计算机中程序的一次数据集合运算的活动,是系统进行调度和分配的基本单元,是操作系统的基础 进程资源由内核空间进程资源 用户空间进程资源
9进程结构有哪些
(1)代码区(text segment) (2)全局初始化数据区/静态数据区(Data Segment)
(3)未初始化数据区(BSS) (4)栈区stack (5)堆区heap
10.程序与进程的区别
动态和静态的区别:进程是程序及其数据在计算机上的一次运行活动,是一个动态的概念,而程序是一组有序的指令集和,是一种静态的概念
生命周期的区别:进程是程序的一次执行过程,他是动态创建和消亡的,程序是一组代码的集合,他是永久存在的
组成的区别:进程拥有自己独立的处理环境和系统资源由程序 数据和PCB三部分组成,进程是管理事务的基本单元,程序是一组有序的集合指令
11.fork返回值的意义(有几个 分别代表什么)
Fork表示创建一个进程,其在父进程中返回值为子进程的id号,在子进程中返回值为0,如果创建失败则会返回-1,并且显示报错信息
12.return 和exit的区别
Return是语言级别的,其表示了堆栈的返回和处理,而exit是系统调用级别的,其表示
了结束一个进程,当在main函数中return和exit效果一样都是代表了结束一个进程,并且return 0和exit(0)都是返回了进程的结束状态
13. 什么是孤儿进程 谁负责回收孤儿进程
孤儿进程就是其在正常运行时,父进程已经结束,导致其内核资源无法被父进程回收,孤儿进程在父进程结束时将会把父进程设置为init进程,init会对孤儿进程的资源进行回收处理
14.什么是僵尸进程 如何消灭僵尸进程
僵尸进程就是进程已经结束但是其内核资源未被父进程进行回收处理,可以通过命令将僵尸进程的父进程杀死,然后僵尸进程就会把父进程设置为init,init会对其进行回收
15.fork 和 vfork的区别与联系
Fork和vfork都代表了创建一个子进程,但是vfork创建的子进程会和父进程共享资源,而fork会拷贝一份父进程的资源,fork创建的进程和父进程的执行顺序是无法确定的,但vfork创建的进程会先于父进程执行,当vfork子进程结束时父进程才会继续执行,
16.父进程调用wait可能出现的三种情况
当子进程都在执行时,wait会使父进程进入阻塞状态
当恰好有子进程结束时,wait会回收子进程资源并且获得子进程结束状态
当无子进程时wait会立刻返回-1 并且显示报错信息
17.简述可靠信号和不可靠信号的处理过程
当一个进程设置了信号屏蔽集时,向其发送多个同样的屏蔽信号,不可靠信号不管发送了几次,进程的未决信号集只会记录一次,当解除屏蔽后也只会捕捉一次,而可靠信号发送几次就会被记录几次,当结束屏蔽时,也会同样捕捉几次
18.信号的定义及分类
信号时表示消息的物理量,是消息传递的载体,信号是模拟中断的一种方式,其是软件层面的中断,在原理上,一个进程捕获一个信号和处理器收到一个中断请求是一样的
19.进程间的通信有哪几种方式
匿名管道 有名管道 信号 信号量 消息队列 共享内存
20.有名管道和匿名管道的区别
有名管道通过mkfifo进行创建,匿名管道通过pipe进行创建
有名管道其是基于磁盘上的标记文件来进行操作的,其需要进行open函数获得文件描述符。
匿名管道是创建于内核空间的
有名管道不只局限于具有血缘关系的进程间通信,只要任意两个进程可以读取到同一个有名管道文件描述符都可以进行通信,而匿名管道只能在具有血缘关系的进程间通信
21.简单介绍一下匿名管道及其特点
无名管道是一种特殊类型的文件,在内核中对应的资源即一段特殊内存空间,内核在这段空间中以循环队列的方式临时存入一个进程发送给另一个进程的信息。匿名管道用于进程之间通信,且仅限于本地父子进程之间通信,结构简单。
匿名管道是半双工的,只有一个写端和一个读端
匿名管道不是普通的文件,不是在磁盘上,而是在内存中的,所以它的生命周期随进程的结束而结束
匿名管道是基于字节流来通信的 其本身有同步互斥的效果
匿名管道只能使用于有血缘关系的进程之间的通信
22.描述一下signal和sigaction的区别与联系 (Please describe the difference of signal() and sigaction() in brief)
不同点:1.Signal只能调用信号处理函数,但是无妨向其输入附带的数据
Sigaction可以向信号处理函数传递信息,并且可以设置信号掩码,返回设置之前的sigaction
2.signal在调用过程不支持信号block;sigaction调用后在handler调用之前会把屏蔽信号加入信号中,handler调用后会自动恢复信号到原先的值。
3.signal处理过程中就不能提供阻塞某些信号的功能,sigaction就可以阻指定的信号和本身处理的信号,直到handler处理结束。这样就可以阻塞本身处理的信号,到handler结束就可以再次接受重复的信号。
相同点:都可以为信号设置信号处理函数 共用了同一个内核函数do_sigaction
23.Linux系统中信号的处理方式
忽略此信号 自定义捕捉信号方式 执行系统默认操作
24.简述一下信号产生的方式
按键产生 系统调用 软件条件产生 硬件异常产生 命令产生
25.信号生命周期
在目的进程中安装信号 信号在进程中产生
信号被注册 信号在进程中被注销 信号生命终止
26.简述什么是线程及特点
线程就是系统运算执行的最小单位,其所占资源较少
线程是进程的一个执行序列
线程可以看作是轻量化的进程,线程之间的切换代价小
27.pthread_exit()和pthread_cancel()的区别
Pthread_exit()是结束本线程
Pthread_cancel()是结束其他线程
28.简述互斥锁与读写锁的区别与联系
读写锁特点:(1)多个读者可以同时进行读(2)写者必须互斥(只允许一个写者写,也不能读者写者同时进行)(3)写者优先于读者(一旦有写者,则后续读者必须等待,唤醒时优先考虑写者)
互斥锁特点:一次只能一个线程拥有互斥锁,其他线程只有等待
两种都是锁,其都可以解决线程的互斥同步的线程安全问题,无论在什么时候只允许一个线程对资源进行操作,读写锁则可以再读时运行多个线程进行操作,写时只允许一个线程进行操作。
29.条件变量中 pthread_cond_wait 实现的步骤
解锁 判断条件是否成立 如果成立则上锁执行,不成立将进入阻塞状态
30.线程与进程的定义与区别
进程:指在系统中能独立运行并作为资源分配的基本单位,它是由一组机器指令、数据和堆栈等组成的,是一个能独立运行的活动实体。
线程:线程是进程中的一个实体,作为系统调度和分派的基本单位。
区别:(1)进程和线程的主要区别在于:每个进程都需要操作系统为其分配独立的内存地址空间,而同一进程中的所有线程在同一块地址空间中工作,(2)进程是运行中的程序,线程是进程的内部的一个执行序列(3)进程是资源分配的单元,线程是执行单元(4)进程间切换代价大,线程间切换代价小(5)进程拥有资源多,线程拥有资源少(6)多个线程共享进程的资源。
31.tcp和udp的区别
TCP需要连接,UDP是无连接的,发送数据之前不需要建立连接
TCP提供可靠的服务,通过TCP连接传送的数据,无差错,不丢失
TCP逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道
TCP 是面向字节流的,UDP 是基于数据报的
TCP 保证数据正确性,UDP 可能丢包
TCP 保证数据顺序,UDP 不保证
32.tcp的三次握手
连接建立,数据传输,连接释放
33.osi七层模型
- 物理层 2. 数据链路层 3. 网络层 4. 传输层 5. 会话层 6. 表示层 7. 应用层
34.raise函数
功 能: 向正在执行的程序发送一个信号
参数:signum:信号的编号。
标签:文件,调用,函数,qwerq,选填,线程,信号,进程 来源: https://blog.csdn.net/qq_52080750/article/details/122099122
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。