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.进程的生命周期
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/281705.html