`
wodamazi
  • 浏览: 1418645 次
文章分类
社区版块
存档分类
最新评论

读书笔记_Windows的启动过程

 
阅读更多

Windows的启动过程:

1. 系统固件(firmware)首先启动,即BIOS(Basic Input/Output System, 基本输入输出系统)或EFI(Entex Firmware Interface),BIOS或EFI在完成基本的硬件检测和平台初始化后,会将控制权移交给硬盘上的引导程序。

2. 引导程序再执行操作系统的加载程序(OS Loader),在Vista之前是NTLDR, Vista之后是WinLoad.exe

3. 加载程序首先会对CPU做必要的初始化工作,包括从16位的实模式切换到32位的保护模式,启动分页机制等,然后通过启动配置信息(Boot.INI或BCD)得到windows系统的系统目录并加载系统的内核文件,即NTOSKRNL.EXE。当加载这个文件时,会检查它的PE文件头导入节中所依赖的其他文件,并加载这些依赖文件,包括用于内核调试通信的硬件扩展DLL(KDCOM.DLL,KD1394.DLL或KDUSB.DLL)。加载程序会根据启动设置加载这些DLL中的一个,并将其模块名统一称为KDCOM。

4. 而后系统加载程序会读取注册表的System Hive,加载其定义的启动(boot)类型(SERVICE_BOOT_START(0))的驱动程序,包括磁盘驱动程序。

5. 之后,系统加载程序会从内核文件的PE文件头中找到它的入口函数KiSystemStartup函数,然后调用这个函数,调用时将启动选项以一个名为LOADER_PARAMETER_BLOCK的数据结构传递给KiSystemStartup函数,于是NT内核文件得到控制权并开始执行。

6. KiSystemStartup函数的执行过程

A 调用HalInitializeProcessor()初始化CPU

B 调用KdInitSystem初始化内核调试引擎

C 调用KiInitializeKernel开始内核初始化

在KiInitializeKernel函数返回后,KiSystemStartup函数将当前CPU的中断请求级别(IRQL)降低到DISPATCH_LEVEL,然后跳转到kiIdleLoop(),退化为Idle进程中的第一个Idle线程。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics