[0.0]Windows启动过程概述

1.x86和x64引导过程中所涉及的组件

1--MBR:     读入和加载分区的引导扇区;

2--引导扇区:   读入根目录,以加载ntldr;

3--NTLDR:    读入Boot.ini,提示引导菜单,加载Ntoskrnl.exe,Bootvid.dll,Hall.dll和引导启动的

         设备驱动程序.如果引导的是一个32位系统,则切换到32位保护模式;

4--Ntdetecct:  为ntldr执行硬件检测;

5--Ntbootdd.sys:对于不使用BIOS的SCSI和ATA系统,使用该组件作为磁盘I/O的设备驱动程序;

6--Ntoskrnl.exe: 初始化执行体子系统,并且初始化引导-启动的和系统-启动的设备驱动程序,为系统运行

         原生应用程序(native application)做好准备,并且运行Smss.exe;

7--Hal.dll:    内核模式DLL,作为Ntoskrnl和驱动程序与硬件的接口;

8--Smss.exe:  加载windows子系统,包括Win32k.sys和Csrss.exe,并且启动Winlogon进程;

9--Winlogon.exe:启动服务控制管理(SCM),启动本地安全子系统(LSASS),并且显示交互式登录对话框;

10--SCM:    加载并初始化那些自启动的设备驱动程序和windows服务;

 

2.内核加载的实现过程

 

MBR包含代码和数据,其中代码称为引导代码,在系统引导时首先获得控制;

MBR中的数据是一张分区表,指定了每个分区在磁盘上的位置和大小,以及分区的类型.

当MBR中的引导代码被执行时候,它检查分区表中的每一个分区,若找到一个已被标记为可引导的分区(称为引导分区),

则将该分区的第一个扇区(称为引导扇区)读到内存中.

然后MBR将代码的控制权交给引导扇区中的代码;

 

引导扇区,给windows提供有关该硬盘上卷的结构和格式方面的信息,并且读入和加载ntldr.

然后将控制权交给ntldr.

值得注意的是,单个扇区(512b)的代码和数据往往不足以完成其功能.为此,windows让引导扇区中的代码

读入其他上去的数据,然后跳转到下一个扇区的代码.这样的做法相当于蒋第一个引导扇区当做一个loader,

而真正完成引导扇区功能的扇区随后加载进来并执行.

 

ntldr文件实际是由两部分组成的:

第一部分是实模式代码,即首先获得控制的代码区;这部分代码为切换到保护模式做好准备.然后切换之.

第二部分是一个标准的PE文件,在ntldr中,这部分被称为os loader; osloader是windows真正的32位入口程序.

具体如下:

1.造内存描述符数组

2.映射页面,设置页目录寄存器,打开内存页面映射机制

3.处理boot.in

4.执行ntdetect.com

5.加载内核模块ntoskrnl.exe,hal.dll和SYSTEM hive文件

6.加载引导驱动程序和必要的文件系统驱动程序

7.构造LOADER_PARAMETER_BLOCK参数块

8.将控制权交给ntoskrnl.exe的入口函数

 

参考资料:

<<深入解析windows操作系统>> 4th

<<windows内核原理与实现>>

 

posted @ 2010-10-28 11:35  Tbit  阅读(533)  评论(0编辑  收藏  举报