图解计算机原理:电脑按下开机键后,操作系统是怎么启动的?
单击上方“图灵人工智能”,选择“星标”公众号
您想知道的人工智能干货,第一时间送达

图解计算机原理:电脑按下开机键后,操作系统是怎么启动的?

按下电脑的开机键以后,屏幕通常会经历几种状态:
先是一片黑屏; 接着出现主板或品牌 Logo; 然后可能闪过引导菜单; 最后才出现登录界面。
这几秒钟看起来只是“电脑正在开机”,背后却发生了多次控制权交接。
电源电路先让硬件稳定工作,CPU 再执行主板固件;固件找到引导程序,引导程序把操作系统内核装入内存;内核接管 CPU、内存和设备,最后启动用户空间里的服务与登录界面。
所以,按下电源键时,操作系统并没有立刻运行。
本文以现代 UEFI PC 为主线,进入操作系统后主要用 Linux 解释。Windows 的程序名称和用户空间结构不同,但“固件 → 引导组件 → 内核 → 系统服务”的责任边界是相似的。
01 按下电源键,CPU还不能马上执行操作系统
许多台式机即使已经关机,主板仍保留一部分待机供电。机箱上的电源键更像一个请求按钮,它把“开始上电”的信号交给主板电源控制逻辑,而不是直接接通 CPU 与操作系统。
主板随后协调电源和稳压模块,让处理器、内存、芯片组等部件需要的电压与时钟逐渐稳定。

在电源条件尚未满足时,CPU 会被保持在复位状态,不能随意取指执行。等到电源系统给出类似 Power Good或 PWR_OK的稳定指示,平台才会解除处理器复位。
解除复位并不代表 CPU 已经知道操作系统在哪里。
处理器只会从体系结构规定的复位入口开始取指。对现代 PC 而言,这个入口会被平台映射到主板固件代码,也就是 UEFI;传统机器则是 BIOS 固件。
从软件可见的启动流程看,CPU 开始执行的第一段代码来自主板固件,而不是 SSD 里的 Windows 或 Linux。
如果这一阶段失败,电脑可能完全没有画面,只有风扇转动、故障灯亮起,或者主板反复尝试上电。
02 操作系统出现前,UEFI先初始化硬件
固件拿到控制权后,首先要解决一个基础问题:如果内存、芯片组和基本总线还不能工作,后面的引导程序连运行环境都没有。
现代固件内部通常会经历多个初始化阶段。具体名称和实现因平台而异,但主要任务包括:
建立 CPU 与芯片组所需的早期运行环境; 初始化 DRAM,让后续代码拥有可用内存; 发现 PCIe、存储控制器、显卡等基础设备; 建立固件使用的设备与启动服务; 完成 POST 自检并报告明显的早期故障。

POST 是 Power-On Self-Test,也就是上电自检。它能发现部分内存、显卡、键盘或存储设备异常,并通过蜂鸣声、故障灯或报错画面提示用户。
但 POST 并不等于“操作系统已经加载了所有驱动”。
固件只需要把机器带到足以继续启动的状态。操作系统接管以后,还会使用自己的驱动重新管理设备,并开启固件阶段尚未使用的完整功能。
这也解释了为什么有些硬件能在 UEFI 设置界面里使用,却在进入操作系统后因驱动问题失效;反过来,一些设备在固件阶段能力有限,进入系统后才完整可用。
❝欢迎大家支持我的付费文章:
11.9 元,【3万字长文 90+图】一文详解《操作系统教程(骆斌)》 11.9 元,【万字长文】一文详解《计算机组成原理(唐朔飞)》 9.9元,【万字长文58张图】一文详解《计算机网络(谢希仁)》 购买任一文章,另赠3张核心概念图。 ❞
03 UEFI怎么找到正确的启动程序?
硬件可以工作以后,固件开始寻找“下一位接棒者”。
在现代 UEFI 机器上,启动顺序通常保存在 NVRAM 变量中,其中包含 BootOrder和若干启动项。每个启动项可以指向某个设备上的 EFI 可执行文件。
用户在固件设置里调整硬盘、U 盘或网络启动的优先级,本质上就是在改变这些启动项的选择顺序。

常见的本地磁盘会采用 GPT 分区表,并包含一个 EFI System Partition,简称 ESP。这个分区通常使用 FAT 文件系统,里面保存 .efi引导程序以及相关启动文件。
UEFI Boot Manager 会根据启动项记录的设备和文件路径,找到对应的 EFI 程序,将它装入内存并开始执行。如果启用了 Secure Boot,固件还会在这条链路上验证被加载代码的签名和信任关系。
这里容易混淆两件事:
GPT 是分区表格式,不是引导程序。 ESP 是保存 EFI 启动文件的系统分区,不等于完整的操作系统分区。
传统 BIOS 机器走的是另一条路径:BIOS 从启动设备的启动扇区或 MBR 中读取少量引导代码,再由这些代码继续寻找后续程序。不能把 BIOS/MBR 和 UEFI/ESP 混成同一套流程。
04 引导程序如何把内核“搬进”内存?
固件加载的 EFI 程序可能是 Windows Boot Manager,也可能是 GRUB、systemd-boot 或其他引导组件。它们的文件名和细节不同,核心任务都是为操作系统内核准备运行条件。
下面以常见 Linux 启动为例。

