开机全过程以每行一个过程来看
IO.SYS
MSDOS.SYS
CONFIG.SYS
COMMAND.COM
AUTOEXEC.BAT
这五个文件是开机的五个应该有的文件顺序
电脑脑启动流程是指从给电脑加电到装载完操作系统的过程,这个过程涉及电脑硬件和软件的一系列操作。对启动流程的了解,有助于在电脑发生故障时分析、判断产生故障的环节。
电脑从加电启动到启动成功,主要经历了开机、加电自检、检测显卡BIOS、显示BIOS信息、检测CPU、检测内存、检测标准设备、检测即插即用设备、显示标准设备的参数、按指定启动顺序启动系统、执行IO.SYS和MSDOS.SYS系统文件、执行COMMAND.COM等其他系统文件、读取Windowns的初始化文件、启动成功。
打开电源启动机器几乎是电脑爱好者每天必做的事情,面对屏幕上出现的一幅幅启动画面,我们一点儿也不会感到陌生,但是,计算机在显示这些启动画面时都做了些什么工作呢?相信有的朋友还不是很清楚,本文就来介绍一下从打开电源到出现Windows的蓝天白云时,计算机到底都干了些什么事情。
首先让我们来了解一些基本概念。第一个是大家非常熟悉的BIOS(基本输入输出系统),BIOS是直接与硬件打交道的底层代码,它为操作系统提供了控制硬件设备的基本功能。BIOS包括有系统BIOS(即常说的主板BIOS)、显卡BIOS和其它设备(例如IDE控制器、SCSI卡或网卡等)的BIOS,其中系统BIOS是本文要讨论的主角,因为计算机的启动过程正是在它的控制下进行的。BIOS一般被存放在ROM(只读存储芯片)之中,即使在关机或掉电以后,这些代码也不会消失。
第二个基本概念是内存的地址,我们的机器中一般安装有32MB、64MB或128MB内存,这些内存的每一个字节都被赋予了一个地址,以便CPU访问内存。32MB的地址范围用十六进制数表示就是0~1FFFFFFH,其中0~FFFFFH的低端1MB内存非常特殊,因为最初的8086处理器能够访问的内存最大只有1MB,这1MB的低端640KB被称为基本内存,而A0000H~BFFFFH要保留给显示卡的显存使用,C0000H~FFFFFH则被保留给BIOS使用,其中系统BIOS一般占用了最后的64KB或更多一点的空间,显卡BIOS一般在C0000H~C7FFFH处,IDE控制器的BIOS在C8000H~CBFFFH处。
引导过程
我们几乎每天都要打开电源启动机器,面对屏幕上出现的一幅幅启动画面,我们一点儿也不会感到陌生,但是,计算机在显示这些启动画面时都做了些什么工作呢?
打开计算机机电源后到计算机准备接受你发出的命令之间计算机所运行的过程称为引导(Boot)过程。我们知道,当关闭电源后,RAM的数据将丢失,因此,计算机不是用RA来保持计算机的基本工作指令,而是使用另外的方法将操作系统文件加载到RAM中,再由操作系统接管对机器的控制。这是引导过程中的一个主要部分。总的说来,引导过程有下面几个步骤:
① 加电––––打开电源开关,给主板和内部风扇供电。
② 启动引导程序––––CPU开始执行存储在ROM BIOS中的指令。
③ 开机自检––––计算机对系统的主要部件进行诊断测试。
④ 加载操作系统––––计算机将操作系统文件从磁盘读到RAM中。
⑤ 检查配置文件,定制操作系统的运行环境––––读取配置文件,根据用户的设置对操作系统进行定制。
⑥ 准备读取命令和数据––––计算机等待用户输入命令和数据。
(一) 加电
引导过程的第一步就是通电。电扇开始运转,电源指示灯应该变亮,否则说明系统电源供应有问题,或是主板等部件和机箱发生短路。
(二) 启动引导程序
CPU是从内存地址FFFF0H处开始执行指令的,从前面的介绍可知,这个地址实际上在系统BIOS的地址范围内,无论是哪家公司的 BIOS,放在这里的只是一条跳转指令,跳到系统BIOS中真正的启动代码处。
(三) 开机自检
系统BIOS的启动代码首先要做的事情就是进行POST(Power-On Self Test,加电后自检),POST的主要任务是检测系统中一些关键设备是否存在和能否正常工作,例如内存和显卡等设备。由于POST是最早进行的检测过程,此时显卡还没有初始化,如果系统BIOS在进行POST的过程中发现了一些致命错误,例如没有找到内存或者内存有问题(此时只会检查640K常规内存),那么系统BIOS就会直接控制喇叭发声来报告错误。正常情况下,POST过程进行得非常快。
POST结束之后,系统BIOS将查找显卡的BIOS并调用它的初始化代码,由显卡BIOS来初始化显卡,此时多数显卡都会在屏幕上显示出一些初始化信息,介绍
生产厂商、图形芯片类型等内容。系统BIOS接着会查找其他设备的BIOS程序,找到之后同样要调用这些BIOS内部的初始化代码来初始化相关的设备。
查找完所有其他设备的BIOS之后,系统BIOS将显示出它自己的启动画面,其中包括系统BIOS的类型、序列号和版本号等内容。然后检测和显示CPU的类型和工作频率,然后开始测试所有的RAM,并同时在屏幕上显示内存测试的进度。
内存测试通过之后,系统BIOS将开始检测系统中安装的一些标准硬件设备,包括硬盘、CD-ROM、串口、并口、软驱等设备,另外绝大多数较新版本的系统BIOS在这一过程中还要自动检测和设置内存的定时参数、硬盘参数和访问模式等。
标准设备检测完毕后,系统BIOS内部支持即插即用的代码将开始检测和配置系统中安装的即插即用设备,每找到一个设备之后,系统BIOS都会在屏幕上显示出设备的名称和型号等信息,同时为该设备分配中断、DMA通道和I/O端口等资源。
经过上面几步,所有硬件都已经检测配置完毕,多数系统BIOS会重新清屏并在屏幕上方显示出一个表格,其中概略地列出了系统中安装的各种标准硬件设备,以及它们使用的资源和一些相关工作参数。
接下来系统BIOS将根据CMOS配置更新ESCD(Extended System Configuration Data,扩展系统配置数据),ESCD是系统BIOS用来与操作系统交换硬件配置信息的一种手段。通常ESCD数据只在系统硬件配置发生改变后才会更新,所以不是每次启动机器时我们都能够看到“Update ESCD… Success”这样的信息。
(四) 加载操作系统
在POST成功之后,系统BIOS的启动代码将进行它的最后一项工作,即根据用户指定的启动顺序从软盘、硬盘或光驱启动,定位并加载操作系统文件。首先计算机查找两个操作系统文件:Io.sys和Msdos.sys。如果这两个文件不存在,引导过程会显示如下信息:“Non-system disk or disk error”或者“Invalid system disk”。
提示:如果设定的启动顺序是先软盘后硬盘,出现上述提示时要检查一下软驱中是否放的是系统盘(包含上述系统文件)。如果不是系统盘,可将软盘取出,在按任意键后,计算机将从下一个驱动器(硬盘)查找系统文件。
然后,微处理器将试图加载另外一个操作系统文件Command.com。如果加载失败(Command.com文件不存在或版本不对),会出现故障信息:“Bad or missing command interpreter”,而且你发出的所有命令计算机都无法执行,因为Command.com是专门用来解释这些命令的。
(五) 检查配置文件并定制操作系统的运行环境
在引导过程初期,计算机通过检查CMOS中的信息对硬件作初始化等工作。但具
体到不同的操作系统中,计算机还需要更多的配置信息来正确使用所有的设备并创建个性化的运行环境。
我们以DOS和Windows两种常用的PC操作系统为例,在DOS中我们常通过创建并编辑Autoexec.bat文件实现开机后自动执行某些命令,比如设置硬盘缓冲区大小、自动启动汉字环境等;在另一个文件Config.sys中可以加载鼠标、光驱、声卡等设备的DOS驱动程序等,使在DOS中可以使用这些设备。在Windows中对运行环境进行配置的方法更多,比如修改注册表,编辑System.ini、Win.ini等系统配置文件,或将希望启动完Windows后立即执行的内容放入Windows的启动(Startup)组中。
(六) 准备接收命令和数据
当计算机准备好接收命令时就结束了引导过程。通常在引导结束后,计算机会显示操作系统的屏幕或提示符。如果你使用的是Windows,那么就会看到Windows的桌面;如果使用的是DOS,就会看到操作系统提示符(如C:\>;A:\>等)。
上面介绍的整个过程便是计算机在打开电源开关(或按Reset键)进行冷启动时所要完成的引导工作。如果我们在DOS下按Ctrl+Alt+Del组合键(或从Windows中选择重新启动计算机)来进行热启动,那么POST过程将被跳过去,另外检测CPU和内存测试也不会再进行。我们可以看到,无论是冷启动还是热启动,系统BIOS都一次又一次地重复进行着这些我们平时并不太注意的事情,然而正是这些单调的步骤为我们能够正常使用电脑提供了基础。
目录
1、预引导(Pre-Boot)阶段
2、引导阶段
3、加载内核阶段
4、初始化内核阶段
5、登陆
一、预引导阶段 在按下计算机电源使计算机启动,
并且在Windows XP操作系统启动之前这段时间,
我们称之为预引导(Pre-Boot)阶段,
在这个阶段里,计算机首先运行Power On Self Test(POST),
POST检测系统的总内存以及其他硬件设备的现状。
如果计算机系统的BIOS(基础输入/输出系统)是即插即用的,
那么计算机硬件设备将经过检验以及完成配置。
计算机的基础输入/输出系统(BIOS)定位计算机的引导设备,
然后MBR(Master Boot Record)被加载并运行。
在预引导阶段,计算机要加载Windows XP的NTLDR文件。
二、引导阶段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的结果。
三、加载内核阶段 在加载内核阶段,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传递控制给内核,初始化内核阶段就开始了。
四、初始化内核阶段 在初始化内核阶段开始的时候,
彩色的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进程,
初始化内核完毕。
五、登陆 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,完成这一步骤后,
系统才意味着已经成功引导了。