深入理解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内核开发之【进程管理】的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-03-30[译]漫画SELinux概念
- 2024-03-29linux 移动文件
- 2024-03-28linux .so file
- 2024-03-28Linux 磁盘管理
- 2024-03-28Linux学习笔记(十三)磁盘管理(一):磁盘分区
- 2024-03-26linux 创建 文件
- 2024-03-25使用SecureCRT对Linux vim进行颜色设置
- 2024-03-202019-2020-12 20199317 《Linux内核原理与分析》 第十二周作业
- 2024-03-20Linux运维的第二周总结
- 2024-03-13how to count number of directories in linux