计算机启动流程

主要流程

QQ_1733652535680.png

  • 电源通电并供电

    QQ_1733654013826.png

    1. 用户按下电源按钮,会发送一个PWRSW#(Power Switch)信号给嵌入式控制器(Embedded Controller EC)
    2. EC通知电源管理电路(Power Management Circuit,PMU)启动电源
    3. PMU发出启动信号激活电源供应单元(Power Supply Unit,PSU)
    4. PSU收到信号后,转化交流电为直流电,同时PSU内部的电压监控电路会检测PSU的输出电压,当所有输出电压稳定在正常值时,触发“电源正常”(POWERGOOD#或者PWROK#)的信号
    5. PSU向计算机各个部分供电,顺序依次是CPU,内存,南桥和北桥,扩展卡和外围设备,存储设备
  • 嵌入式控制器启动CPU

    QQ_1733654028036.png

    1. EC收到“电源正常“信号后,会通知主板上的芯片组,发送名为PM_PWRBTN#的信号,开始计算机的启动过程。
    2. 南桥和北桥相互通信,确保电源管理的正常进行。南桥向北桥发送PLT_RST#信号,同时向CPU发送PWRGOOD#信号。
    3. 北桥向CPU发送CPU_RST#信号(电平信号),通知CPU开始工作。此时,计算机的启动过程正式开始。
    4. 启动过程中,EC还可能会负责启动和管理冷却风扇、硬盘驱动等设备,并监控电源状态。
    • 64位CPU在启动时,会先进入兼容模式,即模拟32位CPU的工作方式,以保持和旧的BIOS的兼容性。在兼容模式下,CPU的地址线只使用32位,地址总线上的地址也只有32位,即从0x000000000xFFFFFFFF。因此,CPU仍然会从0xFFFFFFF0开始读取BIOS的入口地址,然后跳转到0xF0000处执行BIOS的代码。
    • BIOS的代码会检测CPU的类型,如果发现是64位CPU,就会切换到长模式,即64位CPU的正常工作方式。在长模式下,CPU的地址线使用64位,地址总线上的地址也有64位,即从0x00000000000000000xFFFFFFFFFFFFFFFF。这样,CPU就可以寻址更大的地址空间,加载更大的操作系统。
  • CPU加载BIOS/UEFI

    QQ_1733654075225.png

    1. 接收到CPU_RST#信号后,CPU会将指令指针寄存器(IP)设置为0xFFFFFFF0,这是CPU保留的最高的64KB的地址空间给BIOS使用的起始地址。(IP寄存器存储了CPU要执行的下一条指令的地址)
    2. CPU通过地址总线将0xFFFFFFF0发送给ROM。ROM会根据地址总线上的地址,将对应的数据通过数据总线发送回CPU。CPU会将数据总线上的数据读入指令寄存器(IR),然后解码并执行。(IR寄存器存储了CPU当前要执行的指令的内容)
    3. 一般情况下,ROM中的0xFFFFFFF0处的数据是一条跳转指令,它会将IP寄存器的值修改为0xF0000,这是BIOS的实际入口地址。这样,CPU就可以跳转到0xF0000处,开始执行BIOS的代码(在0xF00000xFFFFF之间,大小64K)。
    4. BIOS的代码会对硬件进行检测和初始化,然后加载操作系统的引导程序(Boot Loader),最后将控制权交给操作系统。
  • BIOS通过Boot Loader加载OS

    QQ_1733654901646.png

    1. BIOS在完成硬件的检测和初始化后,会读取CMOS中的设置,确定要从哪个设备启动,比如硬盘,光盘,U盘等。(CMOS是一种可读写的存储器,用于保存BIOS的配置信息)
    2. BIOS通过INT 13h中断来访问硬盘,来读取该设备的第一个扇区,也就是主引导记录(Master Boot Record MBR)。MBR是一个512字节的数据块,包含了Boot Loader的一部分代码,以及硬盘的分区表,它记录了硬盘上的分区信息,包括每个分区的起始扇区、大小、类型和状态(是否为活动分区)。
    3. BIOS将MBR中的Boot Loader的代码复制到内存的0x7C00处,然后跳转到该地址,执行Boot Loader的代码。
    4. MBR中的启动代码根据分区表找到活动分区(Active Partition),也就是操作系统所在的分区,然后从该分区的第一个扇区中读取卷引导扇区(Volume Boot Record VBR)。VBR也是一个512字节的扇区,它包含了一个卷引导记录(Volume Boot Record)和一个文件系统信息(File System Info)。
    5. MBR中的启动代码会将读取到的VBR复制到内存地址0x7C00处,覆盖掉原来的MBR,然后跳转到该地址执行VBR中的启动代码。VBR中的启动代码会根据文件系统信息来找到操作系统内核文件(OS Kernel File),这是一个可执行文件,它包含了操作系统的核心功能和服务。
    6. VBR中的启动代码会将读取到的OS Kernel File复制到内存中的一个合适的地址,然后跳转到该地址执行OS Kernel File中的启动代码。这时,操作系统就开始运行了,它会接管计算机的控制权,初始化各种设备驱动和系统服务,然后加载用户界面和应用程序,等待用户的输入。
  • 一些概念
    • BIOS: Basic Input/Output System(基本输入输出系统)。存储在主板ROM中的固件,负责计算机启动时的硬件初始化和测试(POST),以及加载和启动操作系统。
    • UEFI: Unified Extensible Firmware Interface(统一可扩展固件接口)。BIOS的现代替代方案,提供更友好的用户界面、支持更大容量的存储设备、更快的启动速度和安全启动功能。
    • EC: Embedded Controller(嵌入式控制器)。主板上的微控制器,用于管理低速外设(如键盘、风扇、触摸板)和电源控制,是电源管理系统的重要组成部分。
    • PSU: Power Supply Unit(电源供应单元)。计算机硬件的供电装置,将交流电(AC)转换为直流电(DC),并按不同的电压等级供电给各个硬件组件。
    • PMU: Power Management Unit(电源管理单元)。用于管理电源的硬件模块或芯片,负责协调电源启动、休眠唤醒和节能模式的操作。
    • POST: Power-On Self-Test(开机自检)。由BIOS或UEFI执行的硬件检查过程,用于确保CPU、内存、显示设备和其他组件功能正常。
    • Boot Loader: 启动加载器。存储在硬盘引导扇区的程序,负责加载操作系统内核并将控制权移交给操作系统。
    • CMOS: Complementary Metal-Oxide Semiconductor(互补金属氧化物半导体)。一种低功耗存储器,用于保存计算机硬件设置(如时间、日期和启动顺序),由主板电池提供电力支持。
    • PWROK: Power OK(电源正常信号)。由PSU发送的信号,表示电源输出电压已经稳定,系统可以开始运行。
    • IP寄存器: Instruction Pointer Register(指令指针寄存器)。CPU中的寄存器,用于存储当前正在执行的指令地址或下一条指令的内存地址。
    • ROM: Read-Only Memory(只读存储器)。存储计算机启动相关固件(如BIOS或UEFI)的非易失性存储设备,断电后数据仍可保存。
    • CPU_RST#: CPU Reset Signal(CPU复位信号)。用于通知CPU复位并开始执行第一条指令,通常由电源或嵌入式控制器控制。
    • PWRBTN#: Power Button Signal(电源按钮信号)。由用户按下电源按钮触发的信号,用于通知嵌入式控制器启动计算机。
    • PLT_RST#: Platform Reset Signal(平台复位信号)。由主板芯片组(如南桥)发出的信号,用于同步系统硬件的初始化操作。
    • RAM: Random Access Memory(随机存取存储器)。一种易失性存储器,用于存储当前运行程序和操作系统的数据,断电后数据会丢失。
    • EEPROM: Electrically Erasable Programmable Read-Only Memory(电可擦除可编程只读存储器)。一种可多次擦写的非易失性存储器,通常用于保存设备设置和固件数据。
    • 南桥: Southbridge(南桥芯片)。主板芯片组的一部分,负责管理I/O设备(如硬盘、USB设备、PCI接口)以及与嵌入式控制器的通信。
    • 北桥: Northbridge(北桥芯片)。主板芯片组的一部分,负责连接CPU、内存和高速接口(如显卡)。
    • 硬件断电信号: 用于切断计算机电源的信号,由嵌入式控制器或电源按钮触发。
    • 复位矢量: Reset Vector。CPU复位后执行的第一条指令地址,通常由BIOS或UEFI设置,用于启动系统的初始程序。

参考文档

https://www.cnblogs.com/anywherego/p/17960904