探究Windows操作系统启动过程
从我们初次接触电脑开始,几乎所有人就开始与WindowsR系列操作系统打交道。WindowsR系统如同其它主流操作系统一样,经过了长时间的演化和改善,MicrosoftR也正是这样成为家喻户晓的软件公司。现在最新操作系统除了MicrosoftR的WindowsR VistaR系列,还有AppleR公司的Mac OS X Leopard。当今家用操作系统市场也只有这两家公司可以媲美了。不论是什么系统,当我们每次坐在电脑前重复同样的动作等待开机完成的时候,只有很少的人真正了解在自己焦急等待的时间里电脑究竟干了些什么,一部分不解的人还嫌开机速度太慢。实际上,在这段时间里,电脑进行了最关键也是最复杂的过程。下面我们以WindowsR系列操作系统为例探究一下一个操作系统的启动经历了怎样的过程。(因为WindowsR 9x已过时的缘故,这里不介绍它繁琐的启动过程)
一、WindowsR XP or 2000启动过程
WindowsR XP or 2000的启动过程,由于所用内核不同(WindowsR 9x基于DOS内核系统;WindowsR XP or 2000使用NT内核),与之前的WindowsR 9x启动在时间以及方式上都有相当大的不同和改善,不再基于DOS和MSDOS.SYS文件启动系统。(当然,多系统中如果包括WindowsR 9x,它们还有重要作用的。)
1. 预引导(Pre-Boot)阶段
按动计算机启动按钮后,计算机首先运行Power On Self Test(POST),POST检测系统的总内存以及其他硬件设备的现状。并由BIOS(基本输入输出系统)完成基本硬件配置。然后读取硬盘的MBR(主引导记录),检查硬盘分区表以确定引导分区,并将引导分区上的操作系统引导扇区调入内存中执行,此时即执行NTLDR(操作系统加载器)。
2. 引导阶段
1首先进行初始引导加载器阶段(Initial Boot Loader)——NTLDR将计算机微处理器从实模式转换为32位平面内存模式。(在实模式中,系统为MS-DOS保留640kb内存,其余内存视为扩展内存,而在32位平面内存模式中,系统视所有内存为可用内存。)接着,NTLDR启动内建的mini-file system drivers,通过这个步骤,使NTLDR可以识别每一个用NTFS或者FAT文件系统格式化的分区,以便发现以及加载Windows XP,到这里,初始引导加载器阶段就结束了。
2操作系统选择阶段。如果计算机安装了不止一个操作系统(也就是多系统),而且正确设置了boot.ini使系统提供操作系统选择的条件下,显示器会显示一个操作系统选单,这是NTLDR读取boot.ini的结果。在boot.ini中,主要包含以下内容:
[boot loader]
timeout=30
default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /fastdetect
multi(0)disk(0)rdisk(0)partition(2)\WINNT="Windows Windows 2000 Professional"
其中,multi(0)表示磁盘控制器,disk(0)rdisk(0)表示磁盘,partition(x)表示分区。NTLDR就是从这里查找Windows XP的系统文件的位置的。
如果选择启动 Windows2000/XP,NTLDR会继续引导进行以下过程;如果选择为非Windows2000/XP系统,NTLDR则会读取系统引导扇区副本 BOOTSECT.DOS转入启动相应系统。
3硬件检测阶段。ntdetect.com将收集计算机硬件信息列表并将列表返回到NTLDR,这样做的目的是便于以后将这些硬件信息加入到注册表HKEY_LOCAL_MACHINE下的hardware中。
4配置选择阶段。如果计算机含有多个硬件配置文件*列表,可以通过按上下按钮来选择。如果只有一个硬件配置文件,计算机不显示此屏幕而直接使用默认的配置文件加载Windows XP。
*硬件配置文件:指保存计算机特定硬件配置的系统文件。可以创建多个不同的硬件配置文件以满足计算机在不同场合的应用。
总结:引导阶段至此结束。在整个阶段中,系统要用到的文件一共有:NTLDR,Boot.ini,ntdetect.com,ntokrnl.exe,Ntbootdd.sys,bootsect.dos(可选的)。
3. 加载内核阶段
在加载内核阶段,NTLDR加载称为Windows XP内核ntokrnl.exe。系统加载了Windows XP内核但是没有将它初始化。接着NTLDR加载硬件抽象层(HAL,hal.dll)*,然后,系统继续加载HKEY_LOCAL_MACHINE\system键,NTLDR读取select键来决定哪一个Control Set将被加载。控制集中包含设备的驱动程序以及需要加载的服务。NTLDR加载HKEY_LOCAL_MACHINE\system\service\下start键值为0的最底层设备驱动。当作为Control Set的镜像的Current Control Set被加载时,NTLDR传递控制给内核,初始化内核阶段就开始了。
*硬件抽象层(HAL):隐藏特定平台的硬件接口细节,为操作系统提供虚拟硬件平台,使其具有硬件无关性,可在多种平台上进行移植。
4.初始化内核
在初始化内核阶段开始的时候,彩色的Windows XP的logo以及进度条显示在屏幕中央,在这个阶段,系统完成了启动的4项任务:
1内核使用在硬件检测时收集到的数据来创建了HKEY_LOCAL_MACHINE\HARDWARE键。
2内核通过引用HKEY_LOCAL_MACHINE\system\Current的默认值复制Control Set来创建了Clone Control Set。Clone Control Set配置是计算机数据的备份,不包括启动中的改变,也不会被修改。
3系统完成初始化以及加载设备驱动程序,内核初始化那些在加载内核阶段被加载的底层驱动程序,然后内核扫描HKEY_LOCAL_MACHINE\system\CurrentControlSet\service\下start键值为1的设备驱动程序。这些设备驱动程序在加载的时候便完成初始化,如果有错误发生,内核使用ErrorControl键值来决定如何处理,值为3时,错误标志为危机/关键,系统初次遇到错误会以LastKnownGood Control Set重新启动,如果使用LastKnownGood Control Set启动仍然产生错误,系统报告启动失败,错误信息将被显示,系统停止启动;值为2时错误情况为严重,系统启动失败并且以LastKnownGood Control Set重新启动,如果系统启动已经在使用LastKnownGood值,它会忽略错误并且继续启动;当值是1的时候错误为普通,系统会产生一个错误信息,但是仍然会忽略这个错误并且继续启动;当值是0的时候忽略,系统不会显示任何错误信息而继续运行
4Session Manager启动了Windows XP高级子系统以及服务,Session Manager启动控制所有输入、输出设备以及访问显示器屏幕的Win32子系统以及Win logon进程,初始化内核完毕。
5.用户登录
开始登录进程。由WIN32子系统启动WINLOGON.EXE,并由它启动LOCAL SECURITY AUTHORITY(LSASS.EXE)显示登录对话框。用户登录后,WINDOWSR XP会继续配置网络设备和用户环境。
最后,伴随着微软之声和熟悉的个性化桌面, WINDOWSR XP的启动过程终于完成。
二、WindowsR Vista启动过程
WindowsR Vista的启动过程,开辟了 Microsoft 系统启动技术的新纪元——它不同于以往任何版本的Windows操作系统。在WindowsR Vista的启动过程中,NTLDR 和 Boot.ini已经不再被使用(当然,在多启动环境下需要引导WindowsR 2000/XP或WindowsR Server 2003时,它们还是起重要作用的)。
1、POST阶段(与XP大致相同)
计算机系统将进行加电自检(POST)。如果通过,之后BIOS会读取主引导记录(MBR)——被标记为启动设备的硬盘的首扇区,并传送被Windows Vista建立的控制编码给MBR。
2、引导阶段
1.MBR读取引导扇区-活动分区的第一扇区。此扇区包含用以启动Windows启动管理器(Windows Boot Manager)程序Bootmgr.exe的代码。
2.Windows启动管理器读取“启动配置数据存储”(Boot Configuration Data store)中的信息。此信息包含已被安装在计算机上的所有操作系统的配置信息。并且用以生成启动菜单。
3.当在启动菜单中选择下列动作时:
1如果选择的是Windows Vista,Windows 启动管理器(Windows Boot Manager)运行%SystemRoot%\System32文件夹中的OS loader- Winload.exe。
2如果选择的是自休眠状态恢复Windows Vista,那么启动管理器将装载Winresume.exe并恢复您先前的使用环境。
3如果在启动菜单中选择的是早期的Windows版本,启动管理器将定位系统安装所在的卷,并且加载Windows NT风格的早期OS loader(Ntldr.exe)——生成一个由boot.ini内容决定的启动菜单。
3、用户登陆
Windows Vista启动时加载其核心文件 Ntoskrnl.exe和hal.dll从注册表中读取设置并加载驱动程序。接下来将运行Windows会话管理器(smss.exe)并且启动 Windows启动程序(Wininit exe),本地安全验证(Lsass.exe)与服务(services.exe)进程,完成后,就可以登录系统了。
4、附:启动过程示意图
三、总结
通过对上述启动过程的探究,相信大家对一个操作系统的启动过程已经有了一个初步的了解。其实电脑是一个充满了奥秘的世界,简简单单的系统启动不过是沧海一粟罢了,所以我们需要探究的还很多。电脑是将来社会必不可少的工具,并且在各行各业都要发挥重要作用。所以,学好信息技术对我们的未来至关重要。