windows NT系统的启动过程:
MBR 载入 Active Partition 的 PBS
完成 POST 的动作之後, BIOS 会根据 CMOS 上的设定, 到开机磁碟(通常都 是硬碟)的第0轨读取、执行 MBR(Master Boot Record)里面的程式。MBR 的 作用是读取磁碟分割表(Partition Table)里面所设定的 Active Partition, 说得更 精准一点, MBR 会读取、执行 Active Partition 第 0 个磁区(Sector 0)的内容, 这个磁区称为 Partition Boot Sector, 而在 PBS 里面放着一段可以用来载入作业 系统的程式, 这段程式是安装作业系统时, 由作业系统所放入的。正因为 MBR 启动了 PBS 的执行, 所以现在整个电脑即将进入载入作业系统的动作。 当然, 如果 MBR 找不到 Active Partition, 那麽 MBR 就会在萤幕上显示像 Missing Operating System 等等的错误讯息, 所以如果您的 Windows NT 无法正 常开启, 而您又在萤幕上看到类似这样的错误讯息, 原因大多就是出在硬碟的磁碟分割表。
PBS 载入 Windows NT 的 OS Loader
PBS 是一段由作业系统提供的程式, 它的目的是用来载入作业系统, 而首先被 PBS 载入的 Windows NT 开机档案就是 ntldr, 您可以在 Windows NT 电脑的 第一颗硬碟根目录找到这个档案, 而且 ntldr 也只能放在这里, 否则 Windows NT 将无法启动。因为 ntldr 是个系统档案, 所以您必须调整档案总管的档案检 视选项, 或者在 DOS 视窗中替 dir 指令加上 /a 参数, 才能找到这个档案。 ntldr 肩负着启动 Windows NT 作业系统的重责大任, 整个 Windows NT 系统 的载入过程都是由它所主导。不过除了 ntldr 之外, 还有些档案也必须与它同在 第一颗硬碟的根目录之中:
* Ntdetect.com 是 Windows NT 开机时, 用来检测硬体周边的程式。
* bootfont.bin 提供了 Windows NT 中文版开机时的中文字形。
* Boot.ini 这是个 text 文字档案, 它记录了 Windows NT 时的选项内容。
* Bootsect.dos 它的内容是 Windows 95 或 DOS 版本的 PBS, 如果您利用 NT OS Loader 对 DOS 与 Windows NT 进行多重开机, 那麽也必须有这个档案。
* Ntbootdd.sys 如果您安装了 SCSI 界面的硬碟, 那麽也必须有这个驱动程式。
多重开机选项
当 ntldr 开始执行之後, 您会在萤幕上看到如图1 的多重开机选项画面, 多重开 机选项是 ntldr 根据 Boot.ini 的内容而决定的, 而 Boot.ini 是个 text 文字档, 因此您可以自行修改 Boot.ini 的内容而改变多重开机选项。 之前曾经提到 Bootsect.dos, 这个档案的内容是 Windows 95/DOS 版本的 PBS, 如果您利用 OS Loader 的多重开机选项选择以之前安装的 Windows 95 或 DOS 来开机, 那麽 ntldr 将会载入 Bootsect.dos 的内容, 并将控制权转交给 它, 接下来, 您的电脑就会以 Windows 95 或 DOS 来开机了。
侦测硬体周边设备
如果您在多重开机选项中是以 Windows NT 作为开机作业系统, 那麽接着 ntldr 还会执行 Ntdetect.com 来检测电脑的硬体周边设备, 而 Ntdetect.com 会将电脑 硬体的侦测结果传回给 ntldr, 这时候萤幕上会显示「NTDECT V1.0 正在检查硬 体...」。
选择硬体设定档
接下来 ntldr 会在萤幕上显示一段文字, 提示您是否要更换硬体设定档, 如果您 这时按下了空白键, ntldr 会出现一个让您选择硬体设定档的画面; 但如果您并 没有按下空白键, ntldr 将会载入预设的硬体设定档。
或者您也可以先按下空白键, 再在进入选择硬体设定档的画面以选择上一次可以 顺利开机的硬体设定, 有时候您可能会需要这个功能让您顺利启动 Windows NT。
您可以利用滑鼠按钮双按控制台中的系统图示, 再以系统内容交谈窗的硬体设定 档页来处理有关硬体设定档的设定。如图2, 您可以复制、删除硬体设定档, 也 可以更改更改硬体设定档的内容或名称, 还可以调整 ntldr 等待使用者选择硬体 设定档的时间。
载入系统核心
接下来, ntldr 将要载入 Windows NT 的系统核心了, 在这个时候, ntldr 将会 载入 Windows NT 核心档案, 也就是 Ntoskrnl.exe, 以及 Hal.dll(Hardware Adaptation Layer)您会在黑底白字的萤幕上看到许多点(.)陆续的显示在萤幕 上, 然後 ntldr 将读取登录系统 HKEY_LOCAL_MACHINE\SYSTEM 的内容。
Windows NT 将开启作业系统时, 所有与硬体相关的资料通通放在 HKEY_LOCAL_MACHINE\SYSTEM\ControlSetXXX 里面, 如下页图3, 这是我电 脑的 Windows NT 登录系统资料, 你可以发现其中有 ControlSet001、 ControlSet002 等两笔 ControlSetXXX 机码。然而, 到底哪一个机码会在 Windows NT 系统开机时被载入使用呢?
关键就在於 Select 机码的 Default 数值的内容了。如图3 的右窗格, Select 机 码的 Default 数值是 1, 这表示HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001 机码中的资料将会被用作Windows NT 系统开机时的硬体预设资料, 如果你曾 在如图4 的硬体设定档/设定复原功能表选择其他的硬体设定档, 那麽 ntldr 将 会载入该硬体设定档所对映到的 ControlSet。
而且 ntldr 还会将开机时所用的 ControlSet 编号记录到 Select 机码的Current 数值里面, 例如这次开机是以 ControlSet001 的硬体资料作为硬体设定档的内 容, 那麽 Select 机码的 Current 数值内容就会是 1。不过 ntldr 并不会直接使 用 HKEY_LOCAL_MACHINE\SYSTEM\ControlSetXXX 里面所记录的资料, 而 是将资料复制到 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet 机码里 面。
在 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet 底下有个 Services 子机码, Service 底下的每一个子机码所记录的都是 Windows NT 系统在开机时 应该要载入的服务(Service)项目, 这时 ntldr 将会检查 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Service 底下每一笔服务 项目子机码的 Start 数值的内容, 如果 Start 数值内容是 0, 那麽 ntldr 将会在 这时载入该服务项目的驱动程式。 这时的 ntldr 是在 CPU 为 real mode 的状态之下, 利用 BIOS int 13 的系统呼 叫来载入这些驱动程式; 如果你的硬碟是 SCSI 界面, 那麽这时 Ntbootdd.sys 将 可以派上用场, 用来载入这些驱动程式。
系统核心的初始化
接下来 Windows NT 的开机过程即将进入系统核心初始化的步骤, 当 Windows NT 系统核心开始进入初始化的时候, 系统的主导权已经从 ntldr 转交给 Ntoskrnl.exe 手上, 而整个萤幕会呈现蓝色的画面, 并显示 Windows NT 的版 本、Build 序号, 以及电脑上所配置的 CPU 和记忆体数量。 Ntoskrnl.exe 首先会根据 ntldr 所给予的资料(实际上是由 Ntdetect.com 所侦 测, 再传给 ntldr)建立一个 HKEY_LOCAL_MACHINE\HARDWARE 机码, 也就是说这个机码的内容会因每次开机而透过 Ntdetect.com 的重新侦测而有所 更新。
接下来 Ntoskrnl.exe 将会检查HKEY_LOCAL_MACHINE\SYSTEM\CurrentCon trolSet\Service 底下每一笔服务项目子机码的 Start 数值的内容, 如果 Start 数值 内容是 1, 那麽 ntldr 将会在这时载入该服务项目的驱动程式。
Session Manager(Smss.exe) 的作用就是用来载入这些 Start 数值内容为 1 的 服务项目, 而在 这时 ntldr 将会检查HKEY_LOCAL_MACHINE\SYSTEM\Cu rrentControlSet\Control\SessionManager机码里面将有足够的资料供 Session Ma nager 使用。
登入系统
接着, Windows NT 将会进入 GUI 画面, 并且由 Ntoskrnl.exe 启动Winlogon.exe 准备让使用者进行登入的动作, Winlogon.exe 会再启动一个称为Local Security Administration 的程式(Lsass.exe), Lsass.exe 将负责显示登入交谈窗等等让使用 者输入使用者名称、密码的动作。这时候的 Windows NT 可能还在进行一些诸 如对网路相关驱动程式初始化的工作, 不过你依旧可以进行登入的动作。
接着 Service Control(Screg.exe)还会再对HKEY_LOCAL_MACHINE\SYSTEM\Cu rrentControlSet\Service 底下每一笔服务项目子机码的 Start 数值的内容进行检查, 如果 Start 数值内容是 2, 那麽Screg.exe 将会在这时载入该服务项目的驱动程式。 一直到这里为止, Windows NT 总算完成整个开机的动作, 而使用者也登入到 Windows NT 系统之中, 开始操作 Windows NT。
结论
了解作业系统的开机过程是任何想要深入作业系统核心的人所必备的知识, 对於 Windows NT 这个庞大的作业系统而言, 它的开机过程也不单纯, 也因为Windows NT 本身支援多重开机, 所以使得开机过程更形繁复。从 MBR、PBS、ntldr, 再到 Ntoskrnl.exe 载入、初始众多的服务项目, 到最後利用 Winlogon.exe让使用者登入, Windows NT 开机过程的复杂程度已经不是从前的 DOS 可以比拟。
了解作业系统从了解作业系统的开机过程开始, 而且从本文中, 你应该也发现了 登录系统内的资料对於 Windows NT 的开机过程相当重要, 不过登录系统的资料不只对於开机非常重要, 它可以说是整个 Windows NT 作业系统的灵魂。
Start 数值内容的意义
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Service 底下每一笔 服务项目子机码都有一个 Start 数值, 这个数值的内容依照每一个服务项目的状 况而又有不同。从上述 Windows NT 开机的过程当中你会发现, 当 ntldr 载入 系统核心时, 会一起将 Start 数值为 0 的服务项目驱动程式载入; 当系统进入 初始化阶段的时候, Ntoskrnl.exe 会载入 Start 数值为 1 的服务项目驱动程式; 而当使用者登入系统之後, Session Manager 还会将 Start 数值为 2 的服务项目 驱动程式载入。
原来 Start 数值内容所记录的就是服务项目驱动程式该在何时被载入, 目 前微软对 Start 内容的定义有 0、1、2、3、4 等五种状态, 0、1、2 分别代表 Boot、 System、Auto Load 等叁种意义。而 Start 数值内容为 3 的服务项目代表让使用 者以手动的方式载入(Load on demand), 4 则是代表停用的状态, 也就是不载 入。
你可以滑鼠按钮双按控制台的服务图示, 再按下服务交谈窗的启动设定 钮, 就可以利用这时出现的服务交谈窗(如图4)来调整服务项目的启动值, 其 中服务交谈窗中的自动、手动、停用分别就是 2、3、4 等叁个 Start 数值内容。
NT系统大致的启动顺序:
1、电源自检程序开始运行
2、主引导记录被装入内存,并且程序开始执行
3、活动分区的引导扇区被装入内存
4、Ntldr从引导扇区被装入并初始化
5、将处理器的实模式改为32位平滑内存模式
6、Ntldr开始运行适当的小文件系统驱动程序。小文件系统驱动程序是建立在NTLDR内部的,它能读FAT或NTFS。
7、Ntldr读boot.ini文件
8、Ntldr装载所选操作系统
*如果WindowsNT被选择,Ntldr运行Ntdetect.com
*对于其他的操作系统,Ntldr装载并运行Bootsect.dos然后向它传递控制.
windows NT过程结束.
9.Ntdetect.com 搜索计算机硬件并将列表传送给Ntldr,以便将这些信息写进HKE Y_LOCAL_MACHINE\HARDWARE中.
10.然后Ntldr装载Ntoskrnl.exe,Hal.dll和系统信息集合
11.Ntldr搜索系统信息集合,并装载设备驱动配置以便设备在启动时开始工作
12.Ntldr把控制权交给Ntoskrnl.exe,这时,启动程序结束,装载阶段开始作者: fooler 时间: 2005-1-3 17:01 标题: [原创]计算机WINDOWS家族启动过程!
Windows XP Professional计算机启动过程概述
--------------------------------------------------------------------------------
概述
本文讲述了Microsoft Windows XP 在x86架构计算机上的启动过程,旨在使读者更加了解Windows XP专业版启动的基本知识。了解了这些知识以后,当启动发生问题时,可以更快地找到解决方案以避免可能发生的各方面的损失。但要注意的是,本文并没有涉及到故障处理以及任何关于故障的阐述,本文仅仅介绍Windows XP引导/启动过程。
--------------------------------------------------------------------------------
目录
1. Windows XP启动阶段概览
2. 每个启动阶段的详细介绍
--------------------------------------------------------------------------------
Windows XP启动阶段概览
从按下计算机开关启动计算机,到登入到桌面完成启动,一共经过了以下几个阶段:
1. 预引导(Pre-Boot)阶段;
2. 引导阶段;
3. 加载内核阶段;
4. 初始化内核阶段;
5. 登陆。
--------------------------------------------------------------------------------
每个启动阶段的详细介绍
a) 预引导阶段
在按下计算机电源使计算机启动,并且在Windows XP专业版操作系统启动之前这段时间,我们称之为预引导(Pre-Boot)阶段,在这个阶段里,计算机首先运行Power On Self Test(POST),POST检测系统的总内存以及其他硬件设备的现状。如果计算机系统的BIOS(基础输入/输出系统)是即插即用的,那么计算机硬件设备将经过检验以及完成配置。计算机的基础输入/输出系统(BIOS)定位计算机的引导设备,然后MBR(Master Boot Record)被加载并运行。在预引导阶段,计算机要加载Windows XP的NTLDR文件。
b) 引导阶段
Windows XP Professional引导阶段包含4个小的阶段。
首先,计算机要经过初始引导加载器阶段(Initial Boot Loader),在这个阶段里,NTLDR将计算机微处理器从实模式转换为32位平面内存模式。在实模式中,系统为MS-DOS保留640kb内存,其余内存视为扩展内存,而在32位平面内存模式中,系统(Windows XP Professional)视所有内存为可用内存。接着,NTLDR启动内建的mini-file system drivers,通过这个步骤,使NTLDR可以识别每一个用NTFS或者FAT文件系统格式化的分区,以便发现以及加载Windows XP Professional,到这里,初始引导加载器阶段就结束了。
接着系统来到了操作系统选择阶段,如果计算机安装了不止一个操作系统(也就是多系统),而且正确设置了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 Professional的系统文件的位置的。(*本文不会更详细地讲解boot.ini的组成结构,因为其与本主题关系不大,如果想了解,可以到一些专门的网站处查询相关信息。)如果在boot.ini中只有一个操作系统选项,或者把timeout值设为0,则系统不出现操作系统选择菜单,直接引导到那个唯一的系统或者默认的系统。在选择启动Windows XP Professional后,操作系统选择阶段结束,硬件检测阶段开始。
在硬件检测阶段中,ntdetect.com将收集计算机硬件信息列表并将列表返回到NTLDR,这样做的目的是便于以后将这些硬件信息加入到注册表HKEY_LOCAL_MACHINE下的hardware中。
硬件检测完成后,进入配置选择阶段。如果计算机含有多个硬件配置文件列表,可以通过按上下按钮来选择。如果只有一个硬件配置文件,计算机不显示此屏幕而直接使用默认的配置文件加载Windows XP专业版。
引导阶段结束。在引导阶段,系统要用到的文件一共有:NTLDR,Boot.ini,ntdetect.com,ntokrnl.exe,Ntbootdd.sys,bootsect.dos(可选的)。
c) 加载内核阶段
在加载内核阶段,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传递控制给内核,初始化内核阶段就开始了。
d) 初始化内核阶段
在初始化内核阶段开始的时候,彩色的Windows XP的logo以及进度条显示在屏幕中央,在这个阶段,系统完成了启动的4项任务:
内核使用在硬件检测时收集到的数据来创建了HKEY_LOCAL_MACHINE\HARDWARE键。
内核通过引用HKEY_LOCAL_MACHINE\system\Current的默认值复制Control Set来创建了Clone Control Set。Clone Control Set配置是计算机数据的备份,不包括启动中的改变,也不会被修改。
系统完成初始化以及加载设备驱动程序,内核初始化那些在加载内核阶段被加载的底层驱动程序,然后内核扫描HKEY_LOCAL_MACHINE\system\CurrentControlSet\service\...下start键值为1的设备驱动程序。这些设备驱动程序在加载的时候便完成初始化,如果有错误发生,内核使用ErrorControl键值来决定如何处理,值为3时,错误标志为危机/关键,系统初次遇到错误会以LastKnownGood Control Set重新启动,如果使用LastKnownGood Control Set启动仍然产生错误,系统报告启动失败,错误信息将被显示,系统停止启动;值为2时错误情况为严重,系统启动失败并且以LastKnownGood Control Set重新启动,如果系统启动已经在使用LastKnownGood值,它会忽略错误并且继续启动;当值是1的时候错误为普通,系统会产生一个错误信息,但是仍然会忽略这个错误并且继续启动;当值是0的时候忽略,系统不会显示任何错误信息而继续运行
Session Manager启动了Windows XP高级子系统以及服务,Session Manager启动控制所有输入、输出设备以及访问显示器屏幕的Win32子系统以及Winlogon进程,初始化内核完毕。
e) 登陆
Winlogon.exe启动Local Security Authority,同时Windows XP Professional欢迎屏幕或者登陆对话框显示,这时候,系统还可能在后台继续初始化刚才没有完成的驱动程序。
提示输入有效的用户名或密码。
Service Controller最后执行以及扫描HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Servives来检查是否还有服务需要加载,Service Controller查找start键值为2或更高的服务,服务按照start的值以及DependOnGroup和DepandOnService的值来加载。
只有用户成功登陆到计算机后,Windows XP的启动才被认为是完成,在成功登陆后,系统拷贝Clone Control Set到LastKnownGood Control Set,完成这一步骤后,系统才意味着已经成功引导了。
--------------------------------------------------------------------------------
结论
本文简单讲述了Windows XP Professional在32位计算机上的启动/引导过程,包括每个启动阶段,以及阶段中的详细步骤。虽然本文没有提及错误处理,但是通过让读者了解这些启动过程,当遇到错误时他们会变得更加从容以及更加容易找到错误的原因。作者: 潇笑 时间: 2005-1-15 21:32 标题: [原创]计算机WINDOWS家族启动过程!