电脑从按下开关到显示桌面是很复杂的一个过程,下面我们就来聊聊关于电脑按电源键后亮一下就结束了?接下来我们就一起去了解一下吧!
电脑按电源键后亮一下就结束了
电脑从按下开关到显示桌面是很复杂的一个过程。
按下开关,主机电源的PS-ON信号就会被强制拉低,主电源开始启动工作,向主板送出 12V, 5V, 3.3V等主板正常工作所需要的电压。电扇开始运转,系统将电力供给到计算机中的各种设备,主板上的电源指示灯亮,并通电使鼠标亮起。
这时整个系统由BIOS控制,电压还不太稳定(几百毫秒),EC复位,芯片组(北桥)向CPU发送并保持一个重置(RESET)命令,使CPU初始化。
然后,芯片组(北桥)会等待电源发送一个POWER GOOD命令,电压稳定后,电源就会发出命令,芯片组会马上停止重置命令的发送,这时CPU会在BIOS中寻找一小段程序,从地址FFFF0H开始执行寻址指令。这个地址中会存储一条跳转指令,直接跳转到系统BIOS中真正的启动代码处,进行上电自检(POST,全称Power On Self Test)
POST检测系统中的一些关键设备是否存在和正常工作,例如CPU、内存、显卡、键鼠等等的硬件。由于POST是最早进行的检测过程,此时显卡还没有初始化,无法显示,如果系统BIOS在进行POST的过程中发现了一些致命错误,例如没有找到内存或者内存有问题,那么系统BIOS就会直接控制主板上的喇叭发声来报告错误。而如果一切正常,Award会响一声(短),而Ami不会响。在正常情况下,POST会进行的非常快,我们是难以感觉到这个过程的。
南北桥检测完后,系统BIOS会找到显卡BIOS,存放显卡BIOS的ROM地址在C0000H处,系统BIOS找到显卡BIOS之后调用它的代码,显卡初始化,显示屏上显示初始化信息,包括主板相关信息,主板的BIOS版本和编程日期等信息。该画面有时因为显示器反应慢的原因,我们无法看到。
但是一些品牌电脑启动后,屏幕往往只显示一个生产厂商的LOGO,而不显示电脑启动自检信息,这时一般可以按下TAB键,中断LOGO显示,而显示电脑自检信息。
系统BIOS接着会查找其他设备的BIOS程序,找到之后同样要调用这些BIOS内部的初始化代码来初始化相关的设备。
查找完所有其他设备的BIOS之后,系统BIOS将显示出它自己的启动画面,其中包括系统BIOS的类型、序列号和版本号等内容。然后检测和显示CPU的类型和工作频率,然后开始测试所有的RAM,并同时在屏幕上显示内存测试的进度。内存因为BIOS设置的原因,有的会从0开始一直扫描到最大内存。如果你的电脑在BIOS中设置了快速自检,就会跳过内存的完全检测。
内存测试通过之后,系统BIOS将开始检测系统中安装的一些标准硬件设备,包括硬盘、CD-ROM、串口、并口、软驱等设备,另外绝大多数较新版本的系统BIOS在这一过程中还要自动检测和设置内存的定时参数、硬盘参数和访问模式等。
标准设备检测完毕后,系统BIOS内部支持即插即用的代码将开始检测和配置系统中安装的即插即用设备,每找到一个设备之后,系统BIOS都会在屏幕上显示出设备的名称和型号等信息,同时为该设备分配中断、DMA通道和I/O端口等资源。
经过上面几步,所有硬件都已经检测配置完毕,多数系统BIOS会重新清屏并在屏幕上方显示出一个表格,其中概略地列出了系统中安装的各种标准硬件设备,以及它们使用的资源和一些相关工作参数。
接下来加载DMI数据, 在加载过程中,如果CMOS电池电压过低不足以保存配置数据时,或者因为配置数据有误,会出现错误提示,要按F1才能继续。然后系统BIOS将根据CMOS配置更新ESCD(Extended System Configuration Data,扩展系统配置数据),ESCD是系统BIOS用来与操作系统交换硬件配置信息的一种手段。通常ESCD数据只在系统硬件配置发生改变后才会更新,所以不是每次启动机器时我们都能够看到“Update ESCD… Success”这样的信息。
硬件自检完成后,BIOS把控制权转交给下一阶段的启动程序。按照顺序将控制权依次转移给列表中的存储设备并依次读取这个设备的第一个扇区,即第一个512字节,如果这512个字节的最后两个字节是0x55和0xAA,表明这个设备可以用于启动;如果不是,表明设备不能用于启动,控制权于是被转交给"启动顺序"中的下一个设备。
在硬启动时,计算机的控制权需转交给硬盘的某个分区,这里分成三种情况:
1、 情况A:卷引导记录
四个主分区里面,只有一个是激活的。计算机会读取这个分区的主引导记录(MBR)中对应相第一个字节是不是0x80,如果是,说眀已经激活。之后,计算机会读取激活分区的第一个扇区,叫做"卷引导记录"(VBR)。
"卷引导记录"告诉计算机操作系统在这个分区里的位置。然后,计算机就会加载操作系统了。
2、 情况B:扩展分区和逻辑分区
随着硬盘越来越大,四个主分区已经不够了,需要更多的分区。但是,分区表只有四项,因此规定有且仅有一个区可以被定义成"扩展分区"(Extended partition)。
所谓"扩展分区",就是指这个区里面又分成多个区。这种分区里面的分区,就叫做"逻辑分区"(logical partition)。
计算机先读取扩展分区的第一个扇区,叫做"扩展引导记录"(EBR)。它里面也包含一张64字节的分区表,但是最多只有两项(也就是两个逻辑分区)。
3、 情况C:启动管理器
在这种情况下,计算机读取"主引导记录"前面446字节的机器码之后,不再把控制权转交给某一个分区,而是运行事先安装的"启动管理器"(boot loader),由用户选择启动哪一个操作系统。这时会出现选择菜单。
计算机的作系统位置已经确定,进入硬盘启动模式选择。选择后开始进入硬件检测。
在硬件检测阶段中,ntdetect.com将收集计算机硬件信息列表并将列表返回到NTLDR,这样做的目的是便于以后将这些硬件信息加入到注册表HKEY_LOCAL_MACHINE下的hardware中。检测完毕后,开始加载内核。
在加载内核阶段,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. 对一些必要的文件进行改名,然后进入“欢迎使用”界面,系统文件无错误则正常进入桌面,系统文件有错误则报错蓝屏代码或直接自动重启。至此启动完毕。
,