当前位置: 首页 > article >正文

Linux0号进程的静态创建

Linux0号进程的静态创建

    • 一、引言
    • 二、静态创建的含义
    • 三、静态创建的特点
      • 1. 编译时确定
      • 2. 无需额外的系统调用
      • 3. 初始化顺序固定
    • 四、与动态创建的对比
      • 1. 动态创建
      • 2. 对比总结

一、引言

linux启动的第一个进程是0号进程,是静态创建的,称为idle进程或者swapper进程。
在0号进程启动后会接连创建两个进程,分别是1号进程和2和进程。
1号进程最终会使用execve函数去调用可init可执行文件,init进程最终会去创建所有的应用进程,所以被称为inti进程。
2号进程会在内核中负责创建所有的内核线程,被称为kthreadd进程。
所以说0号进程是1号和2号进程的父进程;1号进程是所有用户态进程的父进程;2号进程是所有内核线程的父进程。

最近在学习Linux操作系统的相关知识,看到上述内容不由得疑惑:什么是静态创建?于是产生了这篇博客

在 Linux 内核启动过程中提到的“静态创建”是相对于动态创建而言的,下面详细解释其含义

二、静态创建的含义

静态创建指的是在编译内核时就将进程相关的数据结构和初始化代码硬编码到内核镜像中,而不是在运行时通过常规的系统调用(如 fork() 等)来创建进程。对于 Linux 内核中的 0 号进程(idle 进程或 swapper 进程),它是在内核启动阶段由内核代码直接初始化和创建的,不依赖于运行时的动态分配和创建机制。

三、静态创建的特点

1. 编译时确定

静态创建的进程信息在编译内核时就已经确定,其数据结构(如进程控制块 task_struct)的内存布局和初始值都被预先定义好并嵌入到内核二进制文件中。例如,0 号进程的初始状态、优先级、寄存器值等信息在编译时就已经被设置好,内核启动时直接使用这些预设值来初始化进程。

2. 无需额外的系统调用

与动态创建进程不同,静态创建不需要通过专门的系统调用(如 fork()clone())来创建新进程。因为它是内核代码的一部分,在内核启动过程中直接按照预定的逻辑进行初始化,减少了系统调用带来的开销和复杂性。

3. 初始化顺序固定

静态创建的进程通常有固定的初始化顺序,这是由内核代码的执行流程决定的。例如,Linux 内核启动时首先会创建 0 号进程,然后由 0 号进程创建 1 号进程和 2 号进程,这种顺序是在编译内核时就确定好的,确保了内核启动的稳定性和一致性。

四、与动态创建的对比

1. 动态创建

动态创建是指在系统运行过程中,通过系统调用(如 fork()clone() 等)来创建新的进程。这些系统调用会在内核中分配新的进程控制块、复制父进程的资源,并将新进程加入到调度队列中。动态创建的进程可以根据程序的运行逻辑和需求灵活地创建和销毁,适用于各种动态的应用场景。

2. 对比总结

对比项静态创建动态创建
创建时机编译时确定,内核启动阶段创建系统运行时根据程序需求创建
创建方式内核代码直接初始化,无需系统调用通过系统调用(如 fork()clone())创建
灵活性低,创建顺序和参数固定高,可以根据程序逻辑灵活创建和销毁
适用场景内核启动过程中创建关键进程(如 0 号进程)应用程序中动态创建子进程执行任务

综上所述,静态创建是 Linux 内核启动过程中一种特殊的进程创建方式,它为内核的初始化和稳定运行提供了基础,确保了关键进程能够按照预定的顺序和参数被正确创建。


http://www.kler.cn/a/539750.html

相关文章:

  • DeepSeek训练成本与技术揭秘
  • 了解网络层
  • postgreSQL16.6源码安装
  • android手机安装deepseek-r1:1.5b
  • 4G核心网的演变与创新:从传统到虚拟化的跨越
  • 开放式TCP/IP通信
  • 如何在 Vue 中使用 mixins?
  • HTML之CSS定位、浮动、盒子模型
  • Spring AI 介绍
  • 【设计模式】【行为型模式】策略模式(Strategy)
  • windows下搭建tftp服务器+网络启动Linux
  • 苹果可折叠iPad:2028年的科技盛宴?
  • 30~32.ppt
  • 计算机网络面经
  • 实验7 路由器之间IPsec VPN配置
  • UE学习日志#25、26 C++笔记#11 智能指针
  • Gemini 2.0模型更新:谷歌最新AI大模型全面开启智能时代
  • java数据结构_二叉树_5.3 (几道例题搞定二叉树的遍历)
  • BMC开发技术栈指南
  • SQL自学,mysql从入门到精通 --- 第 14天,主键、外键的使用
  • Gitlab中如何进行仓库迁移
  • XILINX硬件设计-(1)LVDS接口总结
  • 【Arxiv 大模型最新进展】TableRAG: 提高大语言模型在理解和推理大规模表格数据的效率和性能
  • oscp备考,oscp系列——VulnOSv2靶场,两种方法获取低权限shell
  • 三星OEM版SSD固态硬盘Model码对应关系
  • 【Spring Boot】Spring Boot解决循环依赖