Chinaunix首页 | 论坛 | 博客
  • 博客访问: 669866
  • 博文数量: 134
  • 博客积分: 3158
  • 博客等级: 中校
  • 技术积分: 1617
  • 用 户 组: 普通用户
  • 注册时间: 2008-03-30 22:36
文章分类

全部博文(134)

文章存档

2012年(2)

2011年(28)

2010年(68)

2009年(35)

2008年(1)

我的朋友

分类:

2009-07-11 09:01:31

★★★计算机启动过程详解
打开电源启动机器几乎是电脑爱好者每天必做的事情,面对屏幕上出现的一幅幅启动画面,我们一点儿也不会感到陌生,但是,计算机在显示这些启动画面时都做了些什么工作呢?相信有的朋友还不是很清楚,本文就来介绍一下从打开电源到出现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处。
  好了,下面我们就来仔细看看计算机的启动过程吧。
  第一步: 当我们按下电源开关时,电源就开始向主板和其它设备供电,此时电压还不太稳定,主板上的控制芯片组会向CPU发出并保持一个RESET(重置)信号,让CPU内部自动恢复到初始状态,但CPU在此刻不会马上执行指令。当芯片组检测到电源已经开始稳定供电了(当然从不稳定到稳定的过程只是一瞬间的事情),它便撤去RESET信号(如果是手工按下计算机面板上的Reset按钮来重启机器,那么松开该按钮时芯片组就会撤去RESET信号),CPU马上就从地址FFFF0H处开始执行指令,从前面的介绍可知,这个地址实际上在系统BIOS的地址范围内,无论是Award BIOS还是AMI BIOS,放在这里的只是一条跳转指令,跳到系统BIOS中真正的启动代码处。
  第二步: 系统BIOS的启动代码首先要做的事情就是进行POST(Power-On Self Test,加电后自检),POST的主要任务是检测系统中一些关键设备是否存在和能否正常工作,例如内存和显卡等设备。由于POST是最早进行的检测过程,此时显卡还没有初始化,如果系统BIOS在进行POST的过程中发现了一些致命错误,例如没有找到内存或者内存有问题(此时只会检查640K常规内存),那么系统BIOS就会直接控制喇叭发声来报告错误,声音的长短和次数代表了错误的类型。在正常情况下,POST过程进行得非常快,我们几乎无法感觉到它的存在,POST结束之后就会调用其它代码来进行更完整的硬件检测。
  第三步: 接下来系统BIOS将查找显卡的BIOS,前面说过,存放显卡BIOS的ROM芯片的起始地址通常设在C0000H处,系统BIOS在这个地方找到显卡BIOS之后就调用它的初始化代码,由显卡BIOS来初始化显卡,此时多数显卡都会在屏幕上显示出一些初始化信息,介绍生产厂商、图形芯片类型等内容,不过这个画面几乎是一闪而过。系统BIOS接着会查找其它设备的BIOS程序,找到之后同样要调用这些BIOS内部的初始化代码来初始化相关的设备。
  第四步: 查找完所有其它设备的BIOS之后,系统BIOS将显示出它自己的启动画面,其中包括有系统BIOS的类型、序列号和版本号等内容。
  第五步: 接着系统BIOS将检测和显示CPU的类型和工作频率,然后开始测试所有的RAM,并同时在屏幕上显示内存测试的进度,我们可以在CMOS设置中自行决定使用简单耗时少或者详细耗时多的测试方式。
  第六步: 内存测试通过之后,系统BIOS将开始检测系统中安装的一些标准硬件设备,包括硬盘、CD-ROM、串口、并口、软驱等设备,另外绝大多数较新版本的系统BIOS在这一过程中还要自动检测和设置内存的定时参数、硬盘参数和访问模式等。
  第七步: 标准设备检测完毕后,系统BIOS内部的支持即插即用的代码将开始检测和配置系统中安装的即插即用设备,每找到一个设备之后,系统BIOS都会在屏幕上显示出设备的名称和型号等信息,同时为该设备分配中断、DMA通道和I/O端口等资源。
  第八步: 到这一步为止,所有硬件都已经检测配置完毕了,多数系统BIOS会重新清屏并在屏幕上方显示出一个表格,其中概略地列出了系统中安装的各种标准硬件设备,以及它们使用的资源和一些相关工作参数。
  第九步: 接下来系统BIOS将更新ESCD(Extended System Configuration Data,扩展系统配置数据)。ESCD是系统BIOS用来与*作系统交换硬件配置信息的一种手段,这些数据被存放在CMOS(一小块特殊的RAM,由主板上的电池来供电)之中。通常ESCD数据只在系统硬件配置发生改变后才会更新,所以不是每次启动机器时我们都能够看到“Update ESCD… Success”这样的信息,不过,某些主板的系统BIOS在保存ESCD数据时使用了与Windows 9x不相同的数据格式,于是Windows 9x在它自己的启动过程中会把ESCD数据修改成自己的格式,但在下一次启动机器时,即使硬件配置没有发生改变,系统BIOS也会把ESCD的数据格式改回来,如此循环,将会导致在每次启动机器时,系统BIOS都要更新一遍ESCD,这就是为什么有些机器在每次启动时都会显示出相关信息的原因。
  第十步: ESCD更新完毕后,系统BIOS的启动代码将进行它的最后一项工作,即根据用户指定的启动顺序从软盘、硬盘或光驱启动。以从C盘启动为例,系统BIOS将读取并执行硬盘上的主引导记录,主引导记录接着从分区表中找到第一个活动分区,然后读取并执行这个活动分区的分区引导记录,而分区引导记录将负责读取并执行IO.SYS,这是DOS和Windows 9x最基本的系统文件。Windows 9x的IO.SYS首先要初始化一些重要的系统数据,然后就显示出我们熟悉的蓝天白云,在这幅画面之下,Windows将继续进行DOS部分和GUI(图形用户界面)部分的引导和初始化工作。
  如果系统之中安装有引导多种*作系统的工具软件,通常主引导记录将被替换成该软件的引导代码,这些代码将允许用户选择一种*作系统,然后读取并执行该*作系统的基本引导代码(DOS和Windows的基本引导代码就是分区引导记录)。   上面介绍的便是计算机在打开电源开关(或按Reset键)进行冷启动时所要完成的各种初始化工作,如果我们在DOS下按Ctrl+Alt+Del组合键(或从Windows中选择重新启动计算机)来进行热启动,那么POST过程将被跳过去,直接从第三步开始,另外第五步的检测CPU和内存测试也不会再进行。我们可以看到,无论是冷启动还是热启动,系统BIOS都一次又一次地重复进行着这些我们平时并不太注意的事情,然而正是这些单调的硬件检测步骤为我们能够正常使用电脑提供了基础。
