电脑在开机的时候都做了些什么

Posted 朝闻道

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了电脑在开机的时候都做了些什么相关的知识,希望对你有一定的参考价值。

首先嘛,开机对于大家来说也就是捅一下开机按钮,然后电脑开始嗡嗡叫,各种风扇转起来,显示器上显示了一个LOGO,最后就看到了Win7的启动动画。这个过程中,电脑详细都做了些什么呢?我在这里详细的说一说我的了解。(注意这只是我的了解,我还是很严谨的哦) 

1、开机之后,主板的芯片组会给CPU发送一个RESET信号,CPU会挂起,并不马上执行指令(CS:EIP=0xFFFF:0x0000) 
这个时候CPU完成初始化,内部恢复到初始状态。 
等芯片组检测到电源已经稳定供电了,芯片组就撤去RESET信号,CPU从0xFFFF:0x0000开始执行。 

这个时候电脑内存地址从0xC0000到0xFFFFF都是ROM-Bios的地址。 
0xFFFF:0x0000有什么呢?有一条远跳转指令,转入BIOS的初始化程序。

2、BIOS开始进行POST(Power-On Self Test,电脑自检,检查CPU,风扇等)一旦出错就蜂鸣报警。因为没有初始化显卡,所以无法打印信息到屏幕,只好蜂鸣报警。POST是很快的,所以一般来说这个过程也就是一瞬间的事。

3、完成POST之后,BIOS开始初始化显卡。BIOS先查找显卡BIOS,然后调用显卡BIOS使其进行自动初始化。这个时候显卡BIOS会打印一些文本,比如显卡的LOGO之类的,不过也通常也是一闪而过。BIOS还会再查找其他设备的BIOS,并调用其进行初始化。

4、初始化各个硬件之后,BIOS打印出了自己的信息,LOGO,BIOS类型等。大家也是在这个时候看到屏幕上显示了一句话:“请按F2或DEL进入设置,按F12设置引导菜单”(原文一般是“Press F2 or DEL to enter SETUP, or Press F12 to setup boot priority.”)不过不同的BIOS、主板打印的信息不同,因此键位也不一样,可能是F10进入设置,或F1设置引导菜单等。装系统的时候大家可以搓键盘,就像搓衣板一样,就搓F1到F12(同时也试着搓Enter、Del),这个时候就能快速进入设置了。

5、BIOS开始检查内存,有些BIOS会显示检查的进度。检查内存的目的主要是为了获取内存的大小。

6、检查完内存之后,BIOS开始检查电脑的一些标准设备,比如硬盘、CD-ROM、软驱、串口(COM)、并口(LPT打印机)等设备。

7、BIOS开始检查即插即用设备(USB等),同时为它分配DMA通道、IO口等。

8、BIOS开始进行扩展参数的设置。现在的主板比较屌,会有很多扩展功能,比如超频,开核等各种参数。 

初始化完了以后内存的分配是这样的: 

0x00000-0x003FF:中断向量表。有关中断向量表每个向量的详细信息请看这里:http://www.ctyme.com/intr/int.htm 
0x00400-0x005FF:BIOS数据区。有关BIOS数据区的详细信息请参阅《PC技术内幕》 
0x00600-0x07BFF:自由内存区。引导程序可自由使用。 
0x07C00-0x07DFF:引导程序扇区的载入位置 
0x07E00-0x9FFFF:自由内存区。引导程序可自由使用。 
0xA0000-0xAFFFF:图形模式显存 
0xB0000-0xB7FFF:单色文本模式显存 
0xB8000-0xBFFFF:彩色文本模式显存 
0xC0000-0xFFFFF:BIOS引导代码、自检代码、中断处理程序等 
0x100000以上:高位内存。开启A20地址线之后才能访问 

BIOS完成上面的几个初始化步骤之后,开始按照用户指定的引导菜单开始引导。所谓的引导就是从光盘、软盘、硬盘中找操作系统。
看起来挺屌,但是其实也就是从硬盘、软盘等读取第一个扇区,检查这个扇区的最后两个字节是不是0x55,0xAA(也就是0xAA55)如果是,就判定为“我找到操作系统了”于是跳转到引导扇区部分0x0000:0x7C00开始运行。 

硬盘的第一个扇区是MBR,主引导扇区。软盘的第一个扇区是DBR,磁盘系统引导扇区。

https://www.0xaa55.com/forum.php?mod=viewthread&tid=59&extra=page%3D15

以上是关于电脑在开机的时候都做了些什么的主要内容,如果未能解决你的问题,请参考以下文章

Linux在按下开机键之后都做了什么?

电脑开机加载先后顺序

centos启动流程

软件安装过程

从架构演进的角度聊聊Spring Cloud都做了些什么

24Linux启动流程和grub详解