引导程序通常会完成这些工作:
读取启动配置,决定使用哪个内核和哪组参数; 把压缩内核镜像装入 RAM; 把 initramfs 早期启动环境装入 RAM; 准备内存布局、硬件描述和内核命令行等启动信息; 跳转到内核入口,把 CPU 控制权交给内核。
内核不是留在 SSD 上“原地运行”的。磁盘上的内核镜像只是持久化文件,真正执行前必须进入可执行的内存环境。
这条链路也并非只能使用传统 bootloader。支持 EFI Stub 的 Linux 内核,或者把内核、initramfs 与启动参数打包在一起的 Unified Kernel Image,也可以被 UEFI 更直接地加载。具体少了哪个中间组件,不会改变“先准备内核,再把控制权交给内核”的核心关系。
在 Windows 中,Windows Boot Manager、winload.efi等组件承担类似的衔接工作,只是文件结构和加载对象不同。
05 内核接管后,操作系统才真正建立起来
引导程序跳转到内核入口以后,固件和 bootloader 的主要任务已经完成。此时内核拥有 CPU 控制权,但距离运行普通应用程序仍有一段距离。

内核需要逐步建立操作系统的资源管理能力,例如:
识别物理内存,建立页表、内存分配器和虚拟地址空间; 配置中断与异常处理,让设备事件和程序错误能够进入内核; 初始化调度器,建立任务队列并决定 CPU 执行谁; 启动其他 CPU 核心,让多核处理器进入工作状态; 加载或初始化存储、键盘、网络等设备驱动; 建立系统调用入口,为未来的用户态程序提供内核服务。
这些动作并不一定在所有架构上以完全相同的线性顺序发生,很多初始化还会相互依赖或交错进行。
但责任边界很清楚:内核负责管理 CPU、内存和硬件资源,普通应用不能绕过内核直接随意操作它们。
此时屏幕可能已经出现内核日志,但登录程序和桌面环境通常仍未启动。
06 initramfs为什么是一个“临时根环境”?
内核接下来要使用真正的根文件系统,也就是系统最终作为 /使用的文件系统。只有进入这个环境,系统才能读取 /etc、/usr、服务配置和普通程序。
问题是,根分区可能位于 NVMe、RAID、LVM 或加密卷中。找到并打开它需要驱动和工具;这些驱动和工具却又不能等挂载根文件系统后再读取。
这形成了一个启动依赖:没有相关工具就找不到根分区,找不到根分区就无法读取相关工具。

initramfs 就是为了解开这个依赖而存在的临时早期用户空间。它的归档文件已经被 bootloader 放进内存,内核会将其展开成初始根环境。里面可以包含:
早期入口程序 /init;存储控制器与文件系统模块; 设备发现工具; 按需使用的磁盘解密、LVM 或 RAID 工具。
内核随后执行这个环境里的 /init。在采用 initramfs 的常见 Linux 启动中,它已经是第一个用户态进程,也就是 PID 1。
这个早期 /init根据内核参数和设备信息找到真正的系统盘,装载必要模块,打开所需存储层并挂载真实根文件系统。完成后,再通过 switch_root等机制切换到正式根环境,并执行正式的 init 程序。
initramfs 不是永久根文件系统,也不是每台机器都必须采用同样复杂的内容。如果内核已经内置了找到根文件系统所需的全部能力,一些简单系统可以采用更精简的启动方式。
07 PID 1如何启动服务和登录界面?
在没有 initramfs 的简单启动路径中,内核可以直接执行正式 init。使用 initramfs 时,早期 /init已经占据 PID 1;切换真实根文件系统后,它通常通过 exec替换成 systemd、SysV init 或其他 init 实现。
exec替换的是进程正在执行的程序映像,不会创建一个新的进程,因此进程号仍然是特殊的 PID 1。

PID 1 会读取系统配置和服务依赖,组织后续用户空间:
挂载其他文件系统; 管理设备节点与设备事件; 启动日志、网络、时间同步等系统服务; 启动终端登录服务或显示管理器; 进入字符 Shell 或图形桌面环境。
服务并不是只能一项接一项串行启动。像 systemd 这样的 init 系统会尽量并行处理彼此独立的任务,但有依赖关系的服务仍要等待前置条件满足。
例如,显示管理器可能需要文件系统、设备和基础会话环境已经就绪;网络服务则可能继续在后台获取地址,不一定阻塞本地登录界面出现。
因此,看到登录界面不代表每一个后台任务都已完成,只说明系统已经达到可以接受用户登录的状态。
Windows 不使用 Unix 的 PID 1 模型,但也会由内核和早期系统进程继续启动会话管理、服务控制与登录组件,最终进入登录界面和桌面。
08 总结

从按下开机键到看到登录界面,电脑完成了这样一场接力:
电源与主板控制逻辑让各路供电稳定,并解除 CPU 复位; CPU 从固件入口开始执行,UEFI 初始化内存和基础硬件; UEFI 根据 BootOrder 找到 ESP 中的 EFI 引导程序; 引导程序把内核、早期启动环境和参数装入 RAM; 内核初始化内存管理、中断、调度器和设备驱动; initramfs 中的早期 /init以 PID 1 找到并挂载真实根文件系统;正式 init 继续以 PID 1 组织系统服务、登录程序和桌面环境。
不同电脑的具体路径可能不同。快速启动、休眠恢复、虚拟机、嵌入式设备和直接 EFI 启动内核,都可能跳过或合并其中一些环节。
但现代电脑的基本责任边界不会颠倒:
固件负责建立早期硬件环境并寻找启动入口,引导组件负责准备内核,内核负责管理资源,用户空间负责提供系统服务和交互环境。

文章精选:
1.图灵奖得主姚期智最新演讲: AI有边界,恰恰是好事