现在市场上主流的品牌机随机安装的*作系统一般为Windows XP,但是,部分用户可能仍然对Windows 98、Windows ME或Windows 2000等*作系统情有独钟,希望能在不破坏原*作系统的前提下,再安装一下以上*作系统。按常规来说,如不使用第三方的软件,我们在安装微软的Windows系列*作系统时,应该按照从低版本到高版本的顺序来依次安装;如果使用第三方的软件,又会涉及到所使用的软件的版权及用法问题,对一般用户来说显然是不太合适的。其实,按我们在本文提供的方法,不使用第三方的任何软件也能实现*作系统反着装,而且十分简单!
例如我的联想品牌机,硬盘的C区安装Windows XP家庭版,C区的文件格式为FAT 32,其它分区的文件系统也是FAT 32。使用本文的办法来安装Windows 98,C区和安装Windows 98的分区的文件系统均需要转化为FAT 32,否则需要第三方的启动软件。当然,如果文件格式为NTFS,我们可以使用“Partition Magic”这款软件来将它无损转换为FAT 32。
准备:支持光驱启动的Windows 98/ME启动软盘;DEBUG.EXE文件(可从Windows\Command文件夹中拷贝到启动软盘,或从EBD.CAB中解压缩出来)。
步骤:
第一部分:
安装Windows 98/ME*作系统
1.将Windows 98/ME的安装光盘放入光驱; 2.使用制作好的启动盘来启动电脑;
3.按照正常的安装Windows 98/ME的方法来安装*作系统;只是不要将Windows 98/ME安装在Windows XP所在的分区;
4.安装好之后,将电脑启动到Windows 98/ME*作系统。
第二部分:
修改“BOOTSECT.DOS”文件
按照以上方法安装Windows 98/ME*作系统之后,会修改Windows XP所必需的启动文件,我们需要对“BOOTSECT.DOS”文件进行修改以修复它的启动文件。
1.打开“记事本”或其它的文本编辑软件来制作“READ.SCR”(文件名可以更改),内容如下:
L 100 2 0 1
N C:\BOOTSECT.DOS
R BX
0
R CX
200
W
Q
2.将以上制作好的文件拷贝到启动盘中;
3.用启动盘启动电脑到DOS方式;
4.修改“BOOTSECT.DOS”的文件属性,使用以下命令:
ATTRIB C:\BOOTSECT.DOS -S -H -R
5.在命令提示符下输入:DEBUG
  
