1. 首页 > 经验  > 正文

启动进程

启动进程

Linux启动进程是启动Linux时执行一个複杂的初始过程。它在很多方面类似于BSD系统和别的类Unix系统的启动过程。

启动一个Linux系统涉及到很多阶段和软体组件包括硬体初始化、执行启动载入程式、载入和启动Linux核心镜像,和执行很多启动脚本和守护进程。对于不同的阶段和组件它们存在不同的变化和途径;比如GRUB、LILO、SYSLINUX或者Loadlin等能被用来当作启动载入器,同时启动脚本可以是传统的init风格也可以是系统配置能被执行的现代替方案比如systemd或Upstart。

基本介绍

中文:启动进程外文名:Linux startup process

简介

Linux启动进程是启动Linux时执行的一个複杂的初始化过程。它在很多方面类似于BSD系统和别的类Unix系统的启动过程。
启动一个Linux系统涉及到很多阶段和软体组件,包括硬体初始化、执行启动载入程式、载入和启动Linux核心镜像,和执行很多启动脚本和守护进程。对于不同的阶段和组件它们存在不同的变化和途径;比如GRUB、LILO、SYSLINUX或者Loadlin等能被用来当作启动载入器,同时启动脚本可以是传统的init风格,也可以是系统配置能被执行的现代替代方案比如systemd或Upstart。

概述

早期阶段的Linux启动进程十分依赖于计算机架构。IBM PC兼容机是Linux常用的架构;在这种系统中,BIOS扮演着重要角色,而这在其他系统中很难找到类似的东西。在下面的例子中,假设为IBM PC兼容机:
BIOS针对实际的硬体平台执行启动任务。一旦硬体被遍历、启动需要的硬体被正确初始化,BIOS就会从配置好的启动设备载入和执行启动代码
启动载入程式通常会用户呈现一个可能的启动项的选单而且有一个将在几秒后被选择默认项。一旦作出选择,启动引导器将和把核心载入到记忆体,并且提供一些参数且移交控制权。
核心,如果被压缩将自解压。它将配置系统功能,譬如必要的硬体和记忆体分页,称为start_kernel(),这会执行大部分系统配置(中断、记忆体管理、设备和驱动初始化等)。然后它分别启动记忆体管理进程、调度和init进程等在用户空间执行的进程。
init由被shell(sysv、bsd、runit)执行的脚本或者被二进制组件(systemd、upstart)执行的配置档案组成。Init有特定的级别(sysv、bsd)或目标(systemd),每个都是由特定的一组服务(守护进程daemons)组成。这在用户环境提供很多非作业系统的服务和结构。一个典型的服务环境启动一个网路服务、资料库服务和网路。
一个典型的桌面环境从一个名为显示管理器的守护进程开始,它开始一个由图形化服务组成的图形化环境,提供一个基础底层的图形栈和一个提供身份验证登录管理器。在用户输入正确验证信息,会话管理器开始一个会话。会话是包含一系列程式比如UI组件(面板、桌面、小程式等),它们一个构成一个完整的桌面环境。
关机时,init会以控制者的姿态去关闭所有的用户空间功能。init随后终止,核心自行关闭。

启动载入程式阶段

启动载入阶段应计算机架构而不同。更早的阶段不是针对特定作业系统,基于BIOS的x86_64启动进程被认为开始于MBR代码用真实模式执行和第一阶段启动载入程式被载入。而对于UEFI系统,像Linux核心的有效负载,能直接载入,不需要启动载入程式。下面是对流行的启动引导程式的总结:
LILO不能识别和解析档案系统布局。 而是在实时系统中创建一个配置档案(/etc/lilo.conf),它将原始偏移量信息(映射器工具)映射到核心和ram磁碟的位置(initrd或initramfs)。 配置档案(其中包括每个引导分区和核心路径名等数据)以及定义选项(如果需要),然后与引导载入程式代码一起写入MBR引导程式。 当此引导器读取并由BIOS控制时,LILO载入选单代码并绘製它,然后使用存储的值与用户输入一起计算和载入Linux核心或连结载入任何其他引导载入程式。
GRUB 1包含运行时读取通用档案系统以访问其配置档案的逻辑。这使得GRUB 1能够从档案系统读取其配置档案,而不是将其嵌入到MBR中,从而允许它在运行时更改配置,并以可读取的格式指定磁碟和分区,而不是依赖于偏移量。 它还包含一个命令界面,如果配置错误损坏,可以更容易修复修改GRUB。
GRUB 2与GRUB 1的不同之处在于有两个(可选三个)阶段,并且能够自动检测各种作业系统和自动配置。第一阶段载入程式(stage1)载入和执行由BIOS从主引导记录(MBR)或另一个来自分区引导扇叶的引导载入程式。它的工作发现和访问各种档案系统,以便稍后可以读取配置档案。如果第二阶段载入程式不连续,或者如果档案系统或硬体需要特殊处理才能访问第二级载入程式,则可选的中级载入程式(阶段1.5)由第一级载入程式载入和执行载入程式。最后载入第二阶段载入程式(stage2),并显示允许用户选择作业系统或检查编辑启动参数的GRUB启动选单。选择选单项并选择参数后,GRUB会将核心载入到记忆体中,并将控制权传递给它。GRUB 2还能够连结载入另一个引导载入程式。
SYSLINUX/ ISOLINUX是一个专门从FAT档案系统引导完整的Linux的启动载入程式。它通常用于启动或抢救软碟,live USB和其他轻量级引导系统。 ISOLINUX通常由Linux live CD和可引导安装CD使用。
Loadlin是一个可以在运行时用Linux核心替换正在运行的DOS或Windows 9x核心的启动载入程式。这在硬体需要通过软体打开并且这种配置程式是专有的且仅适用于DOS的情况下可能是有用的。这种引导方法现在不太需要,因为Linux具有大量硬体设备的驱动程式,但在移动设备中已经有一些用途。 另一个用例是当Linux位于BIOS无法启动的存储设备上时:DOS或Windows可以载入相应的驱动程式来弥补BIOS的限制并从那里启动Linux。

核心阶段

Linux核心处理所有作业系统进程,如记忆体管理、任务调度、I/O、进程间通信和系统总体控制。这分为两个阶段 :
首先,核心(作为压缩映像档案)被载入到记忆体中并进行解压缩,并且创建了一些基本的功能,如基本记忆体管理。 然后最后一次切换到主核心启动过程。
一旦核心完全运行,并且作为其启动的一部分,在载入和执行时,核心会查找一个运行的init进程,它单独设定用户空间以及用户环境所需的进程和最终会话。然后允许核心自身闲置,受其他进程调用

initramfs

initramfs自Linux核心的2.5.46版本开始加入这个概念,其意图是儘可能地替换以前Linux核心在启动过程中执行的功能。 早期用户空间的典型用途是检测需要哪些设备驱动程式来载入主用户空间档案系统,并从临时档案系统载入它们。

Init进程

Init是Linux的根进程。进程号为1,它是所有进程的父进程。

SysV init

init是系统所有进程的父进程。它由核心创建,它将启动其他所有进程。

本文由'隗语巧'发布,不代表演示站立场,转载/删除联系作者,如需删除请-> 关于侵权处理说明