|
Win98启动过程
r, R' W8 M! G, C
: t* h% J5 B, j2 e(一)、BIOS的启动过程
" W C1 n8 R1 m b2 r3 @6 t2 ]! Z" Z/ T; j8 ^& w2 C$ ~: J
只要一打开计算机的电源开关,一个叫Bootstrap(引导程序)的小软件就要发挥作用,它常驻在BIOS ROM的地址FFFFOH处,当ROM加载程序加载它后,它就完成下面的几项工作。9 E6 Z9 ~7 i' L% ]1 E: W
+ ]$ ~( D$ _( T5 g$ Z
1、加电自检
4 e/ x1 n2 s# U p& j3 m; b
8 P% \5 v0 K3 t1 E7 Z$ JPOST(Post On Self Text,加电自检子程序)测试系统的完整性,如果系统通过测试,计算机扬声器发出一短促的鸣叫声(是否有鸣叫声取决于BIOS的厂家,这里以广泛使用的Award的BIOS为例),如果系统出现故障而未通过测试,根据故障的不同扬声器将发出不同的鸣叫声,因为各个厂商对鸣叫声的定义不同,要了解各个鸣叫声的意义需查看BIOS或者主板厂商的用户手册。某些BIOS在检测出系统故障时会暂停并且在显示器上显示出相关的错误信息(如键盘错误等)。在POST过程还要测试内存的完整性。% g _, y+ e& y% [
4 x, f$ J- j: Y e7 E
2、检测即插即用设备0 u8 m' L o6 k7 j# w) l
$ y0 ~& c8 Y/ z" A3 f
3、查找引导盘
7 G8 w7 P, K$ A, Z! \0 i4 O3 t- }7 M9 q0 O
引导程序接着检测BIOS中的设置以找到第一个可引导的驱动器(一般为A盘或C盘),如果在检测完BIOS中指定的所有可引导器仍未发现引导驱动器,引导程序暂停启动过程并显示一个错误信息:找不到启动盘。
$ Z$ L& O: _- u- |4 z
/ _' o" k5 P; s J& V(二)、Dos的启动过程
4 u5 [. b: e5 z" Z: k; C1 S8 ^* f( ]: {9 w# m2 W2 G: s5 }
操作系统加载程序从ROM加载程序得到控制权后就开始DOS的启动,其步骤如下。
( Z: R6 K7 Y% p8 h& a$ @) N
$ K' `% b& }& ]1、加载IO.SYS
* D: E$ U! ` q; Q, E6 U9 G: {% k/ L; b6 B: O
操作系统加载程序从引导驱动器上读取主引导记录MBR(Master Boot Record)并将控制权叫给MBR,MBR读取分区表(在MBR的尾部)并找到引导分区的位置,MBR将控制权叫给引导分区的引导扇区(引导扇区包含磁盘引导程序和磁盘特性表)上的磁盘引导程序,检测BIOS参数块(BPB,BIOS Parameter Block)以找到操作系统引导文件所在的根目录,将操作系统引导文件IO.SYS从根目录拷贝进内存,IO.SYS实际上是一个可执行文件并且只能位于引导分区的第一磁道上。6 Z! N- i/ h' p. @" ~& S
* P$ g \3 ^5 ~- V, |9 j
2、加载FAT和MSDOS.SYS8 W. a, [+ Y+ l1 M4 P
9 W' ~0 s! B% ^- h
3、处理CONFIG.SYS和AUTOEXEC.BAT, F1 } G! a8 W2 l! H+ e; @5 j
9 X: w5 Z; V5 H! g2 o$ G
如果CONFIG.SYS文件不存在,IO.SYS从MSDOS.SYS的“WinBootDir=”获得Ifshlp.sys、Himem.sys和Setver.exe这三个文件的位置,然后自动加载这三个必需的驱动程序。如果MSDOS.SYS中有BootGUI=0这个选项,IO.SYS将控制权交给命令行解释器COMMAND.COM(或者叫给CONFIG.SYS中由命令“SHELL=”指定的命令行解释器),然后COMMAND.COM将控制权叫给计算机用户,也就是等待用户输入DOS命令,至此DOS的启动过程完成。
! {8 Z8 |4 c5 m% q% K4 Z2 F$ D; w4 |( r. M! M
(三)、Windows的启动过程
% M8 G* z, ~; w9 f
+ V& W% y$ Z. ~0 l0 u: c在DOS启动过程的最后一步,如果MSDOS.SYS中是BootGUI=1而不是BootGUI=0这个选项,IO.SYS将控制权将交给Windows加载程序以继续加载Windows,Windows的启动过程真正开始。( r: T: V. [0 q0 X# W- U" U& `0 ~4 c
$ D; J8 A1 }3 }
1、显示“Starting Windows...”
: O: W+ w3 P1 G4 D: P+ t" [1 ?* u; ?. y5 r: e0 H( A
屏幕显示“Starting Windows 9x...”这个提示信息,在这个信息显示的过程中:3 u$ E9 `: q% d1 K2 C+ p9 G; d- J" h
6 `( @' R# U) P7 |9 k
MSDOS.SYS中的BootDelay=n(n为整数)选项可以控制该信息的显示延长时间,若MSDOS.SYS没有该选项,默认该信息显示3秒。& Q! q# U- c7 y! x9 j
% r8 b. Y* u2 \4 q V) y
若MSDOS.SYS中有BootKeys=1,按住Ctrl或F8键则显示Windows启动菜单。若有BootMenu=1,不按住Ctrl或F8键也会自动显示Windows启动菜单。
) V$ m0 U2 D( @6 h( _! F; |; g! {0 _( F
MSDOS.SYS中若有BootMenuDelay=n的选项,可以指定Windows启动菜单显示的延长时间,默认是30秒。8 M. T( h9 I" T$ v! k0 j- X" K2 [
8 o6 B1 T0 Z( F v! j ^/ i6 R+ E
MSDOS.SYS中若有BootMenuDefault=n,可以指定Windows启动菜单上的启动项,默认是1,即以正常模式启动Windows。
r% \5 F4 C: P( y) c
# P+ W, Z5 V0 Z! ^1 }如果Windows上一次没有正常关闭,而且在MSDOS.SYS中没有AutoScan=0选项,磁盘扫描程序Scandisk将询问或者自动扫描硬盘,默认该选项是AutoScan=1,既自动扫描。
2 n6 h) ?1 N x* k+ f# T4 s0 @+ g' z8 c% U
不管MSDOS.SYS中是否有以上选项,只要Windows上一次的启动或关机过程没有正常完成,Windows的启动菜单会自动出现,而且默认启动项是安全模式(Windows Safe Mode),这个自动出现的启动菜单其显示延时是30秒。
8 {" h' h4 ^, m1 r2 t
2 S8 \! j; S- r0 B7 n在Windows的启动过程中,将保留所有的UMB(Upper Memory Block,上位内存)使用。5 s6 I) r( C- K9 X7 b6 Y( H
W g7 l/ c: u% a" j2 X2 V8 S2、检测Windows的启动画面
3 m( m- }; @" a& h) ?; h; D- ]9 M: }( k
如果MSDOS.SYS中有logo=1选项或者没有该选项,IO.SYS加载并显示其内部默认的Windows启动画面(即蓝天白云画面)。用户可自定义一个LOGO.SYS文件(实际上是分辨率为320╳400、颜色深度为256色的BMP图形)并把它放在根目录下一取代该画面,这样Windows的启动画面就变成了用户的自定义画面。可能有些计算机用户这样做后发现显示的仍然是蓝天白云画面,这种情况发生在OEM版的Windows中,原因是微软为这些OEM厂商修改了LOGO.SYS必须放在特定的目录中,例如C:\WINDOWS或者别的目录中,不同的OEM厂家可能有所不同。
; U# l4 r8 g* r( m5 x5 P$ h3 H! W H- N o! `$ O
在MSDOS.SYS设置logo=0则不显示Windows的启动画面。
# H3 Y* R- T: o3 g" c' |2 Y( Q v0 [8 y
3、检测DRVSPACE.INI和DBLSPACE.INI文件1 Y$ Z2 w7 H, e. r' T2 I8 x
1 T) w! Q1 p0 M" }3 d- F
如果存在DRVSPACE.INI和DBLSPACE.INI文件,并且在MSDOS.SYS中没有指定DblSpace=0、Drvspace=0,DRVSPACE.BIN和DBLSPACE.BIN被加载。5 C p; k A0 [+ T
- K2 Y8 j( j7 |6 E6 ?6 [& \4、检测注册表! D4 K2 u+ K* x& B5 v6 n: g5 K
/ W7 m- e" T; |5 G1 i
IO.SYS打开注册表文件SYSTEM.DAT并调用其它工具检测数据的有效性,如果文件SYSTEM.DAT不存在,则自动从备份文件中恢复该文件,如果SYSTEM.DAT被恢复,USER.DAT也被自动恢复。Windows98中备份文件被压缩在目录C:\WINDOWS\SYSBACKUP\下的RB00n.CAB中,n的值为0—5。/ ^" {( ?! l2 t- g- L
5 r" x. Q, z0 t0 O% K
5、检测DBLBUFF.SYS* N/ U0 c; t8 |$ h) ^% O) Q
: Q [4 D% B/ B$ E r, N: k如果在MSDOS.SYS中有DoubleBuffer=1,或者注册表中有键值HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\WinBoot\DoubleBuffer,则加载DBLBUFF.SYS。即使以上两个条件都没有满足,但是Windows探测到双缓冲(Double Buffer)是必须的,也会自动加载双缓冲。
7 ^+ `3 t" R! Y! n S ]
; O3 {& q4 s' X [4 D R' C6、加载WIN.COM
' t4 U% \. J7 {. I3 U/ ]
' j; h7 u* U2 l配置文件加载完成后即运行WIN.COM,WIN.COM是Windows的加载器(Windows Loader),由它继续Windows的启动工作。- r8 S$ s; g7 n
# M1 i T9 T/ ~# {4 i6 F9 ?/ I: _7、加载Vxd文件8 O/ m; q/ }+ a, T! X# x) i
3 Y8 ~0 m9 }, s; J( iVxd其全称为Virtual Device Driver,即虚拟设备驱动程序。WIN.COM首先处理VMM32.VXD。( B' [8 g! `/ l4 B; s! k
4 b1 a! r/ W* U5 Z1 ~ j1 j
实模式虚拟设备驱动程序加载程序检测是否所需的VxD文件已成功加载,如果没有,它再一次尝试加载。一旦实模式虚拟设备驱动程序加载成功,设备初始化开始。任何需要在实模式下初始化的VxD文件此时开始初始化。VMM32将计算机处理器从实模式切换到保护模式,VxD第三阶段的初始化过程开始。在这个阶段VxD设备驱动程序根据InitDevice指定的次序而不是根据VxD被加载进入到内存中的次序进行初始化,这些VxD文件初始化次序如下。
% F2 y6 p' y" n' ]0 b* |
9 N A8 F* k' E$ C5 d) m% b' U) B3 ca.SYS_CRITICAL_INIT(SYSCRITINIT,系统关键初始化)
( V( ]- M- x" Z- o+ z9 r
4 s5 \8 d4 P9 ^$ F8 x在这个阶段为了让VxD文件有足够多的时间准备设备初始化而不被系统中断,所有的系统中断都被关闭,所有的文件输入/输出(I/O)也被关闭,因此所有的VxD文件被加载的过程不被Windows启动记录文件Boot.txt记录,直到该初始化过程完成之后,所有VxD文件被加载的过程才被记录到文件Bootlog.txt中。
7 H& g [4 i1 x4 | T* A1 i7 _7 ?- D& y! k/ p7 P. J9 D0 h5 b
b、SYS_DEVICE_INIT(DEVICEINIT,系统设备初始化)
# X( k3 }$ |, ?" C8 Q: J! U! _& d4 x! P7 }: f
在这个阶段大量的VxD进行初始化,文件的输入/输出也被允许,因此每一个VxD文件的初始化都被记录,但Ifsmgr的设备初始化例外。Ifsmgr的作用是控制实模式文件系统,在Ifsmgr的设备初始化过程中磁盘输入/输出不被允许,直到其初始化完成后磁盘输入/输出才被允许进行。由于这个原因,Ifsmgr的初始化过程也没有被记录,因此从表面上看,好像它在设备初始化阶段并没有出现。& Q: s! `6 m2 H0 D3 x$ U* \
1 B/ h- I+ |7 x( N9 Uc、SYS_INIT_COMPLETE(INITCOMPLETE,系统初始化完成)
" g; x8 L; R0 x/ b, n8 {6 L
( P# V0 E# o$ \" Q$ @% ^通过这几个阶段的VxD此时一般可以正常工作了,而那些通过a、b两阶段而没有通过c阶段的VxD将被从内存中清除。
3 l5 P* m9 G1 x v* t( u3 U5 G- }+ N
8、加载GUI程序
# V1 ]" ?8 h$ `$ ] W8 ?
& W- c3 `2 ~ b+ Y) ?在所有的静态VxD和WINSTART.BAT被加载后,Windows的GUI(Graphical User Interface,图形用户界面)被加载,这些GUI程序是Krnl32.dll、Gdi.exe、User.exe和Explorer.exe,其中Explorer.exe是Windows默认的Shell,可以改为使用别的应用程序来代替。
) I2 P, n, b9 b
F: j$ Z$ S# O! p9、Windows注册和网络注册
1 o8 M/ F; c: I3 h. L& N/ @" l( L7 R
接下来是加载网络环境设置,即加载注册表键值HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce、Windows logon和network,此时出现询问Windows注册和网络注册密码的对话框。Windows加载网络环境参数时提示用户输入网络注册密码,如果用户是在单机上而不是在网络上使用计算机,并且已经关闭了密码输入提示功能,Windows将用以前提供的默认用户名实现自动注册网络,Windows要完成自动注册功能必须满足:' v/ t7 c- O9 [
0 b# b0 C/ \9 A/ \1 F% q' z F(1)以前至少输入过一次有效的用户名;
$ @& @; I! D6 W( ]& V2 L1 \6 m% b- b( Q( x* V4 F" f S Q0 l
(2)上次输入的用户名没有被清除;& h6 J$ d2 u2 u: a
# a& G2 r; l2 o8 ^
(3)没有设置必须使用密码。# n) O/ j6 o" l3 `; F
3 q. i5 }! E6 k* I: `在单机用户系统上按ESC或者选择取消,Windows将会使用默认的桌面设置继续启动,但Widows下一次启动时会再次要求输入用户名。如果网络注册验证中设置不完全正确且用户输入了一个新的用户名,Windows将根据控制面板中的网络用户设置参数替这个用户创造一个环境设置参数。* k$ R! q& l* n0 k% X2 C" N" J7 d7 l, ^
2 G, ]4 c+ V$ L# |! W# O: w
10、注册表主键加载
. ~9 L6 f5 J+ {. l/ Z7 [. M! L" ~5 k
# l4 P, z; B. k& C+ V0 `# nWindows中有几个自动运行的项目,它们按以下的次序加载:
/ M: P$ i* f3 M+ h2 f: T- O* T: b+ E( U" t- z" P3 A, J9 W
(1)HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunservicesOnce,
! Q& \" j6 _9 L" N3 K) s, d) U9 E+ i# E. R8 A
(2)HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Runservices,9 q) Y( J4 ?/ @" [) p$ m0 D
( p' v9 f M! \/ j+ f7 N r. y
(3)Windows的注册提示,
" x- E& ?8 [- s4 t
( Z8 N3 k* b1 W7 i0 D+ o(4)HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnce,
. t' r S& ?8 t- P
3 u) E9 b/ I6 m8 d. U(5)HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run,
# ^0 H1 ^# y, ]
: t/ u% z4 P1 E) G. I$ j, O& |0 H(6)HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run,# i& [, f( _8 Q
/ q, U$ ]0 S" y
(7)启动组,4 w. u5 R2 v" N) \6 ^
1 n2 w$ M9 W5 j& t- N, l(8)HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce。
. D3 `1 W6 H6 N* i9 v
+ Z$ _7 Z% {% Q上面各项(1)、(2)和(3)可以同时加载,只有(4)的地位比较特殊,它必须等待(1)、(2)和(3)都完成加载之后才开始加载,而在它之后的(5)、(6)、(7)和(8)也都可以同时加载,但它们都必须等待(4)中所有的项目完成加载之后才开始加载。RunservicesOnce中的键值在执行一次之后被自动地从注册表中清除。4 u+ o& B7 ?0 `6 n6 s; D& w
3 L; Q2 ~. H& M% P经过了以上的所有步骤,Windows也就完成了其启动的全过程。 |
|