Windows系统引导过程以及多系统引导原理

系统启动的两种引导方式计算机系统引导方式主要有两种:一种是传统的BIOS模式 , 另一种是新型UEFI(全称统一的可扩展固件接口)模式 。UEFI启动也可以看作是Bios的升级版 。不同模式对应不同的磁盘分区类型 , BIOS只可以识别MBR分区;而UEFI可同时识别MBR分区和GPT分区 , 所以在UEFI下可以启动不同磁盘类型中的操作系统 。

Windows系统引导过程以及多系统引导原理

文章插图
BIOS芯片
  • BIOS+MBR引导过程
BIOS引导过程:开机自检>BIOS>MBR(主引导记录)–>DPT(磁盘分区表)>PBR(分区引导记录)> Bootmgr(引导管理器)/NTLDR>BCD(从vista开始的引导配置数据)/boot.ini(XP 引导配置文件)>Winload.exe>内核加载 >windows vista+/windows xp
Windows系统引导过程以及多系统引导原理

文章插图
 
  1. 开机自检 , BIOS先要对CPU初始化 , 然后跳转到BIOS启动处进行POST自检 , (此过程如有严重错误 , 则电脑会用不同的报警声音提醒) , 接下来采用读中断的方式加载各种硬件 , 完成硬件的初始化 。
  2. 读入MBR(主引导记录),MBR主要功能是在分区表(DPT)中寻找可引导的活动分区(也叫激活主分区) , 并找到该分区的引导扇区(分区的第一个扇区)中的分区引导记录(PBR) , 载入PBR中的启动管理器(bootmgr.exe或NTLDR) 。注意:MBR磁盘分区格式下 , 一个磁盘只允许有一个分区是活动的 , 因此启动文件(bootmgr、BCD)必须存放在活动的主分区内 , 这样才能找到系统载入程序 。
  3. 启动管理器读取该分区boot文件夹里的启动配置文本BCD(或根目录下boot.ini) , 然后根据启动设置文件定位并加载二级引导载入程序winload.exe来加载OS内核 。如果有多个系统 , 启动配置文件就会有多个启动项 , 相应的bootmgr也会提供选择菜单 , 然后则根据用户选择来决定加载哪个系统的Winload(多系统引导选择) 。
  • UEFI+GPT 引导过程
UEFI引导过程:开机>UEFI>GPT分区表>ESP分区(也称EFI分区)>efiMicrosoftbootbootmgfw.efi>efiMicrosoftBCD>Windowssystem32winload.efi 。此过程没有MBR参与 。
Windows系统引导过程以及多系统引导原理

文章插图
 
  1. 开机启动自检 , 执行UEFI初始化模块;
  2. UEFI执行后 , 会进行CPU、北桥、南桥及存储器初始化工作 , 当这部分设备就绪后 , 紧接着它就载入UEFI驱动执行环境(Driver Execution Environment , 简称DXE) 。当DXE被载入时 , 系统就可以加载硬件设备的UEFI驱动程序了 。DXE使用了枚举的方式加载各种总线及设备驱动 , UEFI驱动程序可以放置于系统的任何位置 , 只要保证它可以按顺序被正确枚举 。借助这一点 , 我们可以把众多设备的驱动放置在磁盘的UEFI专用分区中(ESP分区) , 当系统正确加载这个磁盘后 , 这些驱动就可以被读取并应用了 。在这个特性的作用下 , 即使新设备再多 , UEFI也可以轻松地一一支持 , 由此克服了传统BIOS捉襟见肘的情形 。UEFI能支持网络设备并轻松联网 , 原因就在于此 。
  3. 从EFI分区找到启动管理器(efiMicrosoftbootbootmgfw.efi) 。
  4. 启动管理器导入EFI分区BCD文件(efiMicrosoftBCD) , 然后根据其配置内容加载引导加载程序winload.efi(C:Windowssystem32winload.efi)来加载OS内核 。如果BCD中有多个配置项 , 则会让用户选择要启动的系统 。如果有多个系统 , 启动设置文件就会有多个启动项 , 相应的bootmgr也会提供选择菜单 , 然后则根据用户选择来决定加载哪个系统的Winload(多系统引导原理) 。

Windows系统引导过程以及多系统引导原理

文章插图
 
在GPT磁盘格式下 , windows系统的启动文件和启动配置文件(bootmgfw.efi、BCD)是存放在一个不可见的FAT格式的分区里的(也叫ESP分区或EFI分区) 。
多系统启动原理多系统启动(以Windows系统为例)中 , BIOS+MBR和UEFI+GPT的引导方法基本上是一样的 , 都是通过启动配置文件(BCD或boot.ini)来显示启动菜单 , 当用户选中其中某个启动项后 , 启动管理器会加载不同分区的Winload以启动此分区下的操作系统 。
以下是通过BOOTICE修改启动配置文件(BCD) , 添加多系统启动项:


推荐阅读