The*_*use 3 startup process ubuntu init
我刚刚开始学习 Linux 中的进程。
\n我遇到了这个名为\n的命令ps -ef
(它将显示所有正在运行的进程)。
我得到这样的输出
\nUID PID PPID LWP C NLWP STIME TTY TIME CMD\nroot 1 0 1 0 1 Apr17 ? 00:00:18 /sbin/init splash\n
Run Code Online (Sandbox Code Playgroud)\n这里splash代表什么?\xc2\xa0\n我知道init
是我们启动计算机时运行的第一个进程。\xc2\xa0\n但是什么是splash
?\xe2\x80\x82它有什么作用呢?
另外,谁能告诉我为什么init
称为第一个运行的进程,\n但是当我们启动计算机时首先运行的是BIOS或UEFI程序。\n那么为什么我们将init称为第一个进程,而不是BIOS或UEFI程序UEFI?
这里的splash代表什么?我知道init是我们启动计算机时运行的第一个进程。但什么是飞溅呢?它有什么作用 ?
首先,您正在运行使用 的 ubuntu systemd
,它允许您在启动过程中显示启动屏幕,这就是它具有splash 参数的原因。请参阅splash.c源代码。
[编辑]你的计算机正在运行systemd,因为据我所知,systemd是唯一支持splash参数的init - 可能还有其他参数,但由于它也是Ubuntu上的默认设置,我认为这是一个安全的猜测。在 Ubuntu 上,默认情况下,/sbin/init
是一个到 的符号链接/usr/lib/systemd/systemd
,即加载的内核/sbin/init splash
,ps
这里使用进程的命令行,这将是/sbin/init splash
,这就是您所看到的。
也有人可以告诉我 init 被称为第一个要运行的进程,但它是我们启动计算机时首先运行的 BIOS 或 UFEI 程序。那么为什么我们将 init 称为第一个进程而不是 BIOS 或 UFEI 呢?
好吧,为了简单起见,BIOS/UEFI 是在启动时加载的程序,它们包含用于进一步启动系统的配置数据。它们最终将找到下一个要启动的程序,例如启动管理器(例如grub),它又将允许您启动内核。我在这里尽量保持简单,但你可以阅读一下。在linux和unix系统上,init是内核生成的第一个程序,因此获得PID 1。
你可以在这里阅读更多内容,实际上,那篇文章已经很老了。我并不声称以下内容 100% 准确。
要引导 x86 计算机,您要做的第一件事就是按下电源按钮。您的电源为主板供电,并等待来自 SMPS(开关模式电源)的信号,以提供足够的电力。例如,它会检查您的 PCIe 显卡是否有足够的电量、CPU 和 RAM 是否存在。
Intel 管理引擎( IME)/ AMD 安全技术从此时开始,IME 是一个独立的 Intel CPU,带有模糊的 minix 3 操作系统,AMD 等效项使用嵌入在中央 CPU 上的 ARM 内核;关于这两个人,我们知之甚少。
一旦主板收到 SMPS,它就会停止不断重置 CPU,CPU 现在读取 ROM 中的地址,这通常是FFFF:0000h
;它包含固件代码的跳转(如快捷方式)。
该固件曾经是一个称为 BIOS 的单片代码块,只能与键盘一起使用。有了UEFI,它现在已经成为一个带有迷你文件系统的完整操作系统。今天,跳转点指向一些解压缩 UEFI 的引导代码(可能称为 BIOS)。UEFI 就像迷你操作系统一样,可能具有鼠标支持、网络启动、SCSI、RAID、磁盘和/或内存检查器以及许多其他功能。
UEFI 加载后会执行开机自检 (POST),检查所有硬件是否正常。
完整的 POST 检查许多设备,例如 CMOS、视频 ROM、控制器、DMA(允许设备直接访问 RAM)、CPU、内存和其他设备。当您重置 PC 时,即按下重置按钮或执行重新启动命令时,会执行简单的 POST,而不会注意到 CMOS 是否存在问题等问题。CMOS 是主板上的一个小芯片,包含易失性内存(切断电源,内存就会丢失)和时钟,它由一块小电池供电,包含 UEFI 的所有设置。
UEFI 读取这些设置,对系统进行所需的任何更改,然后继续进一步引导系统。UEFI 可以通过在驱动器上查找引导记录来执行传统引导,也可以使用更现代的 UEFI 引导方法。这需要一个带有 UEFI 引导代码的 FAT32 格式分区,该代码可以加载Linux 内核、引导管理器(Windows) 或引导加载程序(例如grub
.
UNIX 系统上的内核加载所有需要的设备驱动程序,然后加载 init 进程。Init 可以是systemd
或任何其他程序,例如bash
;您可以在内核参数中配置它。请注意,如果选择直接使用 UEFI 加载内核,则设置内核参数会困难得多。一旦加载,init 就会获取 PID 1,然后加载用户空间(系统 shell 和可选的图形用户界面)。