Skip to content

按下开机键时候电脑都发生了什么

第一阶段:通电与硬件自检 (Power-On & POST)

  1. 通电 (Power On)
    • 你按下电源按钮,电源开始向主板、CPU、内存等所有组件提供稳定、符合规范的直流电。
    • 主板上由一个专门的时钟发生器开始产生时钟信号,同步整个系统的工作节奏。没有时钟,数字电路就无法工作。
  2. CPU复位 (Reset)
    • 电源稳定后,主板会向CPU发送一个复位信号。CPU内的所有寄存器会被重置为一个已知的、固定的初始状态。
    • 关键寄存器:程序计数器 (PC - Program Counter) 会被设置为一个预定义的硬编码地址。这个地址是CPU设计时决定的,指向BIOS/UEFI固件的起始位置(或者是从一个初始地址跳转到bios)。对于x86架构的CPU,这个地址通常是 0xFFFF0。这意味着CPU第一条指令就从这里开始取指执行。
  3. 执行固件代码 (BIOS/UEFI)
    • CPU开始从PC指向的地址取指、译码、执行。
    • 这些指令存储在主板上的一块ROM芯片中,这就是BIOS或更现代的UEFI。它的特点是非易失性,断电后内容不丢失,并且CPU在初始化早期就能直接读取。
    • 固件代码开始执行,第一个重要任务是POST (Power-On Self-Test)
    • **BIOS(基本输入输出系统)**是固化在主板 ROM 芯片中的程序,它在开机时最先运行。CMOS(互补金属氧化物半导体)是存储 BIOS 设置信息的芯片,靠主板电池在断电后维持数据,BIOS 启动时会读取 CMOS 中的设置来配置计算机。
      • 功能
        1. 硬件检测与初始化:包括开机自检硬件是否正常,为硬件分配资源并设置初始参数。
        2. 引导操作系统:按照设定的启动顺序引导操作系统,找到引导程序后移交控制权。
      • ROM 与 RAM
        1. ROM 芯片:只读的存储器。
        2. RAM 芯片:随机存储器,可读可写,停电会丢失数据。
        3. CMOS:是一个存储参数配置的芯片,BIOS 会读取 CMOS 的参数,了解 CPU 的配置、时间配置以及启动顺序的配置
  4. 加电自检 (POST)
    • 目的:检测关键硬件组件是否正常工作,为后续启动做准备。
    • 过程
      • 检测和初始化CPU、内存:检查CPU功能,计算并检测内存大小和所有内存单元能否正确读写。你听到的“嘀”一声,通常表示内存检测通过。
      • 检测和初始化外设:检测显卡、初始化显卡(此时屏幕开始显示),检测硬盘、键盘、鼠标等基本输入输出设备。
      • 即插即用设备检测:为其他PCIe等设备分配资源(如中断号、I/O端口地址、DMA通道等)。

第二阶段:引导加载器 (Bootloader)

  1. 查找引导设备
    • POST完成后,固件代码按照预设的启动顺序,去各个存储设备(硬盘、U盘、光驱等)的第一个扇区(512字节,称为主引导记录 MBR)或UEFI分区中的特定文件,寻找引导加载程序
    • 传统BIOS模式:读取硬盘的MBR,并将这512字节的内容加载到内存的 0x7C00这个固定位置。
    • 现代UEFI模式:直接从EFI系统分区中加载名为 bootmgfw.efi(Windows) 或 grubx64.efi(Linux) 的引导程序文件,无需经过MBR。
    • MBR(Master Boot Record)即主引导记录,位于硬盘的首个物理扇区(0 磁道 0 柱面 1 扇区),负责引导操作系统并管理硬盘分区信息,512 字节,存放引导代码和分区表。
  2. 执行引导加载器
    • CPU跳转到内存中引导加载器的位置并开始执行它的指令。
    • 引导加载器的核心任务
      • 它非常小,功能有限。它的主要任务是找到并加载操作系统内核
      • 内核通常存储在文件系统中,而简单的MBR引导加载器可能不认识复杂的文件系统。因此,现代引导过程通常是多阶段的:
        • 第一阶段(MBR中的)加载一个更强大的第二阶段引导加载器(如GRUB, Windows Boot Manager)。
        • 第二阶段引导加载器会读取文件系统,提供一个选择菜单,最终将操作系统内核映像从硬盘加载到内存中。

第三阶段:操作系统初始化

  1. 内核接管
    • 引导加载器将CPU的执行权交给已加载到内存中的操作系统内核
    • 内核开始解压自身(如果是压缩的),并初始化其核心数据结构。
  2. 初始化硬件和驱动
    • 内核会重新检测系统硬件,但这次是以更精细、更可控的方式。
    • 它加载并初始化设备驱动程序。驱动程序是操作系统与硬件之间的翻译官,让操作系统能真正控制硬件。
  3. 启动用户空间和初始化进程
    • 内核启动第一个用户空间进程
    • 在Linux中是 init(现在通常是 systemd)。
    • 在Windows中是 Session Manager Subsystem (smss.exe)
    • 这个进程会读取初始化脚本,启动系统服务(如网络、打印)、登录管理器(如图形化登录界面)。
  4. 用户登录
    • 你看到登录界面,输入用户名和密码。
    • 验证成功后,系统为你启动Shell(如Windows的Explorer.exe或Linux的Bash),整个启动过程完成。

总结:计算机组成原理视角的核心要点

阶段核心部件行为(计算机组成原理角度)
1. 通电电源、时钟发生器提供能量和同步信号,所有电路元件进入初始状态。
2. 取指CPUROMCPU的PC寄存器被硬编码到ROM地址,开始取指-译码-执行周期。
3. 自检内存、各种IO设备CPU执行ROM中的POST代码,通过写入/读出的方式测试内存外设控制器的寄存器。
4. 加载硬盘内存DMACPU或DMA控制器将硬盘第一个扇区的数据传输到内存的特定地址。
5. 跳转CPUCPU修改PC寄存器,跳转到内存中引导加载器的地址,开始执行其指令。
6. 移交CPU引导加载器将更大的内核程序从文件系统加载到内存,并最终跳转到内核入口点,将控制权移交

这个过程完美体现了冯·诺依曼体系结构的“存储程序”概念:CPU从不关心内存里是什么,它只是机械地从PC指向的地址取指令执行指令。而启动的本质,就是通过一系列精巧的设计(硬编码的PC初始值、固件、引导程序),让CPU最终能执行到我们想要的操作系统程序。

Reference

【科技百年】电脑开机的时候都发生了些什么?_哔哩哔哩_bilibili

开机启动过程_电脑启动过程-CSDN博客