关于linux:Linux-BootKernel-和-Service-介绍

35次阅读

共计 3521 个字符,预计需要花费 9 分钟才能阅读完成。

Linux 启动过程是初始化零碎的过程。它包含从第一次关上计算机电源到用户界面齐全可操作时产生的所有事件。

充沛理解疏导过程中的步骤可能有助于您解决问题,以及依据您的须要调整计算机的性能。

另一方面,启动过程可能相当技术性,您能够在不理解所有细节的状况下开始应用 Linux。

第一个步骤:BIOS

启动基于 x86 的 Linux 零碎波及许多步骤。当计算机开机时,根本输出 / 输入零碎 (BIOS) 会初始化硬件,包含屏幕和键盘,并测试主内存。此过程也称为 POST(开机自检)。

BIOS 软件存储在主板上的 ROM 芯片上。尔后,疏导过程的其余部分由操作系统 (OS) 管制。

Master Boot Record (MBR) and Boot Loader

一旦 POST 实现,系统控制就会从 BIOS 传递到疏导加载程序。疏导加载程序通常存储在零碎中的硬盘之一上,或者在疏导扇区(对于传统 BIOS/MBR 零碎)或 EFI 分区(对于更新的(对立)可扩大固件接口或 EFI/UEFI 零碎)。到此阶段为止,机器不会拜访任何大容量存储介质。尔后,无关日期、工夫和最重要外围设备的信息从 CMOS 值中加载(在应用电池供电的内存存储技术后,即便零碎断电也能跟踪日期和工夫).

有许多用于 Linux 的疏导加载程序;最常见的是 GRUB(用于 GRand Unified Boot loader)、ISOLINUX(用于从可挪动媒体启动)和 DAS U-Boot(用于在嵌入式设施 / 设施上启动)。大多数 Linux 疏导加载程序能够提供一个用户界面,用于抉择疏导 Linux 的代替选项,甚至可能装置的其余操作系统。在疏导 Linux 时,疏导加载程序负责将内核映像和初始 RAM 磁盘或文件系统(其中蕴含启动零碎所需的一些要害文件和设施驱动程序)加载到内存中。

Boot Loader in Action

疏导加载程序有两个不同的阶段:

对于应用 BIOS/MBR 办法的零碎,疏导加载程序位于硬盘的第一个扇区,也称为主疏导记录 (MBR)。MBR 的大小仅为 512 字节。在此阶段,疏导加载程序查看分区表并找到可疏导分区。一旦找到可疏导分区,它就会搜寻第二阶段疏导加载程序,例如 GRUB,并将其加载到 RAM(随机存取存储器)中。对于应用 EFI/UEFI 办法的零碎,UEFI 固件读取其疏导管理器数据以确定要启动哪个 UEFI 应用程序以及从何处启动(即能够从哪个磁盘和分区找到 EFI 分区)。而后,固件启动 UEFI 应用程序,例如 GRUB,如固件启动管理器的启动项中所定义。这个过程更简单,但比旧的 MBR 办法更通用。

第二阶段疏导加载程序位于 /boot 下。将显示启动画面,让咱们能够抉择要启动的操作系统 (OS)。抉择操作系统后,疏导加载程序将所选操作系统的内核加载到 RAM 中,并将控制权交给它。内核简直总是被压缩,所以它的首要任务是解压缩本身。之后,它将检查和剖析零碎硬件并初始化内核中内置的任何硬件设施驱动程序。

Initial RAM Disk

initramfs 文件系统映像蕴含执行挂载正确根文件系统所需的所有操作的程序和二进制文件,例如为所需的文件系统和大容量存储控制器的设施驱动程序提供内核性能,应用名为 udev(用于用户设施)的工具,它负责用于确定存在哪些设施,定位它们须要正确运行的设施驱动程序,并加载它们。找到根文件系统后,查看谬误并装置。

挂载程序批示操作系统文件系统已筹备好应用,并将其与文件系统整个层次结构中的特定点(挂载点)相关联。如果胜利,initramfs 将从 RAM 中革除并执行根文件系统 (/sbin/init) 上的 init 程序。

init 解决挂载和转向最终的实在根文件系统。如果在拜访大容量存储之前须要非凡的硬件驱动程序,它们必须在 initramfs 映像中。

Text mode logins

在启动过程靠近序幕时,init 会启动一些文本模式登录提醒。这些使您可能键入您的用户名,而后是您的明码,并最终取得一个命令外壳。然而,如果您正在运行带有图形登录界面的零碎,您一开始不会看到这些。

通常,默认的命令 shell 是 bash(GNU Bourne Again Shell),但还有许多其余高级命令 shell 可用。shell 打印一个文本提醒,表明它已筹备好接受命令;用户输出命令并回车后,命令被执行,命令执行实现后会显示另一个提醒。

