Windows引导过程
Windows 作为最流行的个人计算机操作系统,成为了我们学习、工作和生活的一部分。平时使用计算机,我们都得先按下电源键然后等待 Windows 启动,初始化,进入欢迎页面,启动完成。会不会觉得整个过程比较神奇,想一探究竟?其实整个启动过程经历了多个阶段,接下来小编将一一讲述每一个阶段,揭开它们神秘的面纱。
通电后 CPU 首先执行的是主板引导程序,主板引导程序可分为 BIOS 和 UEFI。BIOS 是最早的方案,搭配 MBR 分区使用,BIOS 逐渐被 UEFI 代替,UEFI 一般搭配 GPT 分区使用,所以引导过程会有两种情况:
- BIOS + MBR
- UEFI + GPT
这两种情况都会分别介绍。
UEFI
UEFI(Unified Extensible Firmware Interface)以灵活扩展、引导更省时等特性,成为了 BIOS 的替代方案,新推出的主板和操作系统基本上默认使用 UEFI 引导,小编 Win10 系统采用的就是 UEFI 引导。
如何查看自己的计算机是什么方式引导的?
在“此电脑”上右键选择“管理”,弹出“计算机管理”选择“磁盘管理”,如果能找到一个“EFI 系统分区”,那么就是 UEFI 引导方式了。
UEFI 一般搭配 GPT 分区技术使用,虽然也可以搭配 MBR,但是由于 MBR 磁盘容量最大只能是 2TB,在磁盘容量越来越大的今天略显不足,所以默认都是使用 GPT 分区技术。GPT 可以做到:
- 支持容量超过 2TB 的磁盘;
- 使用 16 字节的 GUID 标识分区类型,不容易冲突;
- 理论上分区数目不限制(受限于 Windows 只能最多识别 128 个分区);
- 分区容量几乎没有限制,因为使用 64 位整数,64 位整数最大值为 2^64 – 1,数值非常大;
- 提供 CRC 检验,检测数据损坏;
- 备份分区表,提高可靠性。
引导流程
1.按下电源键,电源向主板以及其它设备供电,刚开始电压不稳,主板会持续发送 RESET 信号给 CPU,CPU 执行初始化。当电压稳定后,主板停止发送 RESET 信号,CPU 开始执行指令;
2.CPU 读取 UEFI 指令,执行 UEFI 初始化,执行其它设备的初始化;
3.查找 EFI 分区,EFI 分区不需要一定是第一个分区;
4.加载\\EFI\\Boot\\bootx64.efi,在安装 Windows 时实际上会使用\\EFI\\Microsoft\\Boot\\bootmgfw.efi 的内容替换到\\EFI\\Boot\\bootx64.efi,所以\\EFI\\Boot\\bootx64.efi 其实就是\\EFI\\Microsoft\\Boot\\bootmgfw.efi;
5.bootmgfw.efi 会读取 BCD 文件,BCD 是一个数据库文件,如果包含多个系统,信息会包含在 BCD 中,通过显示一个系统列表供用户选择;
6.BCD 中包含每个系统的引导文件的路径,Windows 的是\\Windows\\System32\\winload.efi,加载到内存中并执行;
7.winload.efi 读取\\Windows\\bootstat.dat 文件,有需要则显示引导菜单,比如安全引导等等;接着加载内核程序 Ntoskrnl.exe,相关辅助 HAL.dll、CI.dll、PSSHED.dll、BootVID.dll,把 CPU 执行权交给内核程序;
8.内核程序执行系统初始化。
通过上面的流程可知道,引导相关的文件都存放在 EFI 系统分区中,下图是小编 win10 的 EFI 系统分区的一些文件:
BIOS
BIOS(Basic Input Output System)是最早的引导方案并使用了相当长的一段时间,所以在 Win8、Win7、WinXP 以及更早的版本都能找到 BIOS 的引导存在。BIOS 只支持 MBR 分区技术,所以 GPT 并不适合 BIOS。
引导流程
1.上电并稳定后,CPU 执行地址 0xFFFF0h 处指令,此处为 BIOS 程序;
2.BIOS 进行硬件自检,没有问题后加载硬盘的第一个扇区到内存 0x7c00h 处,第一个扇区为 MBR(Master Boot Record),MBR 包含执行程序和分区表;
3.CPU 开始执行 MBR 程序,查找第一个活动分区,把活动分区的第一个扇区加载到内存中,活动分区第一个扇区为 PBR(Partition Boot Record);
4.CPU 开始执行 PBR,第一个指令就是跳过 BPB(BIOS Parameter Block)到可执行代码处;BPB 包含比较多参数,有族的大小、MFT 记录大小、MFT 位置等,用于读取 NTFS 文件;
5.PBR 读取 VBR(Volume BootRecord,占用分区开始的 16 扇区)剩余的 15 扇区到内存中;接着 CPU 跳转到 0x07C0:027A 处,执行 BOOTMGR 代码(第二个扇区中);
6.开始寻找 bootmgr.exe,找不到则寻找 ntldr.exe(win vista 之前的系统);
7.CPU 加载并跳转到 bootmgr.exe 处执行,读取 BCD 文件,如果含有多个系统,则列举显示供用户选择;
8.选择的是 Windows 则读取 winload.exe 文件到内存中,CPU 跳转到 winload.exe 处执行,读取文件\\windows\\bootstat.dat,有需要则显示引导菜单,比如安全引导等等;接着加载内核程序 Ntoskrnl.exe,相关辅助 HAL.dll、CI.dll、PSSHED.dll、BootVID.dll,把 CPU 执行权交给内核程序;
9.内核程序执行系统初始化。
可见 BIOS 引导更多的是通过 MBR 去引导系统,UEFI 则主导整个引导过程。
结束语
在启动计算机的过程中,难免会遇到各种各样的问题,比如蓝屏、黑屏等等,掌握了其启动的流程,将有利于我们对各类故障进行排查和修复。
以上就是关于今天的全部内容,下期将给大家带来《容器如何使用 tini 作为启动进程》,敬请期待~