电脑从开机到进入系统发生了什么

举报
暮山紫 发表于 2026/08/15 16:13:32 2026/08/15
【摘要】 每天,你按下电源键,屏幕亮起,几秒或几十秒后,熟悉的桌面映入眼帘。这平淡无奇的过程背后,是一场由硬件、固件、操作系统和无数约定俗成的协议共同演绎的精密交响乐。从微安级的待机电流到数安培的全速运转,从ROM中的固化代码到硬盘上的海量数据,每一个环节都环环相扣。让我们放慢时间,逐帧拆解这段旅程。第一阶段:通电与硬复位(0~0.5秒)当你按下电源键,主板上的电源管理芯片(通常为Super I/O或...

每天,你按下电源键,屏幕亮起,几秒或几十秒后,熟悉的桌面映入眼帘。这平淡无奇的过程背后,是一场由硬件、固件、操作系统和无数约定俗成的协议共同演绎的精密交响乐。从微安级的待机电流到数安培的全速运转,从ROM中的固化代码到硬盘上的海量数据,每一个环节都环环相扣。让我们放慢时间,逐帧拆解这段旅程。


第一阶段:通电与硬复位(0~0.5秒)

当你按下电源键,主板上的电源管理芯片(通常为Super I/O或嵌入式控制器)收到一个低电平信号。它不会立刻启动整机,而是先唤醒电源供应器(PSU),让其输出稳定的+5V待机电压(Standby Voltage)——这部分电力早已为键盘指示灯、USB唤醒端口和主板待机电路预备。随后,电源发出“Power Good”信号,告知主板所有电压(+3.3V、+5V、±12V)已稳定。

此时,主板上的时钟发生器开始输出基准频率,CPU接收复位信号(RESET),其内部所有寄存器被清零,程序计数器(PC)被硬连线设置为一个固定的起始地址——对于Intel x86/x64架构,这个地址是 0xFFFFFFF0,位于闪存芯片(BIOS/UEFI ROM)的末尾16字节处。这个地址存放的是一条跳转指令,CPU执行的第一条代码并非操作系统,而是固件。


第二阶段:固件初始化(BIOS/UEFI)—— 硬件自检与发现

固件(传统BIOS或现代UEFI)是焊接在主板上的只读存储器中的程序,它是硬件与软件之间的“第一层翻译官”。

2.1 上电自检(POST)

CPU跳转到固件入口后,首先执行上电自检(Power-On Self-Test)。这一步极其精简,只验证最核心的组件:CPU自身寄存器、内部缓存、基本内存控制器、以及主板芯片组。一旦通过,固件会初始化CPU的高速缓存(Cache)作为临时内存使用——因为此时主内存(RAM)还未初始化,无法执行复杂代码。

2.2 内存初始化(Memory Reference Code)

这是最关键也最耗时的一步。固件通过SPD(Serial Presence Detect)总线读取每根内存条上的EEPROM芯片,获取其时序参数、容量、电压等。然后配置内存控制器,执行数百次读写训练(Training)以校准信号延迟,最终将内存置于稳定工作状态。此时,固件才拥有了可用的RAM,可以将自身代码从慢速的Flash复制到内存中运行,大幅提速。

2.3 总线枚举与设备发现

接下来,固件扫描PCIe、USB、SATA等总线。对于PCIe设备,固件会读取每个设备的配置空间(包含厂商ID、设备ID、基址寄存器等),分配内存映射地址和中断号。USB控制器被初始化,键盘鼠标获得供电。显卡(GPU)的BIOS固件会被调用(Option ROM),初始化显示输出,这也是你在屏幕上看到品牌Logo或自检信息的时刻。


第三阶段:引导设备选择与启动加载器

完成硬件初始化后,固件的任务变成“找到可启动的操作系统”。根据用户设置的启动顺序(硬盘、U盘、光驱、网络等),固件逐个尝试。

3.1 传统BIOS的MBR方式(已渐淘汰)

BIOS读取第一个启动设备的第一个扇区(LBA 0),即主引导记录(MBR),将其加载到内存地址0x7C00处,然后跳转执行。MBR仅512字节,包含分区表和一段极简代码,它负责寻找活动分区,并加载该分区的卷引导记录(VBR),再由VBR加载操作系统的引导管理器(如Windows的bootmgr或Linux的GRUB第一阶段)。

3.2 现代UEFI的GPT方式

UEFI不再使用MBR,而是读取GPT(GUID分区表)格式的硬盘。UEFI固件识别ESP(EFI系统分区,FAT32格式),在其中查找符合特定路径的引导文件,例如 \EFI\Microsoft\Boot\bootmgfw.efi(Windows)或 \EFI\ubuntu\grubx64.efi(Linux)。这些文件是PE格式的可执行程序,UEFI直接将其加载到内存并运行。UEFI还支持安全启动(Secure Boot),通过数字签名校验引导程序的合法性,防止Rootkit注入。


第四阶段:引导管理器与操作系统内核加载

引导加载程序(Boot Loader)此时获得控制权,它比固件更懂操作系统,负责将内核从磁盘调入内存并准备执行环境。

  • Windows的bootmgr:读取 BCD(启动配置数据)文件,显示启动菜单(如有多个系统)。随后加载 winload.efi(UEFI)或 winload.exe(BIOS),该程序负责加载Windows内核 ntoskrnl.exe、硬件抽象层 hal.dll 以及必要的早期驱动程序(如磁盘控制器驱动)。

  • Linux的GRUB 2:加载内核 vmlinuz 和初始内存盘 initrd(或 initramfs)。initrd 是一个临时根文件系统,内含磁盘驱动、文件系统模块等,因为内核本身无法直接读取复杂的根文件系统(如ext4或NTFS)——这是一个“先有鸡还是先有蛋”的问题,由initrd化解。

引导加载程序将内核映像解压到内存的高地址区域,并向内核传递启动参数(例如根分区位置、调试选项、ACPI表地址等)。最后,通过一条跳转指令或 call 指令,将CPU状态切换至内核的入口点(对于Linux,入口为 start_kernel;对于Windows,为KiSystemStartup)。


第五阶段:内核初始化 —— 从单核到多核,从实模式到保护模式

此时,CPU仍运行在实模式(16位)或UEFI的64位长模式尚未完全启用。内核入口代码首先做三件要事:

  1. 切换到保护模式或长模式:开启分页机制,建立虚拟地址映射,让CPU可以寻址全部物理内存,并启用内存保护。

  2. 设置中断描述符表(IDT)和全局描述符表(GDT):为后续的进程切换、系统调用和异常处理铺路。

  3. 启动AP(应用处理器):在多核CPU中,主引导核(BSP)通过发送IPI(处理器间中断)唤醒其他核心,每个核心执行自己的初始化代码,最终所有核心进入等待调度队列。

接下来,内核解析ACPI(高级配置与电源管理接口)表,获取主板上的硬件拓扑(中断路由、PCIe热插拔控制器等)。然后初始化内存管理器,构建伙伴系统(Buddy System)和页表,将物理内存划分为内核空间和用户空间。紧接着是调度器的初始化,创建第一个进程(Linux的init进程,或Windows的System进程)。


第六阶段:驱动程序加载与根文件系统挂载

内核本身只支持最基础的硬件(CPU、内存、中断控制器)。要读写硬盘、显示图形、联网,必须加载驱动程序。

  • Windows:在内核初始化阶段,会加载Boot-Start驱动程序列表(由注册表中的 HKLM\SYSTEM\CurrentControlSet\Services 下 Start=0 的驱动)。这些驱动通常是磁盘控制器、文件系统(NTFS)和总线驱动。加载成功后,内核挂载引导分区(C:盘),并将注册表配置单元(System hive)读入内存,进一步确定后续需要加载的驱动。

  • Linux:内核先挂载initrd(内存盘),在其中运行 init 脚本,该脚本检测硬件并加载必要的内核模块(.ko文件),然后切换根文件系统到真正的磁盘分区(例如 /dev/sda2),最后执行 /sbin/init 作为第一个用户态进程。

挂载根文件系统之后,操作系统拥有了完整的文件系统结构,可以访问 /usr/etc/home 等目录(Linux)或 \Windows\Program Files\Users(Windows)。


第七阶段:用户态初始化与系统服务启动

内核完成基础工作后,交出控制权给第一个用户态进程,该进程是所有其他进程的祖先。

  • Linux(传统SysV init或现代systemd):systemd 并行启动各项服务(网络、SSH、图形界面、定时任务等),依据依赖关系树快速拉起整个用户环境。

  • Windows(Session Manager Subsystem)smss.exe(会话管理器)负责创建用户会话,加载 win32k.sys 图形驱动,启动 csrss.exe(客户端/服务器运行时子系统)和 winlogon.exe。随后,winlogon 启动 services.exe(服务控制管理器),由后者启动所有设置为“自动启动”的系统服务和第三方服务(杀毒软件、音频服务等)。

此时,系统已经拥有多任务、网络、文件共享、事件日志等功能,但用户还看不到桌面。


第八阶段:登录与桌面环境

最后一道关卡是身份验证与用户界面呈现。

  • Windowswinlogon.exe 运行 LogonUI.exe,显示欢迎屏幕或密码输入框。用户凭据通过 lsass.exe(本地安全认证子系统)校验,若成功,则加载用户注册表配置单元(NTUSER.DAT),设置环境变量,并启动 userinit.exe,后者调用 explorer.exe —— 这就是你看到的任务栏、桌面图标和开始菜单。同时,自动启动项(注册表Run键、启动文件夹)中的程序相继运行。

  • Linux(图形界面):显示管理器(如GDM、LightDM)启动X Server或Wayland Compositor,显示登录界面。用户验证通过后,创建用户会话,执行 .xinitrc 或启动桌面环境(GNOME、KDE等),并运行 ~/.config/autostart 中的自启应用。


尾声:毫秒级演进的幕后英雄

从按下电源键到桌面就绪,你看到的是几十秒的等待,但硬件与软件之间经历了数十万次指令交互、数百次中断处理、数千次内存访问。每一次启动都是对系统健壮性的检验——任何一环失败(内存训练超时、引导文件损坏、驱动蓝屏),都会让你看到不愿意见到的错误提示。

有趣的是,现代SSD和UEFI固件已将启动时间压缩到10秒以内,但背后的复杂性不减反增。安全启动、可信平台模块(TPM)、快速启动(Fast Startup)等新技术又为这段旅程增加了新的检查点。下一次你开机时,或许会想起这趟微观世界的长征——它无声无息,却是数字时代最可靠的晨间仪式。



【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。