owenyoung 08月18日
电脑的启动流程
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文详细阐述了从按下电脑开机键到操作系统启动的完整流程。首先,CPU执行主板上的固件设置程序,通常遵循UEFI标准。固件程序会读取CMOS中的系统时间,并进行一系列的安全自检(SEC阶段)。随后,初始化EFI执行环境(PEI阶段),准备CPU和内存等硬件。接着,在DXE阶段,固件驱动程序负责更高级别的平台初始化和服务。最后,BDS阶段加载设备驱动并运行引导程序(如Grub2或Windows Boot Manager),将CPU控制权交给操作系统,完成电脑的启动过程。

💻 **CPU执行固件设置程序**: 当按下开机键,CPU首先执行存储在主板EEPROM芯片上的固件设置程序,现代电脑多采用UEFI标准。UEFI是BIOS的现代版本,负责初始硬件配置和提供与软件交互的接口。

⏰ **CMOS与系统时间**: 固件程序会从CMOS读取系统时间信息,CMOS由纽扣电池供电以维持时钟准确性。但现代操作系统通常使用网络时间校准,CMOS主要在无网络时提供时间参考。UEFI配置信息现在存储在文件系统中,而非CMOS。

🔒 **安全自检与EFI环境初始化**: 启动流程包含SEC(安全)阶段,进行硬件安全检查。随后是PEI(Pre-EFI)阶段,初始化EFI执行环境,准备CPU、内存及功能芯片组,为引导程序提供运行环境。

🚀 **DXE与BDS阶段**: DXE(Drive Execution Environment)阶段执行固件驱动程序,进行更高级别的平台初始化和服务,如系统管理模式和设备驱动。BDS(Boot Device Selection)阶段加载设备驱动(如硬盘、U盘),并运行二级引导程序(如Grub2、Windows Boot Manager),最终将控制权交给操作系统。

💾 **引导程序与启动设备**: UEFI会搜索具有FAT32格式的设备以查找引导程序,通常在硬盘的EFI分区中。用户可以通过UEFI菜单选择启动设备,并由二级引导程序(支持多系统)将控制权交给目标操作系统。

以前看过一个面试题,当你从浏览器地址栏输入 url 后,按下回车,具体会发生什么,这对这道题还挺有信心的,但是你要我说按下电脑开机键会发生什么,我是真的不知道。通过这次学习终于知道了一些:)

但是我绝对不是专家,只是一个刚接触这一块的新手,这篇文章里的所有东西都是根据很多文章和论文,以及我自己的实践得来的,所以里面的信息如果有错误,请帮助我更正它!

流程🔗

1. CPU 执行 Firmware setup 程序🔗

当用户按下开机键,电脑就通电了,这个时候 CPU 先启动,它的工作就是不断的执行给他的指令,而初始指令就是主板写在硬件里的 Firmware setup 程序, 现代电脑的 Firmware setup 程序(2014 年后生产的电脑)基本上使用的都是 Unified Extensible Firmware Interface (UEFI)标准。

UEFI 是一种“固件程序”,固化在一个焊接或插在主板上 EEPROM (electrically erasable programmable read-only memory) 芯片上,并且暴露一些接口以和软件进行交互。

EEPROM 是带电可擦可编程只读存储器。 是一种掉电后数据不丢失的存储芯片,所以很适合存放这种固件程序,轻易不咋变动,但要变动的时候,也能比较容易的变动。

UEFI 是 Basic Input/Output System (BIOS) 的现代版本,基本上 2014 年之后的机器附带的主板用的都是 UEFI 程序了。

当你看到以下这个菜单图片:

这并不是代表你的电脑用的是传统的 BIOS,虽然这个界面看起来很原始,但是其实这也是 UEFI 程序的,只是他的界面和 BIOS 一样是文本用户界面 (TUI),更现代的 UEFI 可能会带有酷酷的图形化 (GUI) 操作界面,像这样的:

我们可以通过在电脑开机的时候,连续按 F1 键(或者别的什么键)进入 UEFI 的设置 菜单。

