Windows 2008/Vista | Windows 2000/2003/XP |
1) BIOS中的代码选择引导设备(注:这在BIOS中设置;有些新的BIOS可以在开机时按F9来人为干预),例如某一个硬盘。然后去该硬盘的第一个扇区读取MBR
| 1) BIOS中的代码选择引导设备,并读取MBR中的代码
|
2) MBR中的code会扫描分区表,找到带有Active标志的那个分区(即活动分区)
| 2) MBR中的code会扫描分区表,找到带有Active标志的那个分区(即活动分区) |
3) 将活动分区的第一个扇区(也就是引导扇区)中的代码读取到内存,并将控制权移交。
| 3) 将活动分区的第一个扇区(也就是引导扇区)中的代码读取到内存,并将控制权移交。
|
4) 引导扇区中的代码做:i) 读取Volume的结构和格式,ii) 并从根目录读取Bootmgr
| 4) 引导扇区中的代码:i) 读取Volume的结构和格式,ii) 并从根目录读取ntldr
|
5) 如果找不到bootmgr,则显示出错信息“BOOTMGR is missing ” (注:Vista/2008的引导分区必须是NTFS)
| 5) 如果找不到ntldr,引导区是FAT时显示“BOOT: Couldn't find NTLDRP”,引导区是NTFS时显示“NTLDR is missing” |
6) Bootmgr运行在x86 real mode,也就是没有 physical-virtual内存的转换,都直接用物理内存寻址。这时候只有最低位的1MB内存可以访问
| 6) 此时NTLDR运行在x86 实模式,此时仍没有物理-虚拟内存地址的转译 |
7) Bootmgr的第一个动作就是将模式转换成保护模式(protected mode)。等到最低16MB内存都能访问了,Bootmgr就启用paging。带有paging enable的保护模式,就是windows运行的常态。
| 7) NTLDR的第一个动作就是将模式转换成保护模式(protected mode)。等到最低16MB内存都能访问了,Bootmgr就启用分页机制(paging) |
8) 运行在保护模式下的bootmgr这时候仍然依靠BIOS中的驱动程序来访问IDE硬盘和控制显示。与引导扇区代码不同的是,此时bootmgr已经可以认子目录了
| 8) 此时,NTLDR仍然依靠BIOS中的驱动程序来访问IDE硬盘和控制显示。与引导扇区代码不同的是,此时NTLDR已经可以认子目录了 |
9) Bootmgr 清屏(这个时候你将看见一个黑色的屏幕)
| 9) NTLDR清屏(这个时候你将看见一个黑色的屏幕) |
10) 如果上次关机时选择的是Hybernating状态,则将控制权移交给winresume.exe
| 10) 如果系统卷根目录下存在一个有效的hiberfil.sys文件,将此文件读入内存,并将控制权交给一段能恢复休眠状态的代码。 |
11) Bootmgr读取BCD,如果其中只有唯一的项,则跳过引导菜单。否则显示引导菜单。
| 11) 从根目录下读取boot.ini,如果其中只有唯一的引导项,则跳过引导菜单。否则显示引导菜单。 |
12) 读BCD中的引导入口信息(boot entry point),通常这是\Windows目录。
(2008/Vista不同时支持DOS)
| 12) boot.ini中的选项告诉NTLDR,被选中的Windows系统驻留在那个分区;
12.1) 如果boot.ini指向一个MS-DOS系统,NTLDR将bootsect.dos文件内容读入内存,并切换回16位实模式;Bootsect.dos中的代码继续进行MS-DOS的引导过程。 |
13) 运行Winload.exe 并将控制权移交。
| 13) NTLDR清除屏幕。并(Windows 2000)显示“Starting Windows”进度条。进度条下显示“For troubleshooting and advanced startup options for Windows, Press F8”。此时按下F8,可以进入一个菜单,包括选择安全模式。
(Windows 2003/XP),显示带Windows Logo的启动屏幕。
运行ntkrnl???
|