第三部分:
修复Windows XP
1.修改BIOS中的启动选项,使电脑能从光驱启动;也可以使用刚才制作好的启动盘来启动电脑,再在命令提示下输入f:\i386\winnnt.exe(f为光驱的盘符)来运行安装指令;
2.在安装Windows XP时,我们要选择“修复”项,以修复硬盘中已安装的*作系统;
3.选择需要登录的*作系统,通常为“1”,键入“1”,并输入管理员口令(安装时所设定的,安装Windows XP家庭版的联想品牌机的用户只需要按回车键即可);
4.在命令提示符下键入“FIXBOOT”,以修复Windows XP的启动文件;
5.拿出光驱中的Windows XP安装光盘,重新启动电脑,并在BIOS修改启动选项,将它设置为从硬盘启动。
现在,你就可以看到Windows XP的启动菜单了,并能选择所需要进入的*作系统。重新启动电脑之后,我们就可以选择需要启动的*作系统了。是不是很简单?
第四部分:
WinXP下安装Win2000
在安装好Windows XP之后,再安装Windows 2000比安装98或ME要简单得多。本文所说的方法也不用第三方的软件,而且可以在FAT32 或NTFS的文件格式上进行*作。
1.首先,打开“控制面板”,选择“文件夹选项”并双击,在“文件夹选项”窗口中选择“查看”,在“高级设置”中将“隐藏受保护的*作系统文件”前的“√”去掉,以显示我们所需要的两个系统文件:“NTLDR”和“NTDETECT.COM”;
2.将以上两个文件拷贝到一张软盘中;
3.修改BIOS中的启动选项以从光盘启动电脑,并运行Windows 2000的安装*作程序;
4.按正常方法安装Windows 2000;
5.安装完成后,将电脑启动到Windows 2000;
6.将我们拷贝到软盘中的以上两个文件拷贝到C区根目录;如果系统提示不能拷贝,用户需要修改以上两个文件的属性,去掉它们的“只读”和“隐藏”等属性。
说明:我们这儿所以这样做是因为Win XP版本的“NTLDR”和“NTDETECT.COM”支持启动Windows 2000,但是后者并不支持启动到前者,所以我们需要进行以上*作。
A.覆盖安装98后多系统引导菜单丢失的解决方法:
用XP的启动光盘启动计算机,在屏幕上出现“Windows XP Professional 安装程序”信息时按下“R”键进入“恢复控制台”。提示“要登录到哪个Windows安装?”,根据自己的需要选择,一般选1输入管理员密码就进入Windows XP“恢复控制台”了。执行“fixboot C:”,
并在接下来的确认问题中选“Y”,“恢复控制台”会提示一段信息,输入“Exit”重启计算机,启动菜单就恢复了。
B.格式化C盘重装98后多系统引导菜单丢失的解决方法:
前面已经说过在卸载或重装系统时禁用格式化C盘,不过犯这种错误的人不在少数。下面就以格式化C盘重装98后多系统引导菜单丢失为例来说说补救方法。
a.ntldr和ntdetect的恢复
ntldr和ntdetect文件在2000/XP的安装光盘的i386目录下,启动98将这两个文件拷贝到C盘根目录下。
b.Bootsect.dos的生成
先在98下执行“开始”——“关闭系统”——“重新启动计算机到MS-DOS”,然后打开debug,执行以下指令后,Bootsect.dos文件就生成了:
-NC:\bootsect.dos
-L 100 2 0 1
-rcx
:200
-w
-q
c.生成Boot.ini文件
生成Boot.ini文件的语法对大部分普通用户来说比较难懂(我自己也是一片糊涂帐),不过有个简单的方法,就是用2000/XP的“恢复控制台”生成。
用XP的启动光盘启动计算机,在屏幕上出现“Windows XP Professional 安装程序”信息时按下“R”键进入“恢复控制台”。提示“要登录到哪个Windows安装?”,根据自己的需要选择,一般选1输入管理员密码就进入Windows XP“恢复控制台”了。
输入Bootcfg/scan扫描所有的2000/XP安装程序,看是否符合自己的Windows系统安装。
Bootcfg扫描无误后,就要执行bootcfg/rebuild重建Boot.ini文件,具体*作步骤根据提示*作完成。
重启后2000/XP已经可以引导,但没有98的启动选项,还需自己添加。启动到XP,打开“C:\ Boot.ini”文件,在文件最后添加一行:C:\ =“Microsoft Windows 98 Second Edition”。重新启动计算机即可。
5.卸载2000/XP后遗留文件夹的访问方法
这也是一个经常遇到的问题,在卸载某一个2000/XP前未将该系统加密的文件解密造成无法访问。而且无论是用管理员用户登录,还是创建一个与原来同名的用户,甚至重新安装一个与卸载前一模一样的系统并设置一个与以前同名的用户,系统仍然是拒绝用户的访问请求。
其实解决这个后遗症的做法并不复杂,假设不能访问的文件夹为:E:\玄天尊的写真集
a.以管理员账户登录,选择不能访问的文件夹的“属性”——“安全”选项卡。此时列表中一般没有当前用户的名称。
b.选择“安全”——“高级”——“所有者”,此时默认的“将所有者更改为”列表中就有两个用户,一个是系统默认的Administraror,另一个是具有管理员权限的账户。比如当前登录的账户为Administraror,则选中列表中的Administraror,然后选中下面的“替换子容器及对象的所有者”,按“确定”后,系统提示:您没有阅读目录\??\ E:\玄天尊的写真集 中内容的权限。是否用“完全控制”替换目录的权限?如果选择“是”按钮,所有权限都将被替换。
选择“是”按钮,现在用户就可以对该文件夹进行访问和修改了。
XP修复安装的具体步骤了,步骤如下:
当屏幕显示Press any key to boot from CD(请按任意键开始从光盘执行引导)信息时, 则应按下任意键, 以便从Windows XP光盘重新引导系统。当您看到屏幕显示To setup Windows XP now(现在开始安装Windows XP)时, 请按下ENTER(回车)键, 然后, 当Welcome to Setup(欢迎安装)屏幕出现时, 再次按下ENTER(回车)键。请不要选择按下R键, 因为这样做会调用Recovery Console(恢复控制台)。
在Windows XP Licensing Agreement(Windows XP许可协议)屏幕上, 按下F8键表示接受许可协议。
请务必使您当前所安装的Windows XP版本在框内处于选中状态, 然后, 按R键开始对Windows XP进行修复。依照屏幕提示完成Setup(安装)*作
WinXP之后如何安装Win2000
这种方法只可应用于 FAT32 格式的硬盘上.
安装 Windows 2000
1) 用一张 Win98\Me 启动盘(支持光驱)启动你的电脑。
2) 将 Windows 2000 CD 放入你的光驱中。
3) 在 A: 提示符下输入 X:\I386\WINNT.EXE 这里 X: 是你的光驱盘符。
4) 下面开始安装 Windows 2000 到非 Windows XP 的安装分区中。
5) 安装完毕之后,在 Windows 2000 中重启电脑。
修复 Windows XP 引导信息
用你的 Windows XP CD 启动电脑。当到达 Setup or Repair(安装与修复)步骤时,选择修复。在修复控制台中,输入如下内容:
1) FIXBOOT, answer Yes
2) CD
3) ATTRIB -H NTLDR
4) ATTRIB -S NTLDR
5) ATTRIB -R NTLDR
6) ATTRIB -H NTDETECT.COM
7) ATTRIB -S NTDETECT.COM
ATTRIB -R NTDETECT.COM
9) COPY X:I386NTLDR C:
10) COPY X:I386NTDETECT.COM C:
X 是你光驱的盘符。
备份WinXP双启动菜单
双启动正常时,就备份C盘这几个文件(有的是隐藏和系统属性的。),以后只要只要用这些文件拷到C盘下即可恢复。
NTDETECT.COM
ntldr
MSDOS.SYS
IO.SYS
BOOTSECT.DOS
bootfont.bin
BOOT.INI
装三系统并存的教训
让Win98、Win2000和Linux三个*作系统并存。
  把原来没有装*作系统的两个FAT32分区的数据备份好后,就把这两个分区用《分区魔术师》分别转换成EXT2和SWAP格式。安装完成后,重新启动计算机,已经有Linux的双启动菜单(Linux/DOS)出现了。迫不及待地选Linux,终于进入了Linux系统,  体验了新鲜感后,还是回到原来的*作系统看看有何异样吧。重新启动计算机,选DOS,再选Win2000,不妙!怎么进入启动界面动了一下就没了反应?难道Win2000和Linux不能共存?看过了书,应该没这问题的啊。仔细想想,在Windows下面,系统是不认识Linux的分区,结果Windows启动的时候,因为不认得那两个Linux分区就,把硬盘编号改过来了。问题也就出来了,我的Win98原来装在了C盘,Win2000装在原来的G盘,把原来两个FAT32分区转过来后,那G盘就在Windows系统中变成了E盘了,所以就导致了Win2000启动不了。赶紧重新启动,选Win98试试怎么样。系统如想象一样顺利进入。
  现在明白了,Win2000不能启动,并不是系统出错,仅仅是引导出了问题,那就好办,只要把Windows的引导修复通过修改“boot.ini”文件来实现,修改方式如下:
  boot loader?
  timeout=5
  default=multi(0)disk(0)rdisk(0)partition(1)WINDOWS
  ?operating systems?
  multi(0)disk(0)rdisk(0)partition(1)WINDOWS="Microsoft Windows 98"/fastdetect /KERNEL=LOGOOS.EXE
  multi(0)disk(0)rdisk(0)partition(3)WINNT="Microsoft Windows 2000 Professional"/fastdetect
  问题也就解决了。
  提示:在multi(0)disk(0)rdisk(0)partition(X)中的partition(X)是指定第X分区,可以填入你的系统安装的分区对应的数字。                                                                                                                                                                   
阅读(856) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2010-08-05 18:59:45

BIOS启动的部分写的好详细.很不错.可是之后就写的不怎么样了.特别是对于多重系统的启动.文章是2009年写的.GRUB早就有了吧.用gurb能实现很多个系统的启动. 对于多重系统的启动.需要理解的只是系统引导记录(OBR) 从OBR开始就是真正属于操作系统启动的过程了.