计算机启动流程
计算机启动流程
主要流程
电源通电并供电
- 用户按下电源按钮,会发送一个
PWRSW#
(Power Switch)信号给嵌入式控制器(Embedded Controller EC) - EC通知电源管理电路(Power Management Circuit,PMU)启动电源
- PMU发出启动信号激活电源供应单元(Power Supply Unit,PSU)
- PSU收到信号后,转化交流电为直流电,同时PSU内部的电压监控电路会检测PSU的输出电压,当所有输出电压稳定在正常值时,触发“电源正常”(
POWERGOOD#
或者PWROK#
)的信号 - PSU向计算机各个部分供电,顺序依次是CPU,内存,南桥和北桥,扩展卡和外围设备,存储设备
- 用户按下电源按钮,会发送一个
嵌入式控制器启动CPU
- EC收到“电源正常“信号后,会通知主板上的芯片组,发送名为
PM_PWRBTN#
的信号,开始计算机的启动过程。 - 南桥和北桥相互通信,确保电源管理的正常进行。南桥向北桥发送
PLT_RST#
信号,同时向CPU发送PWRGOOD#
信号。 - 北桥向CPU发送
CPU_RST#
信号(电平信号),通知CPU开始工作。此时,计算机的启动过程正式开始。 - 启动过程中,EC还可能会负责启动和管理冷却风扇、硬盘驱动等设备,并监控电源状态。
- 64位CPU在启动时,会先进入
兼容模式
,即模拟32位CPU的工作方式,以保持和旧的BIOS的兼容性。在兼容模式下,CPU的地址线只使用32位
,地址总线上的地址也只有32位,即从0x00000000
到0xFFFFFFFF
。因此,CPU仍然会从0xFFFFFFF0
开始读取BIOS的入口地址,然后跳转到0xF0000
处执行BIOS的代码。 BIOS
的代码会检测CPU的类型
,如果发现是64位CPU,就会切换到长模式
,即64位CPU的正常工作方式。在长模式下,CPU的地址线使用64位,地址总线上的地址也有64位,即从0x0000000000000000
到0xFFFFFFFFFFFFFFFF
。这样,CPU就可以寻址更大的地址空间,加载更大的操作系统。
- EC收到“电源正常“信号后,会通知主板上的芯片组,发送名为
CPU加载BIOS/UEFI
- 接收到
CPU_RST#
信号后,CPU会将指令指针寄存器(IP)设置为0xFFFFFFF0
,这是CPU保留的最高的64KB的地址空间给BIOS使用的起始地址。(IP寄存器存储了CPU要执行的下一条指令的地址) - CPU通过地址总线将
0xFFFFFFF0
发送给ROM。ROM会根据地址总线上的地址,将对应的数据通过数据总线发送回CPU。CPU会将数据总线上的数据读入指令寄存器(IR),然后解码并执行。(IR寄存器存储了CPU当前要执行的指令的内容) - 一般情况下,ROM中的
0xFFFFFFF0
处的数据是一条跳转指令,它会将IP寄存器的值修改为0xF0000
,这是BIOS的实际入口地址。这样,CPU就可以跳转到0xF0000
处,开始执行BIOS的代码(在0xF0000
到0xFFFFF
之间,大小64K)。 - BIOS的代码会对硬件进行检测和初始化,然后加载操作系统的
引导程序(Boot Loader)
,最后将控制权交给操作系统。
- 接收到
BIOS通过Boot Loader加载OS
- BIOS在完成硬件的检测和初始化后,会读取
CMOS
中的设置,确定要从哪个设备启动,比如硬盘,光盘,U盘等。(CMOS
是一种可读写的存储器,用于保存BIOS的配置信息) - BIOS通过
INT 13h
中断来访问硬盘,来读取该设备的第一个扇区,也就是主引导记录
(Master Boot Record MBR)。MBR
是一个512字节
的数据块,包含了Boot Loader的一部分代码,以及硬盘的分区表,它记录了硬盘上的分区信息,包括每个分区的起始扇区、大小、类型和状态(是否为活动分区)。 - BIOS将MBR中的Boot Loader的代码复制到内存的
0x7C00
处,然后跳转到该地址,执行Boot Loader的代码。 - MBR中的启动代码根据
分区表
找到活动分区
(Active Partition),也就是操作系统所在的分区
,然后从该分区的第一个扇区中读取卷引导扇区
(Volume Boot Record VBR)。VBR也是一个512字节的扇区,它包含了一个卷引导记录
(Volume Boot Record)和一个文件系统信息
(File System Info)。 - MBR中的启动代码会将读取到的
VBR
复制到内存地址0x7C00
处,覆盖掉原来的MBR,然后跳转到该地址执行VBR中的启动代码。VBR中的启动代码会根据文件系统信息来找到操作系统内核文件
(OS Kernel File),这是一个可执行文件,它包含了操作系统的核心功能和服务。 - VBR中的启动代码会将读取到的
OS Kernel File
复制到内存中的一个合适的地址,然后跳转到该地址执行OS Kernel File
中的启动代码。这时,操作系统就开始运行了,它会接管计算机的控制权,初始化各种设备驱动和系统服务,然后加载用户界面和应用程序,等待用户的输入。
- BIOS在完成硬件的检测和初始化后,会读取
- 一些概念
- 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设置,用于启动系统的初始程序。
参考文档
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 EPs1l0h's Castle!
评论