[架构之路-31]:目标系统 - 系统软件 - Linux OS 什么是Linux1号进程? init进程与systemD的比较?
Posted 文火冰糖的硅基工坊
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[架构之路-31]:目标系统 - 系统软件 - Linux OS 什么是Linux1号进程? init进程与systemD的比较?相关的知识,希望对你有一定的参考价值。
目录
第1章 Linux内核启动应用程序的方式
1.1 什么是Linux 0号进程:idle进程
0号进程, 通常也被称为idle进程,是内核无事可做时执行的进程。是空闲进程,也就是死循环。
struct task_struct init_task = INIT_TASK(init_task);
set_task_stack_end_magic(&init_task);
使用全局变量来设置进程全局环境。
作用:
1 初始化各个模块 (MM/FS/VFS/sched)
2 创建1号进程 2号进程
1号进程 kernel_thread(kernel_init, NULL, CLONE_FS);
2号进程 kernel_thread(kthreadd, NULL, CLONE_FS | CLONE_FILES);
3 把自己变成idle。(当任务链没有任务,会执行idle进程)
cpu_startup_entry
do_idle();
1.2 什么是Linux 1号进程:init进程
run_init_process(execute_command);
do_execve
try_to_run_init_process("/sbin/init")
try_to_run_init_process("/etc/init")
try_to_run_init_process("/bin/init")
try_to_run_init_process("/bin/sh")
主要用户加载根文件系统init进程,然后回到应用态,它是所用应用程序进程的祖先进程
1.3 Linux 1号进程的作用
(1)负责在用户空间完成对Linux系统进一步的初始化,mount文件系统、动态插入内核模块等。
(2)它是所有用户空间进程的祖先进程,负责fork系统中所有的其他用户进程。
(3)负责用户空间应用程序的初始化。
(4)负责监控和管理用户空间的进程。这是1号进程一项重要的职责。
1.4 Linux 1号进程启动应用程序的两种机制
从上图可以看出:根文件系统是由Linux内核进行加载的,根文件系统是挂载在虚拟文件系统之下。当内核加载或挂载完根文件系统之后,Linux就会读取根文件系统中的可执行文件,执行后续的应用程序的初始化。
Linux提供了两种不同机制启动和管理根文件系统中的程序。
(1)内核版本2.6以及之前的版本,内核是通过init进程和inittab来加载根文件系统中的程序。
(2)内核版本3.10以及以后的版本,内核是通过SystemD进程和xxx.target文件来加载根文件系统中的程序。
根文件系统中的程序包括:
- Linux的系统程序
- 内核模块ko
- 用户程序
第2章 init进程机制与systemD机制的比较
2.1 出现的时间不同
- Centos6以前用的都是init来启动服务;
- Centos7开始默认使用了systemd管理服务;
2.2 串行与并行的方式不同
- init串行启动所有服务;启动时间长。init进程是串行启动,只有前一个进程启动完,才会启动下一个进程。
- systemd并行启动所有服务,充分利用多内核架构。启动快速,启动速度是init进程的10倍以上。
2.3 组织服务的方式不同
- init启动的服务分两类:独立启动模式(stand alone)和超级守护进程(super daemon);
- systemd将所有服务定义为不同类型的服务单位(unit),类型有:service、socket、target、path、snapshot、timer等
2.4 管理线程的技术手段不同
- init下管理程序使用纯脚本/etc/init.d/daemon可自定义参数;启动脚本复杂。init进程只是执行启动脚本,不管其他事情。脚本需要自己处理各种情况,这往往使得脚本变得很长。
- systemd使用systemctl命令来管理,不可自定义参数,有语法限制。
2.5 功能复杂性不同
- init没法自动启动当前服务所依赖的其他服务,必须手动处理,init对进程管理的方式比较单一。
- systemd可以检查并启动当前所启动的服务所依赖的其他服务,systemd对进程管理的方式强大。
备注:
在较新的linux系统上,都使用systemd 取代了init,成为系统的第一个进程(PID 等于 1),其他进程都是它的子进程。systemd为系统启动和管理提供了完整的解决方案
不是通过systemctl启动的服务则没法通过systemd来管理。
2.6 运行级别不同
- init有7个运行级别
- systemd只有1、3、5有相对应的target类型。
以上是关于[架构之路-31]:目标系统 - 系统软件 - Linux OS 什么是Linux1号进程? init进程与systemD的比较?的主要内容,如果未能解决你的问题,请参考以下文章
[架构之路-56]:目标系统 - 平台软件 - 总体架构概述
[架构之路-28]:目标系统 - 系统软件 - Linux OS内核功能架构图解内核构建内核启动流程
[架构之路-25]:目标系统 - 系统软件 - bootloader uboot内存映射与启动流程
[架构之路-21]:目标系统 - 系统软件 - 计算机系统架构计算机指令系统结构化程序与分层编程。