Linux中进程管理

x33g5p2x  于2021-09-28 转载在 Linux  
字(0.6k)|赞(0)|评价(0)|浏览(405)

进程结构

我们都知道 进程就是动态的程序。一个程序想要转化为进程运行,首先要经过编译、动态链接,形成一个ELT,二进制可执行文件。

然后将ELT文件装配到内存中。

下图是进程的所有信息,相关信息是存在内核空间中的,是由内核程序统一管理的。

上图就是一个进程要在内核中保存以上的所有信息。一个进程对应一个task的结构,然后通过链表或者红黑树的形式来将所有的进程组合起来。

操作系统内核就依靠链表或者红黑树来进行进程调度。

上述的管理信息保存在内核空间中,用户空间中保存具体的栈、MMAP、代码等信息

下图是用户空间中保存的信息

主要分为以下几部分:
1、Text
二进制代码,以函数为单位进行存储。

2、Data区域
全局变量数据

3、堆区域
用来申请动态内存

4、栈区域
用来执行函数

5、MMAP区域
用来申请动态大内存

线程

Linux中线程和进程都是对应一个Task。
只不过通过tgid来区分,如果是一个进程,那么tgid = pid。

如果通过一个进程来创建一个线程,那么线程对应的tgid = 进程的pid。

进程就相当于是一个主线程。

线程只有一个栈、寄存器信息,直接使用进程的内存信息、文件信息、全局变量等信息,创建和销毁都很轻量级。

调度

当时钟过了或者线程主动发出中断,CPU会响应中断,然后进行调度,通过一定的原则 从红黑树中取出一个最合适的线程。

相关文章