LINUX

1.简述一下系统调用和库函数 举例说明 库函数:由系统提供,用户无须定义,也不必在程序中作类型说明,只需在程序前包含有该函数 原型的头文件即可在程序中直接调用 如使用 printf return 系统调用:操作系统的一部分;用户应用程序访问并使用内核所提供的各种服务的途径即是系 统调用。如 exit

2.open 系统调用的打开标志 只读:O_RDONLY 只写:O_WRONLY
读写:O_RDWR 写入时添加至文件末尾:O_APPEND 不存在时创建:O_CREAT 截断文件为零长度:O_TRUNC

3. vfs 虚拟文件系统
虚拟文件系统(VirtualFileSystem, 简称 VFS), 是 Linux 内核中的一个软件层,用于给用 户空间的程序提供文件系统接口;同时,它也提供了内核中的一个 抽象功能,允许不同的 文件系统共存。系统中所有的文件系统不但依赖 VFS 共存,而且也依靠 VFS 协同工作。

4. VFS 是什么
VFS 的作用就是采用标准的 Unix 系统调用读写位于不同物理介质上的不同文件系统,即 为 各类文件系统提供了一个统一的操作界面和应用编程接口。VFS 是一个可以让 open()、read()、 write()等系统调用不用关心底层的存储介质和文件系统类型就可以工作的粘合层。

5. linux 文件类型 普通文件、目录文件、管道文件、字符设备文件、软链接文件、块文件、套接字文件

6. 什么是进程,进程资源由哪两个组成 进程是计算机中程序的一次数据集合运算的活动,是系统进行调度和分配的基本单元,是操 作系统的基础
进程资源由内核空间进程资源 用户空间进程资源

7. 进程结构 一个正在运行着的进程在内存空间中申请的代码区、初始化数据区、未初始化数据区、堆区、 栈区 5 个部分。

8. 程序与进程的区别 动态和静态的区别:进程是程序及其数据在计算机上的一次运行活动,是一个动态的概念, 而程序是一组有序的指令集和,是一种静态的概念 生命周期的区别:进程是程序的一次执行过程,他是动态创建和消亡的,程序是一组代码的 集合,他是永久存在的
组成的区别:进程由程序 数据和 PCB 三部分组成,程序是一组有序的集合指令

9.fork 返回值的意义
如果执行成功,在父进程中将返回子进程的 PID,类型为 pid_t,子进程将返回 0,以区别父 子进程。
如果执行失败,则在父进程中返回-1,错误原因存储在 errno 中。

10.return 和 exit 的区别:
return 是语言级别的,它表示了调用堆栈的返回;而 exit 是系统调用级别的,它表示一个进 程的结束。
在 main 函数里,return(0)和 exit(0)是一样的,子函数用 return 返回,而子进程用 exit 退出, 调用 exit 时要调用一段终止处理程序,然后关闭所有 I/O 流

11. 什么是孤儿进程 谁负责回收孤儿进程 孤儿进程就是其在正常运行时,父进程已经结束,导致其内核资源无法被父进程回收,孤儿 进程在父进程结束时将会把父进程设置为 init 进程,init 会对孤儿进程的资源进行回收处理

12.僵尸进程是什么,谁消灭 僵尸进程:进程已经退出,但它的父亲进程还没有回收内核资源的进程,即该进程在内核空 间的 PCB 没有释放。利用 kill 函数杀死父进程,僵尸进程会变成孤儿进程被 init 进程收养。

13. 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

18. 请解释一下有名管道和匿名管道的区别?
匿名管道是由 pipe 函数创建 并打开的
命名管道是由 mkfifo 函数创建 的 ,打开用 open 命名管道和匿名管道唯一的区别就是在创建的打开,一旦这些工作完成后,它们有相同的意 义

19.简单介绍一下匿名管道及其特点

匿名管道是半双工的,只有一个写端和一个读端 匿名管道不是普通的文件,不是在磁盘上,而是在内存中的,所以它的生命周期随进程的结 束而结束
匿名管道是基于字节流来通信的
其本身有同步互斥的效果
匿名管道只能使用于有血缘关系的进程之间的通信

