2023年12月24日发(作者:)
计算机系统启动内幕
经常碰到有人问到计算机无法启动,好像还未到操作系统了,以及WINDOWS启动怎么慢,怎么提示找不到文件,或者蓝屏等关于WINDOWS启动的故障,我根据多年的实战经验,并查阅了微软的技术文档,从计算机启动的内幕分析它的启动过程。让用户对系统的启动有更深层更细致的了解。
首先,我将计算机系统的完整启动画了一张图,如下图所示,后面的讲解都是根据这个图示来完成了。
EFI BooTMgr
WinLoad
⑥NTOS
④引导扇区
⑨WinLogon
⑩⑤NTLDR
SMSS
CPU复位
③②
①
MBR
传统BIOS
⑾
LogonUI
USERINIT
SHELL Startup App
一、自检及初始化部分
⑦⑧CSRSS
Services LSASS
SvcHost
第1步:加电自检(Power On Self Test,简称POST),CPU复位。功能是检查电脑是否良好,通常完整的POST自检将包括对CPU,640K基本内存,1M以上的扩展内存,ROM,主板,CMOS存储器,串并口,显示卡,软硬盘子系统及键盘进行测试,一旦在自检中发现问题,系统将给出提示信息或鸣笛警告。自检中如发现有错误,将按两种情况处理:对于严重故障(致命性故障)则停机,此时由于各种
初始化操作还没完成,不能给出任何提示或信号;对于非严重故障则给出提示或声音报警信号,等待用户处理。
第2步:BIOS部分,系统初始化,包括创建中断向量、设置寄存器、对一些外部设备进行初始化和检测等,其中很重要的一部分是BIOS设置,主要是对硬件设置的一些参数,当电脑启动时会读取这些参数,并和实际硬件设置进行比较,如果不符合,会影响系统的启动。EFI(Extensible Firmware InterfaceI,可扩展固件接口)是由英特尔,一个主导个人电脑技术研发的公司推出的一种在未来的类PC的电脑系统中替代BIOS的升级方案,这里不做探究。)
引导程序,功能是引导WINDOWS或其他操作系统。BIOS先从软盘或硬盘的开始扇区读取主引导记录(MBR),如果没有找到,则会在显示器上显示没有引导设备,如果找到引导记录会把电脑的控制权转给主引导记录,由主引导记录找到分区引导记录,再由分区引导记录把操作系统装入电脑,BIOS的这部分任务就完成了。
二、 BIOS到操作系统的过渡部分:
第3步 :MBR(master boot reorder)(主引导记录)
期中 MBR存在于硬盘的0磁道的第一个扇区称,它的大小是512字节,而这个区域可以分为三个部分。第一部分为pre-boot区(预启动区),占446字节;第二部分是Partition
table区(分区表),占66个字节,该区相当于一个小程序,作用是判断哪个分区被标记为活动分区,然后去读取那个分区的启动区,并运行该区中的代码。第三个部分是结束代码标识(55AA)。如下图1所示:
图1
关于分区表(DPT)
在主引导区中,从地址BE开始,到FD结束为止的64个字节中的内容就是通常所说的分区表。分区表以80H或00H为开始标志,以55AAH为结束标志,每个分区占用16个字节,一个硬盘最多只能分成四个主分区,其中扩展分区也是一个主分区。随着硬盘容量的迅速扩大,引入的扩展分区可以不受四个主分区的限制,把硬盘分区数扩展到“Z”。
值得注意的是,MBR是由分区程序(例如DOS的)产生的,它也并不是以文件的形式存在的,而是由BIOS通过磁盘的定位来完成读写操作的。不同的操作系统可能这个扇区的内容代码是不相同,但是实现的功能只有一个,使其中的一个活动分区获得控制区,正常启动系统。MBR不随操作系统的不同而不同,意即不同的操作系统可能会存在相同的MBR,即使不同,MBR也不会夹带操作系统的性质。具有公共引导的特性。它实际上是让BIOS过渡到操作系统的中间部分。
如何是EFI方式,它会加载BOOTMGR,然后进行相应的启动。这里不作研究。
把上面二个步骤可以细化为以下十个步骤:
1. 开机
2. BIOS 加电自检( Power On Self Test --POST ),内存地址为0ffff:0000
3. 将硬盘第一个扇区(0 头0 道1 扇区, 也就是BootSector) 读入内存地址
0000:7c00 处.
4. 检查(WORD) 0000:7dfe 是否等于0xaa55, 若不等于,则转去尝试其他启动介质,
如果没有其他启动介质则显示"No ROM BASIC" 然后死机.
5. 跳转到0000:7c00 处执行MBR 中的程序.
6. MBR 首先将自己复制到0000:0600 处,然后继续执行.
7. 在主分区表中搜索标志为活动的分区.如果发现没有活动分区或有不止一个活动分
区, 则转停止.
8. 将活动分区的第一个扇区读入内存地址0000:7c00 处.
9. 检查(WORD) 0000:7dfe 是否等于0xaa55, 若不等于则显示"Missing Operating
System" 然后停止,或尝试软盘启动.
10. 跳转到0000:7c00 处继续执行特定系统的启动程序.
11. 启动系统...
以上步骤中2,3,4,5 步是由BIOS 的引导程序完成.6,7,8,9,10 步由MBR 中的引导程
序完成. 一般多系统引导程序 (如SmartFDISK, BootStar, PQBoot 等)都是将标准主引导记录替换成自己的引导程序, 在运行系统启动程序之前让用户选择要启动的分区. 而某些系统自带的多系统引导程序 (如lilo, NT Loader 等)则可以将自己的引导程序放在系统所处分区的第一个扇区中, 在Linux 中即为SuperBlock ( 其实SuperBlock 是两个扇区).
注: 以上各步骤中使用的是标准MBR, 其他多系统引导程序的引导过程与此不同.
三、操作系统部分(WINDOWS)
第4步:BOOT sector(分区引导记录)
在上面的MBR中,通过引导程序代码找到分区表中的活动分区的引导记录,并将控制权交给它。 BOOT sector 是活动分区的引导记录,存在于活动分区开始的第一个扇区,也不是以文件的形式存在,是由MBR中的第一部分程序来读取的。它是由操作系统在安装时初始化建立的。
Boot sector 即操作系统引导扇区,通常位于硬盘的0磁道1柱面1扇区(这是对于DOS来说的,对于那些以多重引导方式启动的系统则位于相应的主分区/扩展分区的第一个扇区),是操作系统可直接访问的第一个扇区,它也包括一个引导程序和一个被称为BPB(BIOS Parameter Block)的本分区参数记录表。其实每个逻辑分区都有一个Boot sector,其参数视分区的大小、操作系统的类别而有所不同。
引导程序的主要任务是根据操作系统安装时建立的初始化信息在当根目录中寻找系统文件ntIdr文件,如果存在,就把该文件读入内存,并移交控制权予该文件。(如果是VISTRA,则是WINLOAD文件)
第5步:NTLDR(NT BOOT LOADER)/WinLoad
在本步骤中,系统要用到的文件一共有:NTLDR、、、、、(可选的)、。这些文件在系统的根目录下以隐藏或系统文件的方式存在。
工作过程:
1、NTLDR将计算机微处理器从16位实模式转换为32位保护模式。在实模式中,系统为MS-DOS保留640kb内存,其余内存视为扩展内存,而在32位保护模式中,系统(Windows XP Professional)视所有内存为可用内存
2、启用CPU的内存分页机制,即文件。
3、检测硬盘类型,如果SCSI硬盘,则加载用于访问磁盘,否则使用INT
13访问硬盘。
4、如果发现系统根目录下有文件并且有效,那么NTLDR将读取的信息并恢复休眠以前的状态。这时它并不处理文件。
说明:是系统的休眠功能所占用的硬盘空间的文件(Windows 默认休眠功能是处于打开状态的),电脑处于休眠状态时,内存中的所有内容将保存到硬盘,并且电脑会被关闭。电脑在返回打开状态之后,关闭电脑时打开的所有程序和文档将全都还原到桌面。也就是说,当你让电脑进入休眠状态时,Windows 在关闭系统前将所有的内存内容写入文件。而后,当你重新打开电脑,操作系统使用把所有信息放回内存,电脑恢复到关闭前的状态。然而,Windows 在硬盘上留下了文件,即使这个文件不再需要了。
5、加载,选择操作系统。如果没有上述的文件,将读取文件,这时我们会看到操作系统选择的画面。如果用户按F8,进入操作系统的启动菜单选项。如果用户选择了DOS,则NTLDR将加载,这是供DOS使用的引导扇区副本。
6、加载硬件检测,即执行,将调用BIOS收集计算机硬件信息列表并保存到注册表HKEY_LOCAL_MACHINE下的hardware中,硬件检测完成后,进入配置选择阶段。如果计算机含有多个硬件配置文件列表,可以通过按上下按钮来选择。如果只有一个硬件配置文件,计算机不显示此屏幕而直接使用默认的配置文件加载Windows XP专业版
7、加载内核阶段
在加载内核阶段,ntldr加载注册表引导驱动程序,准备将系统控制权交给Windows XP内核的。。 接着ntldr加载硬件抽象层(),然后,系统继续加载HKEY_LOCAL_MACHINEsystem键,NTLDR读取select键来决定哪一个Control Set将被加载。控制集中包含设备的驱动程序以及需要加载的服务。NTLDR加载HKEY_下start键值为0的最底层设备驱动。当作为Control Set的镜像的Current Control Set被加载时,ntldr传递控制给内核,执行的入口函数,初始化内核阶段就开始了。
第6步:内核初始化()
在初始化内核阶段开始的时候,彩色的Windows XP的logo以及进度条显示在屏幕中央,在这个阶段,系统完成了启动的4项任务:
1、完成对象定义和和核心数据结构初始化,使用在硬件检测时收集到的数据来创建了HKEY_LOCAL_MACHINEHARDWARE键。
2、完成对象初始化和子系统启动,通过引用HKEY_LOCAL_MACHINEsystemCurrent的默认值复制Control Set来创建了Clone Control Set。Clone Control Set配置是计算机数据的备份,不包括启动中的改变,也不会被修改。
以上两个过程由随后生成的“system Idle Process”内核系统线程来完成。
3、 系统完成初始化以及加载设备驱动程序,内核初始化那些在加载内核阶段被加载的底层驱动程序,然后内核扫描HKEY_下start键值为1的设备驱动程序。这些设备驱动程序在加载的时候便完成初始化,如果有错误发生,内核使用ErrorControl键值来决定如何处理,值为3时,错误标志为危机/关键,系统初次遇到错误会以LastKnownGood Control Set重新启动,如果使用LastKnownGood Control Set启动仍然产生错误,系统报告启动失败,错误信息将被显示,系统停止启动;值为2时错误情况为严重,系统启动失败并且以LastKnownGood Control Set重新启动,如果系统启动已经在使用LastKnownGood值,它会忽略错误并且继续启动;当值是1的时候错误为普通,系统会产生一个错误信息,但是仍然会忽略这个错误并且继续启动;当值是0的时候忽略,系统不会显示任何错误信息而继续运行
4、Ntoskrnl创建佳话管理进程:Session Manager(),启动了Windows XP高
级子系统以及服务,Session Manager启动控制所有输入、输出设备以及访问显示器屏幕的Win32子系统以及Winlogon进程,初始化内核完毕。
第7步:文件
1.运行BootExecute中拽定程序,例如autochk,chkdsk等。
2.处理“Delaved,move/rename”命令。
3.初始化pagingfiles和其余的注册表项。
4.加载并初始化内核模式中的win32 子系统()
5.启动(win32子系统在用户模式的部分)
6.启动登陆系统
第9步:系统登陆()
启动Local Security Authority,同时Windows XP Professional欢迎屏幕或者登陆对话框显示,这时候,系统还可能在后台继续初始化刚才没有完成的驱动程序。
1.启动LSASS(本地安全管理组件)
2.加载LOGOUI组件,显示登陆对话框,等待用户登陆。LOGOUI组件可以进行二次开发,通过自己开发,可以进行基于指纹、声音等生物信息的登陆。默认LOGOUI组件是。
3.启动(后台服务,它会启动所有标识为自动启动的WIN32服务程序,这时我们会在任务管理器中看到很多的SVCHOST。
4、登陆成功,加载SHELL,显示桌面。
到此为止,整个WINDOWS启动完成。从上面的启动步骤来看,它实际上是控制权的逐步移交的过程:
MBR---BootSector—Ntldr—NtoSckrnl—Winlogon-shell
启动过程常见故障代码及分析:
从上面这个过程再来看看经常碰到的出错信息及相应措施。
在系统POST阶段,出现的错误提示有声音或字符信息,在网上有很多详细的资料可参考了。这里不再重复了。下面主要从要是从自检完后开始了。
1、 症状:BIOS自检完后黑屏,或者出现“Invalid Partition Table、Missing opreating
system、Error loading opreating”
原因:MBR已损坏,需要修复。
措施:从安装光盘引导后,进入到修复控制台,然后运行FIXMBR命令进行修复。
注意:经常在网上看到恢复MBR用FDISK/MBR,其实它只是重写了MBR第一部分程序代码和第三部分结束标志,而其中的分区表是无法重建的(如图1))。它是在开始进行分区时建立的。所以如果是这分区表数据坏了,是无法用FDISK/MBR恢复了。
如果之前有备份过MBR,可以恢复过来,如果没有备份,可以找一块有相同分区信息的硬盘(容量相同,分区相同)。把它的MBR恢复过来。如果找不到,但知道问题硬盘的分区情况,可以重新进行分区,切记要建立相同的分区信息,比如C区多大,D区多大等。当然最好另拿一个相同容量的硬盘来做了,然后再把建好的MBR恢复过去了。
2、症状:“A disk read error occurred, NTLDR is missing,NTLDR is compressed”
原因:BOOTSector损坏 ;或者在中的系统卷的设置有错,导致系统找不到NTLDR文件了;或者NTLDR文件本身损坏了。
措施:进入到修复控制台,然后运行FIXBOOT命令进行修复或者重新编辑文件,如果发现NTLDR丢失或损坏,从完整的系统COPY一个即可。
3、症状:“Windows could not start because of acomputer disk hardware configuation
problem”或者“could not read from the selected boot disk,check boot path and disk
hardware”
原因:文件损坏。
措施:进入到修复控制台,然后运行Bootcfg/rebulid ,系统可以根据现在磁盘信息生成一个新的有效的文件。
4、症状:Windows could not start because the following file is missing or corrupt;
Windows root> please re-install a copy of the above file.
或者蓝屏出现以下信息:
Stop:00000135 cunable to locate component This application has failed to start
because was not found,Re-installing the
原因:磁盘损坏或文件丢失、损坏
措施:进入到修复控制台,然后运行CHKDSK
在实际操作过程中,出现的问题比上面要多得多,关键是根据计算机系统的启动过程来逐步分析出错的原因,然后找到解决的方法。以上的分析还有不完善的地方,希望有兴趣的朋友参与进来,共同完善它,让我们对计算机系统的启动明明白白。在分析启动故障时会更加准确无误了。


发布评论