进程管理:
进程:进程就是处于执行期的程序,但进程不局限于某一可执行代码段,通常包括内核内部数据、处理器状态等其他资源,一个或多个具有内存映射的内存地址空间及一个或多个执行线程。程序本身不是进程,进程是处于执行期的程序以及相关的资源总称。
线程:是在进程中的活动对象。内核调度对象是线程,而不是进程。Linux对进程和线程并不特别区分。对Linux而言线程是一种特殊的进程。
内核把进程的列表存放在叫做任务队列(task list)的双向循环链表中。链表中的每一项都是类型为task_struct,称为进程描述符(process descriptor)的结构。进程描述符中包含一个据图进程的所有信息。
Linux通过slab分配task_struct结构。在2.6内核版本以前,各个进程的task_struct存放在它们内核栈的尾端,这是为了让较少寄存器的硬件体系结构只要通过栈指针就能计算出它的位置。现在由slab分配器动态生成task_struct,所以只需在栈底(对于向下增长的栈来说)或栈顶(对于向上增长的栈来说)创建一个新的结构struct thread_info。thread_info中task域中存放的是指向该任务实际task_struct的指针。
五种进程状态:
1.TASK_RUNNING:运行
2.TASK_INTERRUPTIBILE:可中断
3.TASK_UNINTERRUPTIBILE:不可中断
4._TASK_TRACED:被其它进程跟踪的进程
5._TASK_STOPPED:进程停止执行
set_task_state(task,state); 调整进程状态函数
所有的进程都是PID为1的init进程的后代。内核在系统启动的最后阶段启动init进程。该进程读取系统的初始化脚本(initscript)并执行其它的相关程序,最终完成系统启动的整个过程。系统的每个进程必有一个父进程,相应每个进程也可以拥有0个或多个子进程。每个task_struct都包含一个指向其父进程task_struct,叫做parent的指针,还包括一个称为children的子进程链表。