引言

启动过程是我们了解操作系统的第一个环节。了解 Windows 的启动过程,可以帮助我们解决一些启动的问题,也能帮助我们了解 Windows 的整体结构。

以下内容将分为【加载内核】、【内核初始化】和【应用程序初始化】三个部分。

启动过程概览

启动过程概览

加载内核

Untitled

启动过程概览 所示,加载过程分为两种方式。传统的 BIOS(Basic Input/Output System)和 UEFI(Unified Extensible Firmware Interface)。这两种方式大致相似,本文以 BIOS 为例来说明引导说过。

加载 BIOS

此部分参考:[How BIOS Works (yale.edu)](http://flint.cs.yale.edu/feng/cos/resources/BIOS/#:~:text=How does system,set it active.)

当开机键被按下后,电源将执行初始化,确保电源可靠后,主板上的硬件电路给 CPU 发复位(reset)信号。

CPU 收到复位信号后,将从 RAM 中读取指令执行。此时内存中是没有任何指令需要执行的。于是 CPU 就去 BIOS ROM 中特定的位置(FFFF0H)中执行指令,这个指令是一个跳转指令 ,将告诉 CPU 真正的 BIOS 程序所在的位置。跳转指令如下:

jmp far f000:e05b ; 跳转到0xfe05b执行

运行 BIOS

BIOS 主要包含以下四个部分的程序:

Windows 的做法是,让引导扇区中的代码读入其他扇区的数据,然后跳转到下一个扇区的代码区。这样就可以不受单个引导扇区长度的限制,这种做法相当于将第一个引导扇区当做一个加载器(loader),而真正完成引导扇区功能的扇区随后被加载进来并执行。这一过程对于 MBR 是透明的,从而保持良好的兼容性。

加载 NT 内核