Windows NT 4.0中文版的开机过程
● 文 / 赖 荣 枢
了解作业系统的开机过程是任何想要深入作业系统核心的人所必备的知识, Windows NT 本身支援多重开机, 开机过程的复杂程度已经不是从前的 DOS 可以比拟。
当你开启安装了 Windows NT 4.0 Workstation 的电脑电源, 你的电脑就开始了 载入 Windows NT 系统的动作, 虽然光就电脑萤幕上的画面显示, 感觉不出Windows NT 开机动作的繁复, 但是只要你稍微比较 Windows 95 与 WindowsNT 的开机时间, 你一定会发现 Windows NT 的开机动作的确繁杂许多。
对 Windows NT 而言, 从你开启电脑电源开始, 一直到萤幕上出现要你同时按 下 Ctrl、Alt、Del 按键的登入交谈窗为止的整个过程都是 Windows NT 的开机 过程, 在这个过程当中, Windows NT 的开机程式负责将整个系统核心载入记忆 体。对於想要了解 Windows NT 系统核心的读者而言, 有其必要先了解整个系 统的载入情况, 所以在这一期关於 Windows NT 4.0 Workstation 的文章, 就让 我们一起来探讨 Windows NT 4.0 Workstation 的开机过程。
从开启电脑电源开始, 一直到萤幕上出现登入交谈窗的这段过程, 都属於 Windows NT 的开机过程。当然, 任何作业系统的开机过程不外乎是将系统核心 档案从磁碟或 BIOS 中载入记忆体、并加以执行, 接着再对整个系统进行初始 化的动作, 然後等待使用者的操作; Windows NT 亦然, 现在就让我们一起来瞧 瞧 Windows NT 的开机过程。
POST
从开启电脑电源开始, 一直到萤幕上出现登入交谈窗的这段过程, 都属於 Windows NT 的开机过程。当然, 任何作业系统的开机过程不外乎是将系统核心 档案从磁碟或 BIOS 中载入记忆体、并加以执行, 接着再对整个系统进行初始 化的动作, 然後等待使用者的操作; Windows NT 亦然, 现在就让我们一起来瞧 瞧 Windows NT 的开机过程。
经常自己组装、维修电脑的读者或许都曾经在电脑 POST 的时候发生一些小问 题, 关於这方面的问题解决, 您可以参考主机板所附上的使用手册, 或是参考坊 间的电脑 DIY 书籍。
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。图3 显示在登录编辑器中的机码资料
结论
了解作业系统的开机过程是任何想要深入作业系统核心的人所必备的知识, 对於 Windows NT 这个庞大的作业系统而言, 它的开机过程也不单纯, 也因为Windows NT 本身支援多重开机, 所以使得开机过程更形繁复。从 MBR、PBS、ntldr, 再到 Ntoskrnl.exe 载入、初始众多的服务项目, 到最後利用 Winlogon.exe让使用者登入, Windows NT 开机过程的复杂程度已经不是从前的 DOS 可以比拟。
了解作业系统从了解作业系统的开机过程开始, 而且从本文中, 你应该也发现了 登录系统内的资料对於 Windows NT 的开机过程相当重要, 不过登录系统的资 料不只对於开机非常重要, 它可以说是整个 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 数值内容。