读书人

linux内核-过程管理(二)

发布时间: 2013-10-08 17:08:58 作者: rapoo

linux内核--进程管理(二)
一、进程

进程就是出于执行期的程序,但进程并不仅仅局限于一段可执行的程序代码。通常进程还要包含其他资源,像打开的文件,挂起的信号,内核的内部数据,处理器状态,一个或多个具有内存映射的内存地址空间以及一个或多个执行线程,存放全局变量的数据段。

执行线程,进程线程,是在进程中活动的对象。每个线程都拥有一个独立的程序计数器、进程栈和一组进程寄存器。内核调用的对象是线程不是进程。程序本身不是进程,进程是处于执行期的程序以及相关的资源的总称。完全可能存在两个或多个不同的进程执行的是同一个程序。并且两个或两个以上并存的in成还可以共享许多诸如打开的文件、地址空间之类的资源。

二、进程描述符及任务结构

内核把进程的列表存放在叫做任务队列的双向循环链表中。链表中的每一个都是类型为task_struct、称为进程描述符的结构,结构定义在<linux/sched.h>文件中。进程描述符中包含一个具体进程的所有信息。此结构体相当大,但包含了内核管理一个进程所需的所有信息。进程描述符中包含的数据能完整地描述一个正在执行的程序:它打开的文件、进程的地址空间、挂起的信号、进程的状态......

1)分配进程描述符

linux通过slab分配器分配task_struct结构,现在用slab分配器动态生成task_struct,只需在栈底或栈顶创建一个新的结构struct thread_info.

struct thread_info{

struct task_struct *task;

struct exec_domain *exec_domain;

_u32 flags;

_u32 status;

_u32 cpu;

int preempt_count;

mm_segment_t addr_limit;

struct restart_block restart_block;

void *sysenter_return;

int uaccess_err;

};

linux内核-过程管理(二)

每个任务的thread_info结构在它的内核栈的尾端分配。结构中task域中存放的是指向该任务实际task_struct的指针。

三、进程创建四、线程在linux中的实现五、进程终结

读书人网 >UNIXLINUX

热点推荐