很多人会混用 UEFI,BIOS 这些名词,我觉得这个回答解释的特别好。

PS. 我觉得现在应该弃用 BIOS 这个名字,用 Firmware setup 程序来代替它。

2. Firmware setup 程序开始运行,并从 CMOS 里面读取当前系统时间🔗

CMOS 是位于主板上的一个简单的存储装置,现在的实际使用中,只被用于记录时钟 RTC 信息,所以这个东西需要一直有电才能保持系统时间的正确性,所以 CMOS 被设计为:开机的时候用电源供电,关机的时候就用纽扣电池供电。如图:

但其实操作系统在有网的时候,一般也用不到 CMOS 里的时钟信息,因为它都是访问网络上的时间去校准时间的,除非没有网络才会用这个值。

网络上很多文章说 Firmware setup 程序会把用户的配置信息(比如启动项配置等)存放到 CMOS 里面,其实现代的电脑都不会这样做了,因为只有时钟信息需要持续的电源来运行,别的东西都可以存在文件系统里,UEFI 的配置信息都是存放在文件系统里的。

3. Firmware setup 程序开始执行电脑安全自检🔗

这个阶段被称为:SEC,security 阶段,做一些硬件方面的安全检查,看下各种东西都 ok 不 ok,之后的整个流程大概是这样:

4. 初始化 EFI 的执行环境, 比如 cpu ,各种功能芯片等🔗

这个阶段被称为 PEI,Pre Extensible Firmware Interface,Pre-EFI,EFI 是 UEFI 给系统引导程序(Boot Loader)准备的运行环境,就像 Bash 脚本环境一样,这个环境可以执行.efi文件。.eft文件就是系统引导程序的入口文件。在这个阶段会把 CPU,主内存,其他专用功能芯片组(比如音频芯片)啥的都准备好。

5. DXE 阶段🔗

Drive Execution Environment, 在这个阶段,DXE 调度程序将发现并执行相关固件卷中可用的 DXE 驱动程序,这些驱动程序负责更高级别的平台初始化和服务,比如系统管理模式(SMM)的设置,更高级别的固件驱动程序,如网络,启动盘,热量管理等,并且为后面的阶段提供运行时的服务接口。

6. BDS 阶段🔗

Boot Device Selection 阶段,这个阶段,UEFI 会加载各种设备的驱动程序,比如硬盘,U 盘的驱动,并运行 Boot Loader 引导程序:

    初始化控制台 console 设备,看看系统有多少可以启动的设备加载必要的设备驱动比如硬盘,u 盘等加载输入输出设备驱动,比如键盘,鼠标等搜索可用的启动设备(其实就是搜索具有 FAT32 分区格式的设备,FAT32 分区是微软设计的格式,单文件最大 4G,格式化 U 盘的时候可以看到这种格式选项)

我们一般会在硬盘里分出一个专门的 EFI 分区用来存放引导程序:

这个磁盘分区里的文件结构大概如下:

如果你有多个引导程序的话,你可以在 UEFI 提供的 boot 菜单里选择使用哪一个(按 F12 可以进入 boot 引导程序菜单),默认的话就是进入排名第一的那个。UEFI 提供的引导菜单其实是一级引导,然后进入二级引导程序:

二级引导程序有 Grub2, Windows boot manager 等, 如果你电脑预装的是 Windows 系统的话,那就只有 Windows Boot mananer ,如果你装了双系统,比如 Ubuntu 等 Linux 系统的话,Linux 系统会使用 Grub2 作为二级引导系统, Grub2 支持 windows,linux,macos 等系统的引导。

到了这里,二级引导程序就会根据用户的配置,把 CPU 的控制权交给真正的操作系统了,至此,电脑才算开始启动 OS 了。

总结🔗

这篇文章有太多名词了,如果没有装过几次操作系统的,可能听的云里雾里的,所以如果你感到云里雾里的也没必要深究,等你装过几次系统,遇到一些错误,然后在解决的过程中,你就慢慢理解这些东西了。

References🔗

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

电脑启动 UEFI BIOS 固件 操作系统
相关文章