Window启动过程

Windows启动包含下面几个阶段

1. 启动自检阶段

​ 在打开电源时,计算机开始自检过程,从BIOS中载入必要的指令,然后进行一系列的自检操作,进行硬件的初始化检查(内存,硬盘,键盘等),同时在屏幕上显示信息。

2. 初始化启动阶段

​ 自检完成后,根据CMOS的设置,BIOS加载启动盘,将主引导记录(MBR)中的引导代码载入内存。接着,启动过程由MBR来执行。启动代码搜索MBR中的分区表,找出活动分区,将第一个扇区中的引导代码载入内存。引导代码检测当前使用的文件系统,查找ntldr文件,找到之后将启动它。BIOS将控制权交给ntldr,由ntldr完成操作系统的启动工作(Windows7 与此不同,使用的时bootmgr)。

3. Boot加载阶段

​ 在这个阶段,先从启动分区加载ntldr,然后对ntldr进行如下配置。

​ 1.设置内存模式,如果是x86处理器,并且是32位操作系统,则设置为“32-bit flat memory mode”;如果64位操作系统,并且是64位处理器,则设置为64位内存模式。

​ 2.启动一个简单的文件系统,以定位boot.ini 、ntoskrnl、Hal等启动文件。

​ 3.读取boot.ini文件。

4. 检测和配置硬件阶段

​ 在这个阶段会检查和配置一些硬件设备,例如系统固件、总线和适配器、显示适配器、键盘、通信端口、磁盘、软盘、输入设备(鼠标等)、并口、ISA总线上运行的设备等。

5.内核加载阶段

​ ntldr将首先加载Windows内核Ntoskrnl.exe和硬件抽象层(HAL)。HAL会对硬件底层的特性进行隔离,为操作系统提供统一的调用接口。接下来,ntldr从注册表的HKEY_LOCAL_MACHINE\System\CurrentControlSet键下读取这台机器安装的驱动程序,然后依次加载驱动程序。初始化底层设备驱动,在注册表的HKEY_LACAL_ACHINE\System\CurrentControlSet\Services键下查找Start键的值为0和1的设备驱动。

​ Start键的值可以为0、1、2、3、4,数值越小,启动越早。SERVICE_BOOT_START(0)表示内核刚刚初始化,此时加载的都是与系统核心有关的重要驱动程序,例如磁盘驱动;SERVICE_SYSTEM_START(1)稍晚一些;SERVICE_AUTO_START(2)是从登录界面出现的时候开始,如果登录速度较快,很可能驱动还没有加载就已经登录了;SERVICE_DMAND_START(3),表示在需要的时候手动加载;SERVICE_DISABLED(4)表示禁止加载。

6. Windows的会话管理启动

​ 驱动程序加载完成,内核会在启动会话管理器。这是一个名为smmss.exe的程序,是Windows系统中第一个创建的用户模式进程,其作用如下。

  • 创建系统环境变量
  • 加载win32k.sys,它是Windows子系统的内核模式部分。
  • 启动csrss.exe,它是Windows子系统的用户模式部分。
  • 启动winnlogon.exe。
  • 创建虚拟内存页面文件。
  • 执行上次系统重启前未完成的重命名工作(PendingFileRename)。

7. 登陆阶段

​ Windows子系统启动的winlogon.exe系统服务提供对Windows用户的登录和注销的支持,可以完成如下工作。

  • 启动服务子系统(services.exe),也称服务控制管理器(SCM)。
  • 启动本地安全授权(LSA)过程(lsass.exe)。
  • 显示登录界面。

​ 登录组件将用户的账号和密码安全的传送给LSA进行认证处理。如果用户提供的信息是正确的,能够通过认证,就允许用户对系统进行访问。

8. Windows 7和 Windows XP启动过程的区别

  • BIOS启动自检后,将MBR载入内存并执行,引导代码找到启动管理器Bootmgr。
  • Bootmgr 寻找活动分区boot文件夹中的启动配置数据BCD文件,读取并组成相应语言的启动菜单,然后在屏幕上显示多操作系统选择界面。
  • 选择Windows7系统后,Bootmgr就会读取系统文件windows\system32\winload.exe,并将控制权交给winload.exe。
  • Winload.exe加载Windows 7的内核、硬件、服务等,然后加载桌面等信息,从而启动 整个Windows 7系统。

9. 新一代引导方式UEFI与GPT

​ 以上说的是传统的系统引导核启动,这种方法主要借助BIOS和MBR完成系统的引导和启动。但是,这种方法有局限性,例如磁盘逻辑块地址(Logical Block Address,LBA)是32位的,最多表示2^32个扇区,而每个扇区的大小一般为512字节,所以最多支持2^32*512=2 * 2^40字节,即2TB.而且,MBR最多支持4个主分区或3个主分区和一个拓展分区,拓展分区下可以有多个逻辑分区。在BIOS中,启动操作系统之前必须从硬盘上的指定扇区中读取系统启动代码(包含在MBR中),然后从活动分区中引导并启动操作系统。对扇区的操作远比不上对分区中的文件的操作那样直观和简单。

​ 为了打破传统的BIOS与MBR引导系统的局限,新的系统引导方式(即UEFI结合GPT)已经出现并逐渐成为今后系统引导的主要解决方案。

​ UEFI(Unified Extensible Firware Interface,统一的可拓展固件接口)的出现主要用于替换BIOS。在UEFI中,用于LBA的地址是64位的,突破了在BIOS与MBR技术方案中分区容量2TB的限制。

​ UEFI本身已经相当与一个微型操作系统了,UEFI具备文件系统的支持能力,能够直接读取FAT分区中的文件。开发人员可以开发出直接在UEFI下运行的应用程序,这类程序文件通常以 “efi” 结尾。我们可以将Windows操作系统变得简单。而在UEFI下,这些统统都不需要–不需要主引导记录,不需要活动分区,不需要任何工具。只要将安装文件复制到一个FAT32(主)分区或U盘中,通过这个分区或U盘即可安装和启动Windows。

​ 与传统的MBR分区表相比,新型的GPT(GUID Partition Table,全局唯一标识分区表)对分区数量没有限制,但Windows在实现GPT的时候,将分区的个数限制在128个GPT分区以内,GPT可管理磁盘大小达到了18EB,因此,只有基于UEFI平台的主板才支持GPT分区引导启动。

END

1571159988223

Author: BarretGuy
Link: https://basicbit.cn/2017/04/13/2017-04-13-Windows启动过程/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.