20.Please describe the difference of signal() and sigaction() in brief(描述一下 signal 和 sigaction 的区别与联系英文题)
不同点:signal 只能调用信号处理函数,但是无妨向其输入附带的数据
sigaction 可以向信号处理函数传递信息,并且可以设置信号掩码,返回设置之前的 sigaction 相同点:都可以为信号设置信号处理函数

共用了同一个内核函数 do_sigaction

21.信号处理方式 忽略此信号。 自定义捕捉信号函数。 执行系统默认操作。

22. 信号产生的方式 当用户按某些键时产生信号。 硬件异常产生信号。 终止进程信号。 软件异常产生信号

23.信号的生命周期 在目的进程中安装信号;进程产生信号;信号在目的进程中被注册(目的进程收到信号); 信号在进程中被注销(在执行相应处理函数之前);信号生命终止(执行完响应处理函数后 再恢复到被中断的位置继续执行)。

24.简述什么是线程及特点 线程就是系统运算执行的最小单位,其所占资源较少 线程是进程的一个执行序列 线程可以看作是轻量化的进程,线程之间的切换代价小

25.pthread_kill 函数和 pthread_cancle 函数的区别:(两个都是终止进程的)
pthread_kill 函数的功能是向指定线程发送信号,信号为 0 时用于检查此线程 ID 的线程 是 否存活。
pthread_cancel 函数的功能是给线程发送取消信号,使线程从取消点退出。

26. pthread_exit()和 pthread_cancel()的区别 pthread_exit()是结束本线程 pthread_cancel()是结束其他线程

27. 简述互斥锁与读写锁的区别与联系。
区别:读写锁区分读者和写者,而互斥锁不区分 互斥锁同一时间只允许一个线程访问该对象,无论读写;读写锁同一时间内只允许一个写者, 但是允许多个读者同时读对象。
联系:读写锁在获取写锁的时候机制类似于互斥锁。

28.条件变量中 pthread_cond_wait 实现的步骤
解锁 判断条件是否成立 如果成立则上锁执行,不成立将进入阻塞状态

29. 线程与进程的区别
进程是资源分配的最小单位,线程是程序执行的最小单位。 进程有自己的独立地址空间,每启动一个进程,系统就会为它分配地址空间,建立数 据 表来维护代码段、堆栈段和数据段。而线程是共享进程中的数据的,使用相同的地址 空 间,因此 CPU 切换一个线程的花费远比进程要小很多,同时创建一个线程的开销也 比 进程要小很多。 线程之间的通信更方便,同一进程下的线程共享全局变量、静态变量等数据,而进程 之 间的通信需要以通信的方式进行。 多进程程序更健壮,多线程程序只要有一个线程死掉,整个进程也死掉了,而一个进 程 死掉并不会对另外一个进程造成影响,因为进程有自己独立的地址空间。

30. tcp 和 udp 的区别
TCP 需要连接,UDP 是无连接的,发送数据之前不需要建立连接 TCP 提供可靠的服务,通过 TCP 连接传送的数据,无差错,不丢失 TCP 逻辑通信信道是全双工的可靠信道,UDP 则是不可靠信道

31. 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 以表示收到了, 然后两边就可以开始数据发送数据了

32. osi 七层模型
应用层 表示层 会话层 传输层 网络层 数据链路层 物理层

33.使用 gdb 调试程序时,next 和 step 命令的作用? next:单步运行,不进入函数内部; setp:单步运行,进入函数内部

34.Linux 系统的设备文件分为三类?

字符设备文件、块设备文件和网络设备文件

35.标准 I/O 提供了三种类型的缓冲,分别是? 全缓冲,行缓冲,不带缓冲

36. 一个完整的信号生命周期包含 4 个重要的事件,这 4 个重要事件分别是? 信号诞生 信号在进程中注册 信号在进程中注销 信号处理函数执行完毕

37.互斥锁只有两种状态,即? 开锁和上锁

38.在标准 IO 库中,rewind 函数作用? 将文件流指针指向文件起始位置

39.c 语言中没有明确给定初值的全局变量和静态变量存放在哪儿? 未初始化数据区

40.函数 geteuid()用于得到进程的? 用户有效 UID

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值