文章目录
进程管理
进程
进程:处于执行期的程序以及相关资源(打开的文件、挂起的信号、内核内部数据、处理器状态等)的总称
线程:是在进程中活动的对象,每个线程都拥有一个独立的程序计数器、进程栈和一组进程寄存器。内核调度的对象是线程,不是进程
Linux不区分进程和线程,对它来说,线程只不过是一种特殊的进程而已
现代操作系统的两种虚拟机制:
- 虚拟处理器:给进程一种假象,让它觉得自己在独享处理器
- 虚拟内存:让进程在分配和管理内存时觉得自己拥有整个系统的内存资源
注意:线程之间可以共享虚拟内存,但是都拥有自己的虚拟处理器
进程描述
内核把进程的列表存放在叫做任务队列的双向循环链表中。链表中的每一项类型为task_struct
,称为进程描述符的结构,描述了一个具体进程的所有信息
分配进程描述符
Linux通过slab分配器分配task_struct
结构,这样能够对象复用和缓存着色。
每个任务的thread_info
结构在它的内核栈尾端分配,其中task
域存放的是指向该任务实际task_struct
的指针
struct thread_info {
struct task_struct *task;
struct exec_domain *exec_domain;
...
}