前言
本篇主要对进程和线程的概念进行分析,kernel中的进程、线程模型,涉及进程、用户态线程、内核态线程、轻量级进程(LWP),在分析之前,需要阅读What are threads?,该文章有便于理解操作系统中线程、用户态线程和内核态线程的对应关系。
不同操作系统对线程和进程的理解及对应关系稍有不同(M:N、N:1、1:1),本篇只针对Linux操作系统。
本篇文章是阅读ULK3及网上相应文章后的个人总结笔记,加上了我的理解,这部分内容会加以标识,如有错误,欢迎指正。
进程
根据ULK3上对进程的定义:“进程是程序执行时的一个实例”、“一个运行程序的执行上下文”、“是系统分配资源的最小单位”。
描述一个进程
当我们谈论进程时,我们在谈论什么?
众所周知,kernel中用进程描述符task_struct来定义一个进程:
关于task_struct即各个成员的含义,属于老生常谈,这里就不讨论了,但是从上图可以看出一个进程的基本组成如下:
- thread info 包含了task_struct和该进程的stack
- mm,进程的内存描述符,即指明了进程的地址空间,通过它可以找到该线程所有可用的线性地址
- tty相关
- fs,该进程可见文件系统集合
- files,该进程打开的文件列表