进程定义
进程是处于执行期的程序(目标代码存放在某种存储介质上)。进程不局限于一段可执行程序代码(代码段),通常还包含其他资源,像打开的文件,挂起的信号,内核内部数据,处理器状态,一个或多个具有内存映射的内存地址空间及一个或多个执行线程,存放全局变量的数据段等。
线程,进程中活动的对象,拥有独立的程序计数器和一组进程寄存器。内核调度对象是线程。同一个进程的线程之间共享虚拟内存,但每个都拥有各自虚拟处理器。
内核中大部分处理进程的代码都是直接通过task_struct(进程描述符)进行的。
进程状态
进程创建
fork()+exec()写时复制
fork()的实际开销就是复制父进程的页表及给子进程创建唯一的进程描述符
线程
同一个程序内共享内存地址空间运行的一组线程,这些线程还可以共享打开的文件和其他资源。Linux内核把线程当做进程实现。每个线程有自己的task_struct。
线程与父进程共享地址空间、文件系统资源、文件描述符和信号处理程序。
进程终结
进程调用exit()函数后,处于EXIT_ZOMBIE退出状态。它占用的所有内存就是内核栈、thread_info结构和task_struct结构,此时进程存在唯一目的是向他的父进程提供信息。
进程调度
调度策略通常需要在两者矛盾中寻找平衡:进程响应时间短、系统高吞吐量。
参考文献:linux内核设计与实现