深入理解Linux内核开发之【进程管理】

2022/8/23 5:22:52

本文主要是介绍深入理解Linux内核开发之【进程管理】,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

1.讲述进程的概念
通俗地理解:进程 = 程序(正在运行) + 资源(寄存器、环境变量、内存...)
2.Linux中进程与线程的区别

3.进程在Linux的用户空间还是内核空间运行?
进程处于用户空间的内存,且拥有的是虚拟内存而不是物理内存。
物理内存是内核负责管理。
整个系统只有一个内核空间,有很多用户空间。

4.进程如何申请内存

  • 通过系统调用 brk/sbrk/mmap 来申请分配虚拟内存。
  • 通过libc库直接使用malloc、free 进行操作。
  • 通过三方库: ptmalloc\jemalloc\scudo 等等。

5.进程运行到底是三态还是五态?
其实二者并不矛盾。
五态是在三态的基础上算上了新建状态和死亡状态。
新建状态和死亡状态都不是持久态。

6.进程的亲缘关系?
所有进程都通过父子关系连接构成一颗亲缘树。

7.第一个用户空间的进程是哪个?
是Init进程。 编号为0,通过硬编码创建。

8.零号进程到底是哪个进程?
从系统启动到应用,零号进程发生过变化。
最初的零号进程是BSP。

9.零号进程有两个亲生子进程?
除了Init之外还有一个内核线程kthreadd 内核线程可以看作是独立的进程

10.进程会话组具体指什么?
一个用户运行的所有进程构成了一个会话组。
11.进程组具体指什么?
一个作业流程运行的所有进程构成一个进程组。

12.进程会话组和进程组会继承父进程的吗?
默认继承,可以通过系统调用:setsid,setpgrp 创建新的 最先的为组长。

13.进程可以属于多个进程组/会话组吗?
不可以。进程必然属于某个进程组且只能属于一个进程组,同理会话组。

14.进程可以转会话组吗?
不可以。
15.进程可以转进程组吗?
同个会话组下可以。

16.Linux下进程的实现?
在标准的操作系统理论里,进程应该用PCB管理,线程用TCB管理。
但是linux因为历史原因
使用的是task_struct 进行管理;
task_struct是线程又是进程的代理。
巧妙地使用逻辑使二者共用一个控制块。

17.Linux 中task_struct 有些什么内容?
因为task_struct 既是线程又是进程的代理
所有task_struct的字段既包括线程的部分也包括进程的部分。

线程相关的是直接内嵌数据,与执行有关
进程相关的是指针指向其他数据,与资源有关(虚拟内存、文件系统..)

同一个进程所有线程都指向同一个mm(虚拟内存空间信息) -- 表面同一个进程下的线程在同一个用户空间下。

18.进程的进程标识符中pid、tgid的区别

19.进程的状态在Linux中如何表示?

__state:总体状态
exit_state : 进程死亡时的两个子状态

20.进程创建在Linux中的特点
进程创建与执行是分开的。

21.fork的具体实现?
调用了kernel_clone(原先的do_fork),
复制了task_struct
唤醒了新的进程

22.进程的生命周期



这篇关于深入理解Linux内核开发之【进程管理】的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程