Windows内核学习小记之系统启动顺序

本文详细阐述了Windows系统从启动模块到系统初始化的全过程,包括系统启动子例程、引导加载例程、NT加载器、核心组件初始化以及系统引导过程的剩余部分。

作者: Condor
出处: http://www.staresky.com

参考书目:Windows Internals
Undocumented Windows 2000
Windows NT File system Internals

1、 首先系统起动模块调用NT起动子例程,并把BootRecord结构参数传给NT起动子例程,BootRecord中包含有机器的基本信息和后期系统 Loader组件所需要的环境信息。
NT起动子例程执行的工作包括:一些全局变量的初始化、判断系统引导盘的位置

2、 系统起动例程调用引导加载例程,值得注意的是: 引导加载例程通常不反回任何值给系
统起动例程,毕竟在引导过程中如果发生错误直接的结果就是系统挂起然后重起机器。
引导加载例程打开引导盘并读取boot.ini文件,由于此时标准的文件系统驱动还没加载,

所以引导加载例程不得不把文件系统类别(NTFS,CDFS,FAT,HPFS)的判断和读写写死在引导加载例程里,这也导致在没有MS的帮助下由第三方 提供引导文件系统的实现是非常困难的。此刻,交互信息的显示还都用的是显卡的80*50字符模式。

之后引导加载例程通过前面讲过的文件系统模块读取整个boot.ini,并把可选的操作系统列表选项显示给用户,如果boot.ini是空的那么引导目录 是C:/WINNT。如果用户在操作系统选择菜单中选中NT或因等待超时而自动选择NT后引导加载例程读入ntdetect.com

接下来系统加载器ntldr.exe被加载到内存里,随后ntldr把ntoskrnl.exe加载到内存里,在ntoskrnl.exe成功加载之后 ntldr把hal.dll加载到内存里。再后面ntldr把boot driver(也就是Start值为0的driver)加载到系统里,在这过程中如果有一个关键boot driver发生

错误则系统就需要重起,否则系统继续后面的工作。上述工作完成之后ntldr便把控制转交给ntoskrnl的入口点函数。

3、 ntoskrnl入口点函数调用KeInitalieKernel()完成系统内部全局变量和Idle线程及进程的初始化工作。一旦Idle线程初始化工 作完成,之后的Executive初始化工作就交由Idle Thread来完成。

4、 紧接下来的就是Executive部分的初始化,而该部分工作可分为两个阶段:

(1)各组件初始化其内部状态
++HAL初始化其内部状态
++Executive组件初始化其内部状态
++虚拟内存管理器(VMM) 初始化其内部状态
++对象管理器初始化其内部状态
++安全子系统初始化其内部状态
++进程管理器初始化其内部状态
(2)各组件接受所有的请求以完成它们的初始化工作
++HAL被调用,以完成初始化工作
++系统时间被初始化
++在多处理器系统里,开启其它处理器
++对象管理器、Executive组件和安全子系统被调用,以完成它们剩余的初始化工作。
++虚拟内存管理器完成初始化工作,至此它已可以为其它模块提供完整的服务。
++初始化缓存管理器
++初始化配置管理器,配置管理器管理NT注册表,此时HKLM/SYSTEM和HKLM/HARDWARE已经可用。
++I/0管理器被调用执行其初始化工作,此过程包括各种同步变量、内存池及链表的创建,此时I/0管理器还在名字空间中创建了/Device, /DosDevices和/DriverRoot目录,接下来boot driver被初始化,再后Start值为1的driver被加载并被初始化
++进程管理器和LPC子系统完成初始化工作
++Reference Monitor和Session子系统完成初始化工作

5、 完成系统引导过程的剩余部分,包括System进程里系统线程的初始化工作等。
6、 加载并完成Start值为2的内核Driver,并完成其初始化工作。


System start-up module
|--> System Startup routine
|--> Boot loader 读 boot.ini
|--> Ntdetect.com 检测硬件配置
|--> ntldr.exe
|--> hal.dll
|--> boot driver (Service Start 值为 0 的driver)
|--> ntoskrnl.exe
|--> KeInitalieKernel(ExecutiveInit,Idle Thread and Process, System Thread and Process)………..
|--> Start1
|--> Start2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值