本文主要0、1、2这三个进程来分析创建进程的大体流程。使用的代码是从官网上下载的linux6.4的版本
init_task的使用
代码位置:
init/init_task.c

作用:
此源文件主要就是定义了全局变量init_task,这是kernel启动默认的0号进程。这个进程是唯一非通过kernel_clone生成的进程,作为ap侧刚启动到后续主动创建进程中间的过渡阶段。并为前几个进程dup提供必要的数据信息。
使用:
此变量在ap侧启动时时,由汇编代码使用。位于:arch/arm64/kernel/head.S
primary_entry
->__primary_switch
->init_cpu_task


ap侧启动由汇编开始,在这里会将init_task这个全局数据读取到sp_el0寄存器进行初始化,而这个寄存器会被后续创建进程1,2时当作当前进程进行dup时使用,代码如下图
Linux进程创建流程解析
订阅专栏 解锁全文
3265

被折叠的 条评论
为什么被折叠?



