(一)BIOS的启动过程 只要一打开计算机的电源开关一个叫Bootstrap(引导程序)的小软件就要发挥作用它常驻在BIOS ROM的地址FFFFOH处当ROM加载程序加载它后它就完成下面的几项工作 加电自检 POST(Post On Self Text加电自检子程序)测试系统的完整性如果系统通过测试计算机扬声器发出一短促的鸣叫声(是否有鸣叫声取决于BIOS的厂家这里以广泛使用的Award的BIOS为例)如果系统出现故障而未通过测试根据故障的不同扬声器将发出不同的鸣叫声因为各个厂商对鸣叫声的定义不同要了解各个鸣叫声的意义需查看BIOS或者主板厂商的用户手册某些BIOS在检测出系统故障时会暂停并且在显示器上显示出相关的错误信息(如键盘错误等)在POST过程还要测试内存的完整性 检测即插即用设备 查找引导盘 引导程序接着检测BIOS中的设置以找到第一个可引导的驱动器(一般为A盘或C盘)如果在检测完BIOS中指定的所有可引导器仍未发现引导驱动器引导程序暂停启动过程并显示一个错误信息找不到启动盘 (二)Dos的启动过程 操作系统加载程序从ROM加载程序得到控制权后就开始DOS的启动其步骤如下 加载IOSYS 操作系统加载程序从引导驱动器上读取主引导记录MBR(Master Boot Record)并将控制权叫给MBRMBR读取分区表(在MBR的尾部)并找到引导分区的位置MBR将控制权叫给引导分区的引导扇区(引导扇区包含磁盘引导程序和磁盘特性表)上的磁盘引导程序检测BIOS参数块(BPBBIOS Parameter Block)以找到操作系统引导文件所在的根目录将操作系统引导文件IOSYS从根目录拷贝进内存IOSYS实际上是一个可执行文件并且只能位于引导分区的第一磁道上 加载FAT和MSDOSSYS 处理CONFIGSYS和AUTOEXECBAT 如果CONFIGSYS文件不存在IOSYS从MSDOSSYS的WinBootDir=获得IfshlpsysHimemsys和Setverexe这三个文件的位置然后自动加载这三个必需的驱动程序如果MSDOSSYS中有BootGUI=这个选项IOSYS将控制权交给命令行解释器COMMANDCOM(或者叫给CONFIGSYS中由命令SHELL=指定的命令行解释器)然后COMMANDCOM将控制权叫给计算机用户也就是等待用户输入DOS命令至此DOS的启动过程完成 (三)Windows的启动过程 在DOS启动过程的最后一步如果MSDOSSYS中是BootGUI=而不是BootGUI=这个选项IOSYS将控制权将交给Windows加载程序以继续加载WindowsWindows的启动过程真正开始 显示Starting Windows 屏幕显示Starting Windows x这个提示信息在这个信息显示的过程中 MSDOSSYS中的BootDelay=n(n为整数)选项可以控制该信息的显示延长时间若MSDOSSYS没有该选项默认该信息显示秒 若MSDOSSYS中有BootKeys=按住Ctrl或F键则显示Windows启动菜单若有BootMenu=不按住Ctrl或F键也会自动显示Windows启动菜单 MSDOSSYS中若有BootMenuDelay=n的选项可以指定Windows启动菜单显示的延长时间默认是秒 MSDOSSYS中若有BootMenuDefault=n可以指定Windows启动菜单上的启动项默认是即以正常模式启动Windows 如果Windows上一次没有正常关闭而且在MSDOSSYS中没有AutoScan=选项磁盘扫描程序Scandisk将询问或者自动扫描硬盘默认该选项是AutoScan=既自动扫描 不管MSDOSSYS中是否有以上选项只要Windows上一次的启动或关机过程没有正常完成Windows的启动菜单会自动出现而且默认启动项是安全模式(Windows Safe Mode)这个自动出现的启动菜单其显示延时是秒 在Windows的启动过程中将保留所有的UMB(Upper Memory Block上位内存)使用 检测Windows的启动画面 如果MSDOSSYS中有logo=选项或者没有该选项IOSYS加载并显示其内部默认的Windows启动画面(即蓝天白云画面)用户可自定义一个LOGOSYS文件(实际上是分辨率为╳颜色深度为色的BMP图形)并把它放在根目录下一取代该画面这样Windows的启动画面就变成了用户的自定义画面可能有些计算机用户这样做后发现显示的仍然是蓝天白云画面这种情况发生在OEM版的Windows中原因是微软为这些OEM厂商修改了LOGOSYS必须放在特定的目录中例如C:\WINDOWS或者别的目录中不同的OEM厂家可能有所不同 在MSDOSSYS设置logo=则不显示Windows的启动画面 检测DRVSPACEINI和DBLSPACEINI文件 如果存在DRVSPACEINI和DBLSPACEINI文件并且在MSDOSSYS中没有指定DblSpace=Drvspace=DRVSPACEBIN和DBLSPACEBIN被加载 检测注册表 IOSYS打开注册表文件SYSTEMDAT并调用其它工具检测数据的有效性如果文件SYSTEMDAT不存在则自动从备份文件中恢复该文件如果SYSTEMDAT被恢复USERDAT也被自动恢复Windows中备份文件被压缩在目录C:\WINDOWS\SYSBACKUP\下的RBnCAB中n的值为— 检测DBLBUFFSYS 如果在MSDOSSYS中有DoubleBuffer=或者注册表中有键值HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\WinBoot\DoubleBuffer则加载DBLBUFFSYS即使以上两个条件都没有满足但是Windows探测到双缓沖(Double Buffer)是必须的也会自动加载双缓沖 加载WINCOM 配置文件加载完成后即运行WINCOMWINCOM是Windows的加载器(Windows Loader)由它继续Windows的启动工作 加载Vxd文件 Vxd其全称为Virtual Device Driver即虚拟设备驱动程序WINCOM首先处理VMMVXD 实模式虚拟设备驱动程序加载程序检测是否所需的VxD文件已成功加载如果没有它再一次尝试加载一旦实模式虚拟设备驱动程序加载成功设备初始化开始任何需要在实模式下初始化的VxD文件此时开始初始化VMM将计算机处理器从实模式切换到保护模式VxD第三阶段的初始化过程开始在这个阶段VxD设备驱动程序根据InitDevice指定的次序而不是根据VxD被加载进入到内存中的次序进行初始化这些VxD文件初始化次序如下 aSYS_CRITICAL_INIT(SYSCRITINIT系统关键初始化) 在这个阶段为了让VxD文件有足够多的时间准备设备初始化而不被系统中断所有的系统中断都被关闭所有的文件输入/输出(I/O)也被关闭因此所有的VxD文件被加载的过程不被Windows启动记录文件Boottxt记录直到该初始化过程完成之后所有VxD文件被加载的过程才被记录到文件Bootlogtxt中 bSYS_DEVICE_INIT(DEVICEINIT系统设备初始化) 在这个阶段大量的VxD进行初始化文件的输入/输出也被允许因此每一个VxD文件的初始化都被记录但Ifsmgr的设备初始化例外Ifsmgr的作用是控制实模式文件系统在Ifsmgr的设备初始化过程中磁盘输入/输出不被允许直到其初始化完成后磁盘输入/输出才被允许进行由于这个原因Ifsmgr的初始化过程也没有被记录因此从表面上看好像它在设备初始化阶段并没有出现 cSYS_INIT_COMPLETE(INITCOMPLETE系统初始化完成) 通过这几个阶段的VxD此时一般可以正常工作了而那些通过ab两阶段而没有通过c阶段的VxD将被从内存中清除 加载GUI程序 在所有的静态VxD和WINSTARTBAT被加载后Windows的GUI(Graphical User Interface图形用户界面)被加载这些GUI程序是KrnldllGdiexeUserexe和Explorerexe其中Explorerexe是Windows默认的Shell可以改为使用别的应用程序来代替 Windows注册和网络注册 接下来是加载网络环境设置即加载注册表键值HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServicesOnceWindows logon和network此时出现询问Windows注册和网络注册密码的对话框Windows加载网络环境参数时提示用户输入网络注册密码如果用户是在单机上而不是在网络上使用计算机并且已经关闭了密码输入提示功能Windows将用以前提供的默认用户名实现自动注册网络Windows要完成自动注册功能必须满足 ()以前至少输入过一次有效的用户名 ()上次输入的用户名没有被清除 ()没有设置必须使用密码 在单机用户系统上按ESC或者选择取消Windows将会使用默认的桌面设置继续启动但Widows下一次启动时会再次要求输入用户名如果网络注册验证中设置不完全正确且用户输入了一个新的用户名Windows将根据控制面板中的网络用户设置参数替这个用户创造一个环境设置参数 注册表主键加载 Windows中有几个自动运行的项目它们按以下的次序加载 ()HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunservicesOnce ()HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Runservices ()Windows的注册提示 ()HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnce ()HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run ()HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run ()启动组 ()HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce 上面各项()()和()可以同时加载只有()的地位比较特殊它必须等待()()和()都完成加载之后才开始加载而在它之后的()()()和()也都可以同时加载但它们都必须等待()中所有的项目完成加载之后才开始加载RunservicesOnce中的键值在执行一次之后被自动地从注册表中清除 |