Win 98系统启动过程全揭密(四)
2、GUI的启动过程GUI的启动过程主要由三个阶段组成:WinINIT.EXE阶段、16位保护模式启动和32位保护模式启动。
⑴WinINIT.EXE阶段Win.COM开始运行后,首先调用\Windows下的WinINIT.EXE,该命令在同目录下寻找WinINIT.INI,如果有则按照该文件配制对系统文件进行重新调整或升级,以保证整个系统的驱动程序能够得到及时更新。这是Windows系统支持PNP技术,实现系统驱动程序升级的主要途径。这个过程自然是在DOS状态下完成的。
⑵16位保护模式启动
Win.COM开始执行后,调入\Windows\SYSTEM下的VMM32.VXD,VMM32.VXD将处理器置于保护模式下,根据SYSTEM.INI和注册表的配置开始启动GUI系统的16位保护模式。这可以保证系统支持Win16软件,更主要的是PNP BIOS(即插即用BIOS)规范只提供16位保护模式接口,以PNP为硬件技术核心的Win 9X必须通过16位模式直接获得BIOS提供的硬件设备信息来配置系统,提高系统启动性能,否则对硬件的配置必须在实模式下从头开始。
GUI的启动首先加载Win 9X的系统驱动程序,再从PNP BIOS获得硬件设备信息,先后加载PNP设备驱动程序VXD和支持非PNP硬件所需的全部16位虚拟保护模式驱动程序VXD,分配系统资源,避免设备冲突,然后初始化所有的驱动程序(包括系统驱动程序和设备驱动程序),完成系统硬件配置。最后加载16位外壳组件USER.EXE、GUI.EXE、KRNL386.EXE等,形成Win16的API,完成16位保护模式启动,此时,每个系统组件都已存在,但还不具使用界面。
⑶32位保护模式启动
完成16位模式启动后,系统调用32位的外壳程序资源管理器,16位内核一看到这一调用,就先自动加载VWin32.386,由它加载三个32位DLL库文件:USER32.DLL、GDI32.DLL、KERNEL32.DLL,形成Win32的API(这是Win 9X的核心),VWin32.386完成这一任务后,将控制权还给16位内核,16位内核再将控制权交给32位内核,开始32位保护模式启动。这时系统加载并初始化所有32位驱动程序,这个过程与16位模式相同。
最后,运行GUI的外壳程序(该外壳程序由SYSTEM.INI中的[BOOT]节中“SHELL=”设置,默认是资源管理器),完成GUI启动。
3、GUI启动过程中故障的排除
GUI系统相当复杂,相关的技术资料却极少,这决定了用户不能象在DOS中那样根据启动过程去排查故障。
Win 9X对GUI的启动过程从未提供详尽的说明,仅在根目录下提供了一份启动日志文件BOOTLOG.TXT。该文件记录了启动过程使用的所有程序模块的加载情况,是解决系统问题的唯一依据。根据该记录可以全面了解GUI启动过程中发生的种种问题。
面对启动过程中的失败,主要有两个处理方法,一是用完好的源程序覆盖出现问题的程序,但其难点在于如何在各类软件包中找到那些完好的源程序,注意,直接调试、修复出现问题的程序在Win 9X下是难以想象的;一是从启动配置文件(CONFIG.SYS、AUTOEXEC.BAT、Win.INI、SYSTEM.INI和注册表)中删除调用有问题模块的命令。后者主要用于解决某软件卸载失败出现的问题。
在图形模式GUI下解决系统问题时多会受到种种限制,而纯DOS模式不受系统制约,是最后的系统之门(对于电脑高手来说,DOS仍是永恒的主题)。
Windows系统的复杂性决定了排除那些莫名其妙的故障的难度,若对系统经过几次调整后仍未解决问题,最保险也是最快捷的办法就是重新安装系统。也许这是微软对用户唯一有用的建议。
在Windows下重新安装系统,要保证产品的序列号一致,否则系统可能拒绝安装。
九、Win 9X启动顺序小结
本文详尽地讨论了Win 9X的启动过程,复杂的参数和技术分析模糊了其清晰的体系结构,现在对整个启动过程做一简单的概括,使读者根据启动过程中的现象能够相对准确地判断启动过程,更好地处理系统启动过程中的问题。
⑴系统加电启动,依次加载扩展卡(包括显卡等)、主板的BIOS程序(这与所有的操作系统(如Win 9X、LINUX、UNIX、OS/2等)无关),完成自检过程
⑵读入硬盘的主引导记录、分区引导记录,自动加载IO.SYS
⑶IO.SYS读取MSDOS.SYS配置,确定启动方式,根据CONFIG.SYS,进行硬件配置
⑷IO.SYS根据Win 9X启动要求,自动加载必要的默认驱动程序(HIMEM.SYS、SETVER.EXE,IFSHLP.SYS等)
本篇文章共2页,此页为首页 下一页
⑸IO.SYS调入COMMAND.COM,解释执行AUTOEXEC.BAT,进行软件配置
⑹IO.SYS进行必要的默认环境设置
⑺自动执行Win.COM,进入GUI启动阶段
⑻执行WinINIT.EXE,对系统驱动程序进行升级
⑼加载SYSTEM.INI中[BOOT]、[386ENH]、[DEVICES]等节设置的驱动程序
⑽根据SYSTEM.INI、Win.INI和系统注册表进行系统组合、配置,各类启动时调用的VXD文件主要存放在C:\Windows\SYSTEM下的VMM32和IOSUBSYS下
⑾加载SYSTEM.INI中的“SHELL=”指定的外壳程序
⑿执行系统注册表中的HKEY_LOCAL_MACHINE→Software→Microsoft→Windows→CurrentVersion下的Run、RunOnce中包含的应用程序(其中RUNONCE包含的程序只运行一次后就被自动删除,该键主要用于软件安装),通常默认加载Internat.exe(输入法)、Systray.exe(音量控制)和Win 98的ScanRegw.exe/autorun。
⒀当用户完成身份登录后,系统执行HKEY_CURRENT_USER→Software→Microsoft→Windows→CurrentVersion下的Run、RunOnce中包含的应用程序
⒁执行Win.INI中的LOAD= RUN=加载的应用程序
⒂执行开始菜单中[启动]组包含的应用程序
十、结语
Win 9X的启动过程终于介绍完了。由于笔者知识水平和眼界的局限,其中还是留下了许多空白就教于诸位高手。
诚然,这个过程本来是一个相当陈旧的话题,但是多数介绍仅限于局部技巧,且谬传颇多,比较系统完整的非常少见,这给广大电脑爱好者带来很大的困惑,这里不自量的献丑,实是纠正一些流传的误解,使电脑爱好者对Windows 9X的启动过程有一个相对完整清晰的把握。
本篇文章共2页,此页为末页 首页