linux系统分析之进程线程.pdf
《linux系统分析之进程线程.pdf》由会员分享,可在线阅读,更多相关《linux系统分析之进程线程.pdf(6页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、1.什么是进程进程是处于执行期的程序以及它所包含的所有资源的总称,包括虚拟处理器,虚拟空间,寄存器,堆栈,全局数据段等。在 Linux 中,每个进程在创建时都会被分配一个数据结构,称为进程控制块(Process Control Block,简称 PCB)。PCB 中包含了很多重要的信息,供系统调度和进程本身执行使用。所有进程的 PCB 都存放在内核空间中。PCB 中最重要的信息就 是进程 PID,内核通过这个 PID 来唯一标识一个进程。PID 可以循环使用,最大值是 32768。init 进程的 pid 为 1,其他进程都是 init 进程的 后代。除了进程控制块(PCB)以外,每个进程都有
2、独立的内核堆栈(8k),一个进程描述符结构,这些数据都作为进程的控制信息储存在内核空间中;而进程的用户空间主要存储代码和数据。2)进程的创建进程是通过调用:fork(),:vfork()和:clone()系统调用创建新进程。在内核中,它们都是调用 do_fork 实现的。传统 的 fork 函数直接把父进程的所有资源复制给子进程。而 Linux 的:fork()使用写时拷贝页实现,也就是说,父进程和子进程共享同一个资源拷贝,只有当数据发生改变时,数据才会发生复制。通常的情况,子进程创建后会立即调用 exec(),这样就避免复制父进程的全部资源。三者的区别如下::fork():父进程的所有数据结
3、构都会复制一份给子进程(写时拷贝页)。:vfork():只复制 task_struct 和内核堆栈,所以生成的只是父进程的一个线程(无独立的用户空间)。:clone():功能强大,带了许多参数。:clone()可以让你有选择性的继承父进程的资源,既可以选择像:vfork()一样和父进 程共享一个虚拟空间,从而使创造的是线程,你也可以不和父进程共享,你甚至可以选择创造出来的进程和父进程不再是父子关系,而是兄弟关系。3.进程的撤销进程通过调用 exit()退出执行,这个函数会终结进程并释放所有的资源。父进程可以通过 wait4()查询子进程是否终结。进程退出执行后处于僵 死状态,直到它的父进程调用
4、 wait()或者 waitpid()为止。父进程退出时,内核会指定线程组的其他进程或者 init 进程作为其子进程的新父进 程。当进程接收到一个不能处理或忽视的信号时,或当在内核态产生一个不可恢复的 CPU 异常而内核此时正代表该进程在运行,内核可以强迫进程终止。4.进程管理内核把进程信息存放在叫做任务队列(task list)的双向循环链表中(内核空间)。链表中的每一项都是类型为 task_struct,称为进程描述符结构(processdescriptor),包含了一个具体进程的所有信息,包括打开的文件,进程的地址空间,挂起的信号,进程的状态等。Linux 通过 slab 分配器分配 t
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- linux 系统分析 进程 线程
限制150内