--- title: "02-从按下电源到桌面:开机全流程" aliases: - 从按下电源到桌面 created: 2026-08-29 tags: - 基础与理论 - 计算机速览 --- # 从按下电源到桌面:开机全流程 > 上一篇 [[01-计算机硬件速览]] 的 BIOS 段落留了个尾巴:"系统启动后,管家交权给操作系统"。这篇把交权现场完整演一遍:按下电源到桌面亮起,中间那几十秒到底发生了什么。这也是硬件区通向 [[00-操作系统总览|操作系统]] 的桥。 ## 一、按下电源那一刻:第一条指令从哪来 悖论开场:CPU 是万能的,但它刚醒时内存是空的(RAM 断电即失忆),硬盘还没人驱动。CPU 想执行程序,程序在哪? 硬件工程师早安排好了:**CPU 上电复位后,从固定地址取第一条指令**(x86 是 0xFFFF0 附近),那片地址不在内存,在 **ROM** 里——BIOS 就躺在这。上一篇的"代理管家",正式出场。 整个开机就是一场**接力赛**:BIOS → 引导程序 → 内核 → init → 桌面。每一棒只干一件事:**找到下一棒,交出去**。 ## 二、POST:先体检再干活 BIOS 接手第一件事是 **POST(Power-On Self-Test,上电自检)**: - 逐个检查 CPU、内存、键盘、显卡、磁盘 - 从 **CMOS** 读硬件配置(纽扣电池维持的那块芯片) - 自检过不了就"哔——"报警。老主板能听声辨故障(一长两短多半是显卡) 自检通过,屏幕亮起厂商 Logo,管家开始物色"谁来当系统"。 ## 三、BIOS 与 UEFI:两代管家 | | BIOS(传统) | UEFI(现代,2010 后主流) | | --- | --- | --- | | 设置界面 | 蓝底白字,纯键盘 | 图形界面,能用鼠标 | | 磁盘/分区 | 配 MBR,最大 2TB | 配 GPT,超大硬盘 | | 引导程序位置 | 裸藏在磁盘第一个扇区 | 独立 **ESP 分区**(FAT32)里的 .efi 文件 | | 安全 | 无 | **Secure Boot**(校验引导程序签名,防病毒抢跑) | | 运行模式 | 16 位实模式起步 | 直接 32/64 位 | > 💡 UEFI 的引导程序成了正经"文件",所以 UEFI 主板可以联网更新固件、装驱动——这在 BIOS 时代不可想象。2026 年买到的电脑几乎全是 UEFI,BIOS 只是历史课。 ## 四、找引导设备:MBR 与 GPT 固件按你在 setup 里设的顺序(U 盘优先?硬盘优先?**装系统改启动项就是在这**)逐个探测,找到后读设备的"目录牌": **MBR(主引导记录)**——磁盘第 0 个扇区,512 字节,寸土寸金: ``` 446 字节 引导代码(固件从这开始执行) 64 字节 分区表(4 条 × 16 字节 → 最多 4 个主分区) 2 字节 魔数 0x55AA("此扇区有效"的签名) ``` 2TB 限制怎么来的:分区表里的 LBA 地址只有 32 位,2³² × 512B = **2TB**,天花板焊死。 **GPT(GUID 分区表)**用 64 位地址 + UUID 标识分区,还在**磁盘末尾存了一份备份表头**——开头坏了读结尾照样活。所以大硬盘 + 现代系统,GPT 是必选项。 ## 五、引导程序:GRUB 与 bootmgr 446 字节装不下"认识文件系统"的逻辑,于是接力继续分两棒: - **第一阶段**(MBR 里的 446 字节):只干一件事——找到并加载第二阶段 - **第二阶段**:真正的引导程序。Linux 是 **GRUB**(让你选系统/内核的菜单就是它),随后把内核文件 **vmlinuz** 和配套的 **initramfs** 搬进内存;Windows 是 **bootmgr**,读 BCD 配置后加载 winload 装过双系统的都见过 GRUB 菜单——那一刻做选择的,就是引导程序。 ## 六、内核接管:鸡生蛋问题与 initramfs GRUB 把内核解压进内存,CPU 跳到内核入口——**操作系统正式登场**,固件退居幕后(留下一份硬件清单给内核)。 内核的第一道坎是个死结:**挂载根文件系统(读全量驱动)需要磁盘驱动,而磁盘驱动就在盘上**——鸡生蛋。 Linux 的解法是 **initramfs**:引导程序额外加载一个微型"临时根文件系统"进内存,里面放着最基本的驱动;内核先用它把硬盘驱动装好、挂上真正的根分区,然后 initramfs 功成身退。**临时工转正后下车。** ## 七、1 号进程:从内核到用户世界 内核初始化完内存管理、调度器、各类子系统后,创建系统第一个用户态进程——**PID 1**: - 现代 Linux 发行版:**systemd**。把旧时代串行执行的启动脚本,换成一张**依赖图并行拉起**服务(网络、日志、SSH……),开机速度的飞跃主要归功于这 - systemd 按 target(旧称 runlevel)决定拉起哪些服务 最后 systemd 拉起**显示管理器**(GDM 等)→ 登录界面 → 输密码 → 桌面环境点亮。**你按下的电源,经过 固件 → 引导程序 → 内核 → systemd → 桌面 五级接力,跑完全程。** ## 八、三大系统对照表 | 阶段 | Windows | Linux | macOS | | --- | --- | --- | --- | | 固件 | BIOS/UEFI | BIOS/UEFI | Intel 时代 UEFI;Apple 芯片走自家 iBoot | | 引导 | bootmgr + BCD | GRUB | boot.efi | | 内核 | ntoskrnl.exe | vmlinuz | XNU | | 1 号进程 | smss/wininit + services | systemd | **launchd** | | 桌面 | Explorer | GNOME/KDE… | Aqua(Finder/Dock) | > 💡 macOS 的 launchd 和 systemd 设计哲学异曲同工:把"开机启动谁"从一串脚本,变成一组**声明式配置**,谁依赖谁写得明明白白。 ## 九、顺带说清:睡眠、休眠、重启 | 动作 | 内存 | 硬盘 | 恢复速度 | | --- | --- | --- | --- | | 睡眠(Suspend to RAM) | 保电 | 不涉及 | 秒醒 | | 休眠(Hibernate) | 断电 | 内存完整快照写入硬盘 | 较慢(要读回) | | 重启 | 全部重来 | — | 最慢 | Windows 的"快速启动"= 关机时把**内核会话**休眠进硬盘,下次开机跳过部分初始化。所以有个经典怪象:**"重启能修的问题,关机再开修不了"**——因为那种关机不是真关。 ## 十、盲点自测 1. **内存断电即空,CPU 第一条指令从哪来?** ——复位后从固定地址取指,那里是 ROM 里的固件(BIOS/UEFI)。 2. **MBR 为什么最多 4 主分区、最大 2TB?** ——64 字节分区表只装得下 4 条记录;LBA 32 位 × 512B = 2TB。GPT 两个都解决。 3. **initramfs 解开什么死结?** ——挂根文件系统要磁盘驱动,驱动又在盘上。initramfs 是进内存的临时根,装好驱动挂上真根后功成身退。 4. **PID 1 是谁?挂了会怎样?** ——systemd(Linux)/ launchd(macOS)是所有用户进程的祖先;1 号进程退出,内核直接 panic。 5. **UEFI 比 BIOS 多了什么?** ——图形界面、GPT 大硬盘、ESP 分区、Secure Boot 签名校验、联网更新固件。 6. **睡眠和休眠差在哪?** ——睡眠给内存保电(RAM 持续供电);休眠把内存快照写进硬盘后彻底断电,更省电但恢复慢。 7. **为什么"关机再开"有时修不了"重启"能修的问题?** ——Windows 快速启动让关机保留了内核会话(半休眠状态),重启才是完整初始化。 ## 十一、动手玩一把 ```bash # Linux(systemd 系):开机各阶段耗时 systemd-analyze # firmware / loader / kernel / userspace 总账 systemd-analyze blame | head # 谁拖慢了开机 # macOS:历史开机记录 last reboot | head # 判断本机是 UEFI 还是 BIOS(Linux) [ -d /sys/firmware/efi ] && echo UEFI || echo BIOS # macOS 看引导固件信息 system_profiler SPHardwareDataType | grep -i boot ``` --- 部件全认识了,也看着它们集体开了工。但部件之间到底靠什么"对话"?补上最后一块硬件拼图 → [[03-总线与接口]] ⬅️ [[01-计算机硬件速览|计算机硬件速览]] 🏠 [[00-基础与理论|00-基础与理论]] ➡️ [[03-总线与接口|总线与接口]]