(四)进程的生命周期——起源

操作系统:linux
处理器:arm
内核版本:4.x

目录:

  • 0号进程
  • 1号进程、2号进程


提到进程生命周期就不得不说一说进程的起源:进程是怎么来的?第一个进程是谁?

0号进程

实际上计算机中第一个进程并不是动态产生的,0号进程的信息在数据段中,预先设定好了,其对应的内核栈也在特定的位置(数据段中,由链接脚本arch/arm/kernel/vmlinux.lds.S决定)。

(四)进程的生命周期——起源_第1张图片

(四)进程的生命周期——起源_第2张图片

cpu在汇编阶段建立完页表、开启MMU,跳转到start_kernel之前,会将指针指向0号进程的栈顶偏移8 byte的位置。
(四)进程的生命周期——起源_第3张图片
(四)进程的生命周期——起源_第4张图片

#define THREAD_START_SP>>   (THREAD_SIZE - 8)

可以用QEMU验证上面的结论,进入start_kernel时,sp指向了0号进程的栈,其对应的进程PCB是init_task。
(四)进程的生命周期——起源_第5张图片


1号进程、2号进程

在start_kernel最后一步,rest_init中会依据进程0的PCB为模板创建出kernel_init进程和kthreadd进程。(kernel_thread就是调用do_fork)
(四)进程的生命周期——起源_第6张图片
kernel_init进程会去解析用户配置好的脚本,是用户空间的第一个进程。
(四)进程的生命周期——起源_第7张图片
kthreadd进程是内核线程的父进程,每当有内核线程需要创建,通过调用kthread_create将自己添加到kthread_create_list时,kthreadd会被唤醒来创捷这些内核线程。
(四)进程的生命周期——起源_第8张图片
(四)进程的生命周期——起源_第9张图片

你可能感兴趣的:(Linux,Task,Linux内核修炼)