1.讲述进程的概念
通俗地理解:进程 = 程序(正在运行) + 资源(寄存器、环境变量、内存...)
2.Linux中进程与线程的区别
3.进程在Linux的用户空间还是内核空间运行?
进程处于用户空间的内存,且拥有的是虚拟内存而不是物理内存。
物理内存是内核负责管理。
整个系统只有一个内核空间,有很多用户空间。
4.进程如何申请内存
- 通过系统调用 brk/sbrk/mmap 来申请分配虚拟内存。
- 通过libc库直接使用malloc、free 进行操作。
- 通过三方库: ptmalloc\jemalloc\scudo 等等。
5.进程运行到底是三态还是五态还是七态?
其实二者并不矛盾。
五态是在三态的基础上算上了新建状态和死亡状态。
新建状态和死亡状态都不是持久态。
详细讲解:[]:https://www.bilibili.com/read/cv15188958/
- 三态是基本,具体有五态,Linux拓展到七态。
Linux的七态分别为RSDTtXZ,七态从而诞生许多关于进程的子问题
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.进程创建fork()之后,父进程和子进程谁先运行?
- 说法一:优先子进程
- 说法二:优先父进程
- 说法三:未定义行为,不做任何假设
事实上,先后顺序取决于系统硬件以及调度算法(不一定能调度成功),且难以测定(测试也可能欺骗了你)。
我更偏向于接受第三种说法,如果需要规定特定哪个步骤父进程或子进程先执行 就用锁或者信号量进行信号同步。
23.fork之后子进程会继承父进程的锁吗?
会。
子进程会继承其父进程的锁以及锁的状态,但是父子进程用的不是同一把锁,父进程解锁并不会影响到子进程的锁,即fork以后子进程和父进程使用的是两把锁。那么子进程就有可能死锁,比如我们在fork之前,一个线程对某个锁进行的lock操作,即持有了该锁,然后另外一个线程调用了fork创建子进程。可是在子进程中持有那个锁的线程却"消失"了,从子进程的角度来看,这个锁被“永久”的上锁了,因为它的持有者“蒸发”了,所以如果子进程中的这个线程对这个已经被持有的锁进行lock操作的话,就会发生死锁。
24.如何理解COW
25.在实际应用中遇到了多少个进程调度,需要注意的事项是什么?
22.进程的生命周期
23.就绪状态(Tasking_Running)的进程有哪些情况?
不要受英文的影响,处于就绪状态的进程包括有
- 已经可以运行在等待调度器分配的进程
- 正在运行的进程
24.僵尸进程和孤儿进程的区别?
不存在对比的意义,僵尸进程描述的是子进程先退出,父进程没回收,如果父进程也结束了,僵尸进程会被init进程托管变成孤儿进程
25.编程过程中是否遇到过僵尸进程?
肯定是有的,不过一般来说嵌入式的多进程即便产生了僵尸进程,父进程一般很快也会结束,而原先的僵尸进程
会交由1号进程(init进程来托管),然后会进行资源回收。
26.僵尸进程的危害?
- 内存泄漏
- 资源浪费
25.进程退出的状态有哪些?
- 【EXIT_ZOMBIE】 僵尸退出状态:子进程先退出了,而父进程没有调用wait\waitpid 收集退出的进程。
26.进程信号存在的意义
不重要
27.进程信号的工作原理
理解为软件中断,信号虽然是控制进程的一部分,不过更多出现在进程通信讨论。
本文来自博客园,作者:快乐过了阈值,转载请注明原文链接:https://www.cnblogs.com/black-worrior-2000/p/16612911.html
墨愁前路无知己,天下谁人不识君。
浙公网安备 33010602011771号