电脑从按下开关到显示桌面是很复杂的一个过程。
按下开关,系统将电力供给到计算机中的各种设备,主板上的指示灯亮,并通电使鼠标亮起。
这时整个系统由BIOS控制,电压还不太稳定,芯片组向CPU发送并保持一个重置命令,使CPU初始化。
时芯片组会等待电源发送一个POWER GOOD命令,电压稳定后,电源发出命令,芯片组会马上停止重置命令的发送,这时CPU会在BIOS中寻找一小段程序,从地址FFFF0H开始执行寻址指令。这个地址中会存储一条跳转指令,直接跳转到系统BIOS中真正的启动代码处,进行上电自检。
POT检测系统中的一些关键设备是否存在和正常工作,然后通过主板自带的扬声器报告系统是否正常,以及错误类型。详情请见:开机自检_百度百科。
然后系统BIOS会找到显卡BIOS,存放显卡BIOS的ROM地址在C0000H处,系统BIOS找到显卡BIOS之后调用它的代码,使显示屏上显示初始化信息,包括主板相关信息,主板的BIOS版本和编程日期等信息。系统BIOS接着会查找其他设备的BIOS程序,找到之后同样要调用这些BIOS内部的初始化代码来初始化相关的设备。系统BIOS接着会查找其他设备的BIOS程序,找到之后同样要调用这些BIOS内部的初始化代码来初始化相关的设备。
查找完所有其他设备的BIOS之后,系统BIOS将显示出它自己的启动画面,其中包括系统BIOS的类型、序列号和版本号等内容。然后检测和显示CPU的类型和工作频率,然后开始测试所有的RAM,并同时在屏幕上显示内存测试的进度。
内存测试通过之后,系统BIOS将开始检测系统中安装的一些标准硬件设备,包括硬盘、CD-ROM、串口、并口、软驱等设备,另外绝大多数较新版本的系统BIOS在这一过程中还要自动检测和设置内存的定时参数、硬盘参数和访问模式等。
标准设备检测完毕后,系统BIOS内部支持即插即用的代码将开始检测和配置系统中安装的即插即用设备,每找到一个设备之后,系统BIOS都会在屏幕上显示出设备的名称和型号等信息,同时为该设备分配中断、DMA通道和I/O端口等资源。
经过上面几步,所有硬件都已经检测配置完毕,多数系统BIOS会重新清屏并在屏幕上方显示出一个表格,其中概略地列出了系统中安装的各种标准硬件设备,以及它们使用的资源和一些相关工作参数。
硬件自检完成后,BIOS把控制权转交给下一阶段的启动程序。按照顺序将控制权依次转移给列表中的存储设备并依次读取这个设备的第一个扇区,即第一个512字节,如果这512个字节的最后两个字节是0x55和0xAA,表明这个设备可以用于启动;如果不是,表明设备不能用于启动,控制权于是被转交给\”启动顺序\”中的下一个设备。
在硬启动时,计算机的控制权需转交给硬盘的某个分区,这里分成三种情况:
1、 情况A:卷引导记录
四个主分区里面,只有一个是激活的。计算机会读取激活分区的第一个扇区,叫做\”卷引导记录\”(VBR)。
\”卷引导记录\”告诉计算机操作系统在这个分区里的位置。然后,计算机就会加载操作系统了。
2、 情B:扩展分区和逻辑分区
随着硬盘越来越大,四个主分区已经不够了,需要更多的分区。但是,分区表只有四项,因此规定有且仅有一个区可以被定义成\”扩展分区\”(Extended partition)。
所谓\”扩展分区\”,就是指这个区里面又分成多个区。这种分区里面的分区,就叫做\”逻辑分区\”(logical partition)。
计算机先读取扩展分区的第一个扇区,叫做\”扩展引导记录\”(EBR)。它里面也包含一张64字节的分区表,但是最多只有两项(也就是两个逻辑分区)。
3、 情况C:启动管理器
在这种情况下,计算机读取\”主引导记录\”前面446字节的机器码之后,不再把控制权转交给某一个分区,而是运行事先安装的\”启动管理器\”(boot loader),由用户选择启动哪一个操作系统。这时会出现选择菜单。
计算机的作系统位置已经确定,开始进行内核加载。
在加载内核阶段,ntldr加载称为Windows 内核的ntokrnl.exe。系统加载了Windows 内核但是没有将它初始化。接着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以及进度条显示在屏幕中央。
如果是Win7话会显示一个由64张图片组成的一小段视频,真实效果可见第一张图片。
在这个阶段,系完成了启动的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 高级子系统以及服务,Session Manager启动控制所有输入、输出设备以及访问显示器屏幕的Win32子系统以及Winlogon进程,初始化内核完毕。
驱动程序加载完成后,Windows做如下设置:1. 创建系统环境变量2. 启动 win32.sys ,这个是Windows子系统的内核模式部分。3. 启动 csrss.exe,这个是Windows子系统的用户模式部分。4. 启动 winlogon.exe5. 创建虚拟内存页面文件6. 对一些必要的文件进行改名,然后进入“欢迎使用”界面,最后进入桌面。至此启动完毕。