zoukankan      html  css  js  c++  java
  • Window 从自检到启动完毕的程序过程(以xp为例)

    以Windows XP为例

    第一步:预引导
    按下电源开关后,到启动Windows XP之前的这段时间称为预引导阶段。首先计算机会运行自检过程,也就是POST(Power On Self Test,开机自检),检测项目包括内存大小和其他硬件设备的状况,在启动时的能源之星画面中的大堆参数就是自检的结果了。然后,计算机的 BIOS(Basic Input/Output System,基本输入输出系统)进行一些必要的硬件配置,就根据设定好的引导顺序查询设备,一般情况下是找到第一块硬盘,然后找到MBR(Main Boot Recorder,主引导记录,大约在主分区的第一个物理扇区,和分区表一起共512KB),根据MBR中保存的地址载入引导程序(也称为加载器),引导程序包括Windows XP自带的OS Loader或者Linux下的LILO、GRUB等,Windows XP的引导程序文件名为NTLDR。

    第二步:引导
    NTLDR获得控制权之后,会将原来的实模式转换为32位平面内存模式。在实模式中,系统为MS-DOS保留640KB内存,其余内存视为扩展内存;而在32位平面内存模式中,系统(Windows XP)视所有内存为可用内存。接着,NTLDR启动内建的mini-file system drivers(迷你文件系统驱动),这样NTLDR就能识别每个NTFS或者FAT文件系统的分区,这样就能顺利地加载可能位于各个分区中的 Windows XP。其实在此过程中还有一步,就是“考虑”究竟该启动谁,它会询问一下主分区根目录下的boot.ini,如果boot.ini告诉它只有一个系统在 XXX位置,NTLDR当然会直接启动系统,而如果有双系统,则NTLDR会显示一个启动菜单供选择。

    第三步:加载内核
    在加载内核阶段,ntldr加载ntokrnl.exe(仅仅是加载,并不初始化),这个文件即为操作系统的内核,然后ntldr加载硬件抽象层 HAL(文件为hal.dll),接着系统加载注册表中[HKEY_LOCAL_MACHINE\system],NTLDR读取其下的“select” 键值来决定哪一个“Control Set”分支中的设置数据将被加载(各个“Control Set”分支包含需要加载哪些设备驱动程序以及需要加载的服务的信息)。NTLDR加载[HKEY_LOCAL_MACHINE\system \service]下“start”键值为0的底层设备驱动。当Current Control Set(其实就是各个Control Set分支中被采用的那个分支的拷贝)全加载完后,ntldr就交出了控制权,接力赛中的内核选手上场了。

    第四步:初始化内核
    现在你应该能看到彩色的Windows XP Logo和底下的滚动条了。系统这时会加载各种设备驱动以及系统服务,以及完成一些准备工作,比如有一个挺有名的技巧就是修改注册表中的预读文件参数来提高启动速度,这也是这个阶段的一项工作。

  • 相关阅读:
    logcat 自动清屏
    eclipse debug (调试) 学习心得
    黑马面试题
    如何分析解决Android ANR
    植物大战僵尸(一)
    cocos2d-小游戏
    VIM编辑器的使用
    面试题之排序总结
    面试题链表总结
    微软大楼设计方案(中等)(2017 计蒜之道 初赛 第六场)
  • 原文地址:https://www.cnblogs.com/jizonghai/p/2829900.html
Copyright © 2011-2022 走看看