这是第二篇,也是最后一篇。主要介绍Windows Vista/2008/7/2008R2/8/2012的启动过程,即NT6.X的启动过程。我这具体用利用Vista为代表说明。
一样的,文字很多时候啰嗦无力,我们还是搞点图文并茂的,然后适当解说。
一般系统所在分区下会有如下的文件或文件夹,下面给予说明:
Bootmgr:Windows Nt6 系列的引导管理器,位于主激活分区内,属于系统隐藏文件。
Boot.bak:boot.ini 的备份,双系统的时候会存在。
/boot/[ 语言 ]/bootmgr.exe.mui: 在主分区 boot 目录下包括多个语言的 BOOTMGR.EXE.MUI ,用来和 bootmgr 组合形成启动菜单
/boot/bcd:相当于 xp 时代的 boot.ini ,不过 bcd 是基于数据库的,不是基于文本的,也是为了安全性考虑吧。微软专门提供了一个修改 bcd 的程序 bcdeit 来修改相应的参数
/boot/bcd.log&bcd.log1&bcd.log2:log 文件。
/boot/bootstat.dat:引导时候用来记录引导状态的数据文件
/boot/memtest.exe:内存测试工具
最后用文字来解释一下NT6.X的启动原理。(正常流程 , 因为还有很多非正常的情况启动过程有些区别,就不再这里赘述了)
首先加电之后是bios程序启动,bios自检完成之后,将mb 的代码读入内存,管理权交给mbr, mbr再读取dpt,从dpt找出硬盘的所有分区哪一个是激活的主分区。到这里为止,所以系统都是一样的。下面就有区别了。Dpt 读完找到主分区之后然后找到这个主分区的pbr ,pbr 位于激活主分区的第一个扇区。安装不同操作系统的时候pbr是会被改变的,xp的pbr写的代码是去找ntldr。而vista及以后的pbr里写进的就是去找bootmgr。
这个时候显示器上还没有显示引导管理器的界面。Bootmgr被找到之后管理权就交到了bootmgr 。Boot Manager首先从BCD中读取Boot Manager菜单的语言版本信息,然后再调用BOOTMGR与相应语言的BOOTMGR.EXE.MUI组成相应语言的启动菜单,之后才会在显示器上显示引导管理器,也就是选择多操作系统的那个文字界面。最后,当你选择了相应的操作系统,这里当然是vista(如果选择 xp, 会转入 xp 的启动流程,找到xp的ntldr然后启动),bootmgr 就去寻找系统分区(系统分区和主分区的概念不是一样的哦)windows/system32 下的 winload.exe 加载操作系统内核。剩下的事就是启动 windows系统了。
补充知识:
EFI(可扩展固件接口)
可扩展固件接口(英文名Extensible Firmware Interface 或EFI)是由英特尔,一个主导个人电脑技术研发的公司推出的一种在未来的类PC的电脑系统中替代BIOS的升级方案。BIOS技术的兴起源于IBM PC/AT机器的流行以及第一台由康柏公司研制生产的“克隆”PC。在PC启动的过程中,BIOS担负着初始化硬件,检测硬件功能,以及引导操作系统的责任,在早期,BIOS还提供一套运行时的服务程序给操作系统及应用程序使用。BIOS程序存放于一个掉电后内容不会丢失的只读存储器中,系统加电时处理器的第一条指令的地址会被定位到BIOS的存储器中,便于使初始化程序得到执行。
UEFI是由EFI1.10为基础发展起来的,它的所有者已不再是Intel,而是一个称作Unified EFI Form(www.uefi.org)的国际组织,贡献者有Intel,Microsoft,AMI,等几个大厂,属于open source,目前版本为2.1。现在是它一个开放的技术,国内已经有不少公司为了申请郭嘉"核高基"经费开始研究这个东西。UEFI中图形化的硬件设置界面是 Intel 为全新类型的 PC 固件的体系结构、接口和服务提出的建议标准。其主要目的是为了提供一组在 OS 加载之前(启动前)在所有平台上一致的、正确指定的启动服务,被看做是有近20多年历史的PC BIOS的继任者。
可以说,未来将是一个“没有特定 BIOS”的电脑时代。与传统BIOS 相比,UEFI最大的几个特点如下:
1. 编码99%都是由C语言完成;
2. 一改之前的中断、硬件端口操作的方法,而采用了Driver/protocal的新方式;
3. 将不支持X86模式,而直接采用Flat mode(也就是不能用DOS了,现在有些 EFI 或 UEFI 能用是因为做了兼容,但实际上这部分不属于UEFI的定义了);
4. 输出也不再是单纯的二进制code,改为Removable Binary Drivers;
5. OS启动不再是调用Int19,而是直接利用protocol/device Path;
6. 对于第三方的开发,前者基本上做不到,除非参与BIOS的设计,但是还要受到ROM的大小限制,而后者就便利多了。
GPT(全局唯一标识分区表)
GPT(Globally Unique Identifier Partition Table)一种由基于 Itanium 计算机中的可扩展固件接口 (EFI) 使用的磁盘分区架构,GPT是EFI方案的一部分,但并不依赖于EFI主板,在BIOS主板的PC中也可使用GPT分区。与主启动记录 (MBR) 分区方法相比,GPT 具有更多的优点,因为它允许每个磁盘有多达 128 个分区,支持高达 18 千兆兆字节的卷大小,允许将主磁盘分区表和备份磁盘分区表用于冗余,还支持唯一的磁盘和分区 ID (GUID)。
与支持最大卷为 2TB 并且与每个磁盘最多有 4 个主分区(或 3 个主分区,1 个扩展分区和无限制的逻辑驱动器)的主启动记录 (MBR) 磁盘分区的样式相比,GUID 分区表 (GPT) 磁盘分区样式支持最大卷为 18 EB ((1EB=1024PB=1,048,576TB,不过NTFS格式最大仅支持256TB。并且每磁盘最多有 128 个分区)。与 MBR 分区的磁盘不同,至关重要的平台操作数据位于分区,而不是位于非分区或隐藏扇区。另外,GPT 分区磁盘有多余的主要及备份分区表来提高分区数据结构的完整性。也就是说,如果你有一个超过2TB的磁盘,要完全使用,必须是GPT