我们都知道 进程就是动态的程序。一个程序想要转化为进程运行,首先要经过编译、动态链接,形成一个ELT,二进制可执行文件。
然后将ELT文件装配到内存中。
下图是进程的所有信息,相关信息是存在内核空间中的,是由内核程序统一管理的。
上图就是一个进程要在内核中保存以上的所有信息。一个进程对应一个task的结构,然后通过链表或者红黑树的形式来将所有的进程组合起来。
操作系统内核就依靠链表或者红黑树来进行进程调度。
上述的管理信息保存在内核空间中,用户空间中保存具体的栈、MMAP、代码等信息
下图是用户空间中保存的信息
主要分为以下几部分:
1、Text
二进制代码,以函数为单位进行存储。
2、Data区域
全局变量数据
3、堆区域
用来申请动态内存
4、栈区域
用来执行函数
5、MMAP区域
用来申请动态大内存
Linux中线程和进程都是对应一个Task。
只不过通过tgid来区分,如果是一个进程,那么tgid = pid。
如果通过一个进程来创建一个线程,那么线程对应的tgid = 进程的pid。
进程就相当于是一个主线程。
线程只有一个栈、寄存器信息,直接使用进程的内存信息、文件信息、全局变量等信息,创建和销毁都很轻量级。
当时钟过了或者线程主动发出中断,CPU会响应中断,然后进行调度,通过一定的原则 从红黑树中取出一个最合适的线程。
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/qq_40276626/article/details/120529220
内容来源于网络,如有侵权,请联系作者删除!