正如您将在第 7 章:命令行操作中学到的那样,能够应用 ALT 键和一个功能键来拜访运行命令 shell 的终端。大多数发行版以 F1 或 F2 结尾,有六个文本终端和一个图形终端。在图形环境中,切换到文本控制台须要按 CTRL-ALT + 相应的功能键(应用 F7 或 F1 通向 GUI)。

Linux Kernel

疏导加载程序将内核和基于 RAM 的初始文件系统 (initramfs) 加载到内存中,因而内核能够间接应用它。

当内核加载到 RAM 中时,它会立刻初始化和配置计算机的内存,并配置连贯到零碎的所有硬件。这包含所有处理器、I/O 子系统、存储设备等。内核还加载一些必要的用户空间应用程序。

/sbin/init and Services

一旦内核设置了所有硬件并挂载了根文件系统,内核就会运行 /sbin/init。而后这成为初始过程,而后启动其余过程以使零碎运行。零碎上的大多数其余过程最终都会追溯到 init;例外包含所谓的内核过程。它们由内核间接启动,它们的工作是治理外部操作系统的详细信息。

除了启动零碎之外,init 还负责放弃零碎运行和洁净地关闭系统。它的职责之一是在必要时作为所有非内核过程的管理者;实现后进行清理,并在用户登录和退出时依据须要重新启动用户登录服务,其余后盾零碎服务也是如此。

传统上,此过程启动是应用可追溯到 1980 年代的约定和 System V UNIX 版本实现的。这个串行过程让零碎通过一系列运行级别,其中蕴含启动和进行服务的脚本汇合。每个运行级别都反对不同的零碎运行模式。在每个运行级别内,能够将单个服务设置为运行,或者在运行时敞开。

然而,最近的所有次要发行版都不再采纳这种零碎初始化的程序运行级别办法,只管它们通常出于兼容性目标反对 System V 约定。接下来,咱们将探讨较新的办法 systemd 和 Upstart。

Startup Alternatives

SysVinit 将事物视为一个间断的过程,分为一系列间断的阶段。每个阶段都须要实现能力进行下一个阶段。因而,启动不容易利用能够在多个处理器或内核上实现的并行处理。

此外,关机和重启被视为一种绝对常见的事件;到底花了多长时间并不重要。这不再是事实,尤其是对于挪动设施和嵌入式 Linux 零碎。一些古代办法,例如应用容器,可能须要简直刹时的启动工夫。因而,零碎当初须要具备更快和加强性能的办法。最初,旧的办法须要相当简单的启动脚本,这些脚本很难在发行版本、内核版本、体系结构和零碎类型之间放弃通用。开发的两个次要代替计划是:

Updtart

  • 由 Ubuntu 开发并于 2006 年首次收录
  • 在 Fedora 9(2008 年)和 RHEL 6 及其克隆中采纳。

systemd

  • Fedora 首先采纳(2011 年)
  • 被 RHEL 7 和 SUSE 采纳
  • 在 Ubuntu 16.04 中替换了 Upstart

尽管迁徙到 systemd 颇有争议,但它已被次要发行版采纳,因而咱们不会探讨旧的 System V 办法或 Upstart,后者已成为死胡同。不论人们对 systemd 的争议或技术办法有何认识,简直广泛采纳使学习如何在 Linux 零碎上工作变得更简略,因为发行版之间的差别较小。咱们接下来列举 systemd 的个性。

systemd Features

应用 systemd 的零碎比应用晚期 init 办法的系统启动得更快。这次要是因为它用激进的并行化技术替换了一组串行化的步骤,容许同时启动多个服务。

简单的启动 shell 脚本被更简略的配置文件所取代,这些配置文件列举了服务启动前必须做的事件,如何执行服务启动,以及服务在启动实现时应该表明什么条件曾经实现。须要留神的一件事是 /sbin/init 当初只指向 /lib/systemd/systemd;即 systemd 接管 init 过程。

一个 systemd 命令 (systemctl) 用于大多数根本工作。尽管咱们还没有探讨在命令行上工作,但这里是其用法的简要列表:

  • 在以后运行的零碎上启动、进行、重启服务(以 nfs 为例):

$ sudo systemctl start|stop|restart nfs.service

  • 启用或禁用零碎服务在零碎疏导时启动:
    $ sudo systemctl enable|disable nfs.service

在大多数状况下,能够省略 .service。与旧办法存在许多技术差别,超出了咱们的探讨范畴。

更多 Jerry 的原创文章,尽在:” 汪子熙 ”:

正文完
 0