进程是Unix操作系统的最重要的抽象之一,它是处于执行期的程序,但是它不仅仅包括代码,还包括相关的文件,挂起信号等资源。线程是进程活动的对象,每个线程都有一个程序计数器,进程栈和一组进程计数器。Linux中线程是进程的一种特例。
进程提供两种虚拟机制,虚拟处理器和虚拟内存。
Linux系统中通过fork()系统调用来产生新的进程,产生的方式是复制当期的进程来产生新进程,所以调用fork()的进程称为父进程,新产生的进程被称为子进程。Linux系统中fork()是调用clone()这个系统调用。
1、进程描述符及任务结构
内核进程放在一个角task_list的双向循环链表里,每一个节点都是一个task_struct,称为进程描述符,该结构定义在<linux/sched.h>中。task_struct包含了描述一个进程的完整信息。
1.1分配进程描述符
Linux通过slab分配器来分配task_struct结构,这样能达到对象复用和缓存着色,(通过预分配和重复使用task_struct,可以避免动态分配和释放所带来的资源消耗,从而使得进程创建的速度较快)。现在不需要专门的寄存器,只需要在栈底放一个thread_info,这个struct可以方便快速计算出tas