Linux开机流程全揭秘
linux 开机过程

首页 2025-01-10 16:27:46



Linux开机过程的深度解析 Linux系统的开机过程是一个复杂而精细的过程,它涉及硬件初始化、引导程序加载、内核启动、系统初始化以及用户登录等多个阶段

    这一系列步骤确保了系统能够顺利从完全关闭的状态转变为一个完全可用的操作系统

    下面,我们将对Linux的开机过程进行详细解析

     一、BIOS/UEFI阶段:硬件初始化和引导程序加载 当计算机启动时,首先由基本输入输出系统(BIOS)或统一可扩展固件接口(UEFI)接管

    这是硬件的初始引导点,负责硬件的初始化和设备的检测

     BIOS 在较旧的系统中,BIOS是存储在主板ROM芯片中的固件

    当系统开机时,BIOS会首先进行一系列硬件检查,称为POST(Power-On Self Test,加电自检)

    POST检查的内容主要包括CPU、内存、硬盘等设备和即插即用设备

    如果硬件出现问题,主板会发出不同含义的蜂鸣,启动中止

    如果硬件没有问题,BIOS会根据CMOS中保存的配置信息来判断使用哪种设备启动操作系统,并将控制权交给该设备

     BIOS会查找并加载第一个可引导的设备(如硬盘、光盘或U盘)的引导扇区(MBR,主引导记录)

    一旦找到可引导设备,BIOS会将该设备的引导扇区读入物理内存的0x7C00处,并跳转到该地址继续执行,从而将CPU交给引导扇区中的Boot程序

     UEFI UEFI是BIOS的继任者,提供了更现代化和灵活的启动方式

    UEFI支持更大的硬盘分区、图形界面、鼠标支持、网络引导等功能

    UEFI系统查找并加载EFI系统分区(ESP)中的引导程序(如grubx64.efi)

    UEFI可以直接加载操作系统内核,而无需通过传统的引导加载器

     二、引导加载器阶段:选择并加载操作系统内核 引导加载器是BIOS/UEFI之后的关键组件,负责加载操作系统内核

    常见的引导加载器包括GRUB(GRand Unified Bootloader)和LILO(Linux Loader)

     GRUB GRUB是最常见的引导加载器,特别是在现代Linux发行版中

    GRUB具有很强的灵活性,支持多种文件系统和操作系统

    在启动时,GRUB会显示一个启动菜单,允许用户选择不同的内核或操作系统选项

    用户可以在启动菜单中通过编辑启动参数来调整内核启动选项,例如添加内核命令行参数

     GRUB包含两个阶段:Stage 1和Stage 2

    Stage 1被安装到磁盘的MBR,它直接加载Stage 2并执行跳转

    Stage 2主要功能是为了加载其他操作系统

    Stage 2首先把系统切换到保护模式,设置好C语言运行环境

    系统执行时首先查找配置文件(如grub.conf和menu.lst)

    如果没有,则执行一个Shell,并等待用户输入命令

    当用户输入boot命令时,将控制权转移给操作系统

     LILO LILO是较早期的引导加载器,现在很少使用

    与GRUB相比,LILO的功能更为有限,不支持动态加载模块和图形界面

     一旦选择了启动选项,引导加载器就会加载并执行选定的Linux内核(通常位于/boot目录下)

    内核镜像被加载到内存中,并开始执行

    内核通常是一个压缩的镜像文件(如vmlinuz),引导加载器解压缩内核并将其放入内存

     三、内核加载和初始化:加载内核、启动硬件设备、挂载根文件系统 当引导加载器选择并加载了内核后,Linux内核开始执行,并进行一系列初始化操作

     内核初始化 内核解压后,初始化自身的数据结构,并为即将启动的进程和设备驱动程序准备内存空间

    内核启动后,首先进行硬件检测,识别系统中的硬件设备,并加载对应的驱动程序

    这一步包括初始化CPU、内存管理单元(MMU)、I/O控制器、网络接口卡、磁盘驱动器等

     现代Linux内核通过initramfs或initrd(初始内存盘)加载必要的驱动程序,以便挂载根文件系统

    这些初始RAM文件系统通常包含基本的工具和驱动程序

     挂载根文件系统 一旦硬件设备初始化完成,内核会挂载根文件系统(通常是/),这标志着内核进入用户空间的准备工作

    根文件系统挂载后,内核将控制权交给第一个用户空间进程,即初始化进程

     四、初始化系统:启动用户空间的服务和应用 初始化进程是所有其他用户空间进程的父进程,负责启动和管理系统服务

    传统上,init是第一个用户进程,而现代Linux发行版普遍采用systemd作为替代

     SysVinit系统 传统的SysVinit系统通过读取/etc/inittab文件来确定启动级别,并根据启动级别运行相应的脚本(如/etc/rc.d/rcX.d)

    启动级别(Runlevel)定义了系统应该运行哪些服务和进程,如多用户模式、单用户模式、图形界面等

     systemd系统 Systemd是现代Linux系统中更先进的初始化系统,旨在提高启动速度和管理复杂依赖关系

    Systemd使用unit文件来管理服务、挂载点、设备等资源,并通过并行启动服务来优化启动时间

    Systemd支持socket激活、依赖关系管理、进程控制组(cgroups)等功能

     在systemd中,启动脚本通常被称为单元(unit)

    这些单元文件存储在/etc/systemd/system/目录和/usr/lib/systemd/system/目录中

     系统服务启动完毕后,Linux系统将进入用户可以交互的阶段,通常表现为登录提示符或图形界面

     五、登录和用户界面:提供用户登录接口和图形/命令行界面 非图形界面 在非图形界面(runlevel 3或systemd的multi-user.target)下,系统会启动getty进程,显示命令行登录提示符(如tty)

    用户输入用户名和密码后,系统启动login进程,验证用户身份并启动用户

MySQL连接就这么简单!本地远程、编程语言连接方法一网打尽
还在为MySQL日期计算头疼?这份加一天操作指南能解决90%问题
MySQL日志到底在哪里?Linux/Windows/macOS全平台查找方法在此
MySQL数据库管理工具全景评测:从Workbench到DBeaver的技术选型指南
MySQL密码忘了怎么办?这份重置指南能救急,Windows/Linux/Mac都适用
你的MySQL为什么经常卡死?可能是锁表在作怪!快速排查方法在此
MySQL单表卡爆怎么办?从策略到实战,一文掌握「分表」救命技巧
清空MySQL数据表千万别用错!DELETE和TRUNCATE这个区别可能导致重大事故
你的MySQL中文排序一团糟?记住这几点,轻松实现准确拼音排序!
别再混淆Hive和MySQL了!读懂它们的天壤之别,才算摸到大数据的门道