1、。透视启动过程从我们按下计算机电源按钮到系统成功登陆,似乎只有短短几秒,而就在这短短的几秒内系统的执行和运转就像进行了一次长征。系统在这么短的时间内到底做了什么呢?一般我们可以将整个系统启动过程分为以下几个阶段:1 预引导阶段(Pre-Boot)A加电复位(RESET)当我们按下电源开关时,电源开始向主板和其它设备供电,此时电压还不太稳定,主板上的控制芯片组会向 CPU 发出并保持一个重置(RESET)信号,它使 CPU 内部自动恢复到初始状态,但 CPU 在此刻不会马上执行指令。当芯片组检测到电源已经开始稳定供电了,它便撤去 RESET信号(如果是手工按下计算机面板上的 Reset 按钮来重
2、启机器,那么松开该按钮时芯片组就会撤去 RESET 信号),CPU 马上就从地址 FFFF0H 处开始执行指令,这个地址位于系统 BIOS(基本输入输出系统,它是直接与硬件打交道的底层代码,为操作系统提供了控制硬件设备的基本功能。BIOS 包括有系统 BIOS(即常说的主板 BIOS)、显卡 BIOS 和其它设备(例如 IDE 控制器、SCSI 卡或网卡等)的 BIOS,这里是指系统 BIOS,因为计算机的启动过程是在它的控制下进行的。它一般被存放在 ROM(只读存储芯片)之中,即使在关机或掉电以后,这些代码也不会消失。)的地址范围内(我们的机器中一般安装有 32MB、64MB 或 128MB
3、 内存,这些内存的每一个字节都被赋予了一个地址,以便 CPU 访问内存。32MB 的地址范围用十六进制数表示就是01FFFFFFH,其中 0FFFFFH 的低端 1MB 内存非常特殊,因为最初的 8086 处理器能够访问的内存最大只有 1MB,这 1MB 的低端 640KB 被称为基本内存,而 A0000HBFFFFH 要保留给显示卡的显存使用,C0000HFFFFFH 则被保留给 BIOS 使用,其中系统 BIOS 一般占用了最后的 64KB或更多一点的空间,显卡 BIOS 一般在 C0000HC7FFFH 处,IDE 控制器的 BIOS 在C8000HCBFFFH 处。),这只是一条跳转指
4、令,跳到系统 BIOS 中真正的启动代码处。B加电自检(POST ,Power On Self Test)BIOS 进行 POST 的主要任务是检测系统中一些关键设备是否存在和能否正常工作,例如内存和显卡等设备。由于 POST 是最早进行的检测过程,此时显卡还没有初始化,这一阶段显示屏是完全黑色的,如果显示器面板带有指示灯,此时将显示无信号,但这仅仅只有一瞬间如果系统 BIOS 在进行 POST 的过程中发现了一些致命错误,例如没有找到内存或者基本内存(640K 常规内存)有问题,那么系统 BIOS 就会直接控制喇叭发声来报告错误,声音的长短和次数代表了错误的类型。在正常情况下,POST 过程
5、进行得非常快,我们几乎无法感觉到它的存在,POST 结束之后就会调用其它代码来进行更完整的硬件检测。C访问标准硬件 BIOS,初始化硬件系统 BIOS 将查找显卡的 BIOS,由于存放显卡 BIOS 的 ROM 芯片的起始地址通常设在 C0000H 处,系统 BIOS 在这个地方找到显卡 BIOS 之后就调用它的初始化代码,由显卡 BIOS 来初始化显卡,此时多数显卡都会在屏幕上显示出一些初始化信息,介绍生产厂商、图形芯片类型等内容,不过这个画面几乎是一闪而过。系统 BIOS 接着会查找其它设备(像硬盘,光驱)的BIOS 程序,找到之后同样要调用这些 BIOS 内部的初始化代码来初始化相关的设
6、备。查找完所有其它设备的 BIOS 之后,系统 BIOS 将显示出它自己的启动画面,其中包括有系统 BIOS的类型、序列号和版本号等内容。D. 硬件测试和设置当所有基本硬件被初始化以后,系统 BIOS 将对它们进行基本的测试和设置。BIOS 将检测和显示 CPU 的类型和工作频率,然后开始测试所有的 RAM,并同时在屏幕上显示内存测试的进度,我们可以在 CMOS 设置中自行决定使用简单耗时少或者详细耗时多的测试方式。内存测试通过之后,系统 BIOS 将开始检测系统中安装的一些标准硬件设备,包括硬盘、CDROM、串口、并口、软驱等设备,另外绝大多数较新版本的系统 BIOS 在这一过程中还要自动检
7、测和设置内存的定时参数、硬盘参数和访问模式等。标准设备检测完毕后,系统 BIOS 内部的支持即插即用的代码将开始检测和配置系统中安装的即插即用设备,每找到一个设备之后,系统 BIOS 都会在屏幕上显示出设备的名称和型号等信息,同时为该设备分配中断、DMA 通道和 I/O 端口等资源。此时所有硬件都已经检测配置完毕了,多数系统 BIOS 会重新清屏并在屏幕上方显示出一个表格,其中概略地列出了系统中安装的各种标准硬件设备,以及它们使用的资源和一些相关工作参数。E更新 ESCD(Extended System Configuration Data,扩展系统配置数据)ESCD 是系统 BIOS 用来与
8、操作系统交换硬件配置信息的一种手段,这些数据被存放在 CMOS(一小块特殊的 RAM,由主板上的电池来供电)之中。通常 ESCD 数据只在系统硬件配置发生改变后才会更新,所以不是每次启动机器时我们都能够看到“Update ESCD Success”这样的信息,不过,某些主板的系统 BIOS 在保存 ESCD 数据时使用了与 Windows 9x 不相同的数据格式,于是Windows 9x 在它自己的启动过程中会把 ESCD 数据修改成自己的格式,但在下一次启动机器时,即使硬件配置没有发生改变,系统 BIOS 也会把 ESCD 的数据格式改回来,如此循环,将会导致在每次启动机器时,系统 BIOS
9、 都要更新一遍 ESCD,这就是为什么有些机器在每次启动时都会显示出相关信息的原因。F加载 MBR(Master Boot Record,硬盘主引导记录),进入操作系统引导阶段ESCD 更新完毕后,系统 BIOS 将根据用户指定的启动顺序(此项一般在 BIOS 中进行设置)从软盘、硬盘或光驱启动。以硬盘启动为例,系统 BIOS 将读取并执行硬盘上的 MBR(它位于磁盘的零柱面零磁道的第一个扇区,既主引导扇区。主引导扇区共有 512 字节,分为三部分。1。主引导程序(446 字节)包含了硬盘的一系列参数和一段引导程序,引导程序在系统硬件自检完后引导具有激活标志的分区上的操作系统,此部分还包括启动
10、出错时的提示信息 Invalid partition table、 Error loading operating system、Missing operating system 和一些保留信息。它执行到最后的是一条 JMP 指令跳到操作系统的引导程序去。2。硬盘分区表(DPT,Disk Partition Table)(64 字节)记录了分区的大小、类型,是否是活动分区等。3。主引导扇区结束标志 55AA(2 字节),加载的引导程序根据 DPT 记录的活动分区,读取并执行这个活动分区的分区引导记录(一般 C 盘被设为活动区),同时从分区引导扇区加载系统加载器 NTLDR(NT Loder)并
11、初始化。NTLDR 是 Windows XP2000 的最重要的启动文件。当它被调入内存并执行时,它将从 BIOS 手中接过系统控制权,此时 BIOS 完成了全部使命!2 系统引导阶段A 初始引导加载器阶段(Initial Boot Loader)计算机要经过初始引导加载器阶段(Initial Boot Loader),在这个阶段里,NTLDR 将计算机微处理器从实模式转换为 32 位平面内存模式。在实模式中,系统为 MS-DOS 保留 640kb 内存,其余内存视为扩展内存,而在 32 位平面内存模式中,系统(Windows XP Professional)视所有内存为可用内存。接着,NTL
12、DR 启动内建的小文件系统驱动程序(mini-file system drivers)。小文件系统驱动程序是建立在 NTLDR 内部的,它能读 FAT 或 NTFS。通过这个步骤,使 NTLDR 可以识别每一个用 NTFS 或者 FAT 文件系统格式化的分区,以便发现以及加载 Windows XP Professional,到这里,初始引导加载器阶段就结束了。B 操作系统选择阶段我们在平时操作装有多操作系统的计算机时,一般会遇到操作系统选择界面。这界面便是有 NTLDR 调用文件 boot.ini(它是类似于 98 中的 MSDOS.SYS,能对启动参数进行设置,但相较之下比 MSDOS.SY
13、S 功能更强大,参数也更规范)并执行而产生的!在 boot.ini 文件中记录着系统菜单和启动配置!NTLDR 就是从这里查找到 XP 的系统文件位置的。在后面我们将深入分析它的结构和参数以及它的具体作用!如果此时 Ntldr 没有找到Boot.ini 文件,就默认从第一个磁盘的第一个分区的Winnt 位置加载系统.当我们选择了 XP 后,boot.ini 文件的调用也就结束了,而 NTLDR 将继续行使系统控制权!C 硬件检测和配置选择阶段 组件被调入内存,它将收集计算机硬件信息(硬盘,适配卡,显卡等)并将信息列表返回给 NTLDR,如果我们选择了其它操作系统,Bootsect.dos 将被
14、执行,它是由后续安装的高级操作系统在安装时创建的,它记录了多系统的引导和设置!硬件检测完成后,进入配置选择阶段。如果计算机含有多个硬件配置文件列表,可以通过按上下按钮来选择。如果只有一个硬件配置文件,计算机不显示此屏幕而直接使用默认的配置文件加载 XP。系统引导阶段结束。3 内核调用阶段A. 加载内核阶段在加载内核阶段,ntldr 加载称为 XP 内核的 ntokrnl.exe,并将由 收集的启动信息传递给它,系统加载了 Windows XP 内核但是没有将它初始化,接着 ntldr 加载硬件抽象层(Hardware Abstraction Layer 硬件抽象层),然后,系统继续加载HKE
15、Y_LOCAL_MACHINEsystem 键,NTLDR 读取 select 键来决定哪一个 Control Set 将被调入内存。控制集中包含设备的驱动程序以及需要加载的服务。NTLDR 加载HKEY_LOCAL_MACHINEsystemservice下 start 键值为 0 的最底层设备驱动,当 boot.ini 文件中有参数项“SOS“时,可以在屏幕上看到调用的设备列表。当被调入内存的作为Control Set 的镜像的 Current Control Set 被加载时,ntldr 把控制权交给内核,内核加载阶段结束。B. 初始化内核阶段在初始化内核阶段开始的时候,彩色的 Wind
16、ows XP 的 logo 以及进度条显示在屏幕中央,在这个 LOGO 的背后,系统将完成以下任务:1。内核使用在硬件检测时收集到的数据来创建了 HKEY_LOCAL_MACHINEHARDWARE 键。2。内核通过引用 HKEY_LOCAL_MACHINEsystemCurrent 的默认值复制 Control Set 来创建了Clone Control Set。Clone Control Set 配置是计算机数据的备份,不包括启动中的改变,也不会被修改。3系统完成初始化以及加载设备驱动程序,内核初始化那些在加载内核阶段被加载的底层驱动程序,然后内核扫描 HKEY_LOCAL_MACHINE
17、systemCurrentControlSetservice下 start 键值为 1 的设备驱动程序。这些设备驱动程序在加载的时候便完成初始化,如果有错误发生,内核使用 ErrorControl 键值来决定如何处理,值为 3 时,错误标志为危机/关键,系统初次遇到错误会以 LastKnownGood Control Set 重新启动,如果使用 LastKnownGood Control Set 启动仍然产生错误,系统报告启动失败,错误信息将被显示,系统停止启动;值为 2 时错误情况为严重,系统启动失败并且以 LastKnownGood Control Set 重新启动,如果系统启动已经在使用
18、LastKnownGood 值,它会忽略错误并且继续启动;当值是 1 的时候错误为普通,系统会产生一个错误信息,但是仍然会忽略这个错误并且继续启动;当值是 0 的时候忽略,系统不会显示任何错误信息而继续运行。4Session Manager(smss.exe,会话管理器)SMSS 是第一个 USER MODE 的应用程序,又是一个真正的 NATIVE APPLICATION,它不依赖于任何子系统,仅仅需要 NTDLL.DLL.它将设置内存分页,并读取必须启动的程序列表 HKEY_LOCAL_MACHINESYSTEMCurrentControlSetSession ManagerBootExe
19、cute,找出在引导时加载的 NATIVE APPLICATION,像 CHKDSK.EXE 等,启动Windows XP 高级子系统以及服务,包括启动控制所有输入、输出的设备、访问显示器屏幕的Win32 子系统。它调用 CONFIG MANAGER 完成对HKEY_LOCAL_MACHINESAM,HKEY_LOCAL_MACHINESAMSECURITY,HKEY_LOCAL_MACHINESOFTWARE的配置,然后加载 WIN32K.SYS,这时系统就被切换到图形状态。启动 WIN32 子系统,即CSRSS.EXE. 启动 WINLOGON.EXE。创建用于调试的 LPC 端口,并创建
20、线程来监视。完成了这些工作后,SMSS 等待 WINLOGON 和 CSRSS 的进程对象,把自己挂起。初始化内核完毕。4系统登陆并启动A. 调入系统平台,初始化服务程序WINLOGON 在被启动后,启动 SCM(服务管理器),将所有的“自动启动“的 SERVICE 启动起来。当启动 SCM 后,WINLOGON 就创建一个工作站,代表 KBD,MOUSE,MONITOR.并确保连 SERVICE 也不能访问该工作站,以保证安全性. 当工作站创建好后,就打开 3 个桌面.APP,SCR SAVER,WINLOGON.然后就是建立 LSA 和 LPC 联接.用于登陆.注销.口令操作. 启动 Lo
21、cal Security Authority(Lsass.exe,本地安全权限管理),这时屏幕显示出登陆对话框。然后系统执行Service Controller(Screg.exe)再次扫描注册表HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControl 项并自动加载其中系统的或用户的服务,同时界面提示输入有效的用户名或密码。B.登录控制WINLOGON 在自己创建的工作站上设置一个访问控制入口(ACE),该 ACE 中只包含 Winlogon 进程的 SID,这样就只有 Winlogon 进程才能访问该 Window Stations 。然后 winlo
22、gon 创建桌面,设置其中的 winlogon 桌面只有 winlogon 可以访问,其他进程不能访问该桌面的任何数据和代码;利用这一特性保护口令、锁定桌面等操作的安全。winlogon 还会注册安全警告序列(SAS - secure attention sequence)的热键,任何时候按下 SAS 热键(缺省为 ctrl+alt+del),将调用 Winlogon,切换到安全桌面,从而使密码捕捉程序不能接收登录密码和更改密码等安全活动,如果此时没有调出安全登陆对话框,则可以判定有虚拟拦截程序存在!当用户输入密码后,WINLOGON 调用 GINA(MSGINA.dll,Graphical Identification and Authentication 图形标识和身份验证),GINA 显示登录对话框,以便用户输入账号和密码。在这整个登陆过程中, WINLOGON 会调用系统目录中的登陆界面程序 logonui.exe,为用户提供友好的交互式登陆界面,这就是我们在设置密码后登陆时通常看到的微软 XPLOGO 画面.用户成功登陆到计算机后,Windows XP 的启动才被认为是完成,此时系统将拷贝 Clone Control Set 到LastKnownGood Control Set,完成这一步骤后,我们真正的蓝天白云诞生了!