1、Linux进程管理之基础知识介绍
进程就是处于执行期的程序,但进程不仅仅局限于一段可执行程序代码(也就是所谓的代码段,text section),从上面的数据结构可以看到,进程还包含其他的资源,比如打开的文件,挂起的信号,处理器状态,内核数据结构,内存映射地址空间等。 在操作系统中,内核的调度对象时线程,而不是进程。线程时进程中的活动对象。每个线程都拥有一个独立的程序计数器、进程栈和一组进程程寄存器。
在传统的 Unix 系统中,一个进程只包含一个线程,但是在现代操作系统中,一个进程可以包含多个线程。在 Linux 系统中线程的实现非常特别:它对线程和进程并不特别区分。对于 Linux 而言,线程只不过是一种特殊的进程罢了。后续的文章专门介绍进程和线程的创建过程进行分析。
在操作系统中,内核把进程的列表存放在一个叫任务队列的双向循环链表中,链表中的每个元素类型就是上述的数据结构 task_struct, 称为进程描述符的结构。该结构中包含了具体进程的所有信息。task_struct 在32位机器上,大约有1.7KB的大小。
task_struct 结构在内存中的存放
在分析之前,需要了解下一个概念 -- 内核栈。
我们知道一个在32系统中,进程的虚拟地址空间大小为4G。在这4G虚拟机制空间中有一段虚拟地址空间为栈的区域,该栈的区域为用户态栈。该栈记录的是在用户态进程的函数调用过程。
原作者: Linux码农