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

首先嘛,开机对于大家来说也就是捅一下开机按钮,然后电脑开始嗡嗡叫,各种风扇转起来,显示器上显示了一个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

时间: 2024-08-07 04:04:19

电脑在开机的时候都做了些什么的相关文章

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

今天小编要跟大家分享的文章是关于Linux再按下开机键之后都做了什么?计算机开机是一个神秘的过程.我们只是按了开机键,就看到屏幕上的进度条或者一行行的输出,直到我们到达登录界面.然而,计算机开机又是个异常脆弱的过程,我们满心期望的登录界面可能并不会出现,而是一个命令行或者错误信息.了解计算机开机过程有助于我们修复开机可能出现的问题.下面我们就一起来看一看,Linux在按下开机键之后都做了哪些? Linux入门新手和正在Linux学习的小伙伴快来看一看吧,希望能够对大家有所帮助 ! <img sr

一张图告诉你广电总局这些年都做了些什么~

广电总局,那些年的禁令!国家新闻出版广电总局是国务院直属机构,我们最熟悉的莫过于电影开场时必然会出现的金色龙形长城标志.那么,一张图,让你看清广电总局这些年做了什么事…… 一张图告诉你广电总局这些年都做了些什么-,布布扣,bubuko.com

【dotnet跨平台】&amp;quot;dotnet restore&amp;quot;和&amp;quot;dotnet run&amp;quot;都做了些什么?

[dotnet跨平台]"dotnet restore"和"dotnet run"都做了些什么? 前言: 关于dotnet跨平台的相关内容.能够參考:跨平台.NET Core--微软开源方向 当中..net core基础库叫CoreFX:https://github.com/dotnet/corefx,.net core执行时叫CoreCLR:https://github.com/dotnet/coreCLR, asp.net core各组件库:https://git

转:黑客讲故事:攻下隔壁女生路由器后,我都做了些什么

路由器被蹭网后,我有被黑的风险吗?  Evi1m0,来自知道创宇,邪红色信息安全组织创始人 其实这个问题可以理解为:蹭网之后,能做些什么? 不少人的八卦心窥探欲还是很强烈的,强烈到让人恐惧.所以很多人喜欢看一些八卦文章,比如:如何优雅的窥探别人? 通常这样的文章很容易火起来,因为不少人都喜欢看而且百看不厌. 最近路由安全沸沸扬扬,可以翻阅我微信公众号历史文章查看关于路由安全的文章以及央视当时的采访.鉴于天时地利人和,最后我成功的在现实生活中上演了这样一场精彩好戏,为了满足众人的欲望,我就写成故事

disaster&mdash;&mdash;我都做了些什么啊!

当我意识到自己犯了错误的时候,为时已晚了. 首先,当业务需求和流程还没有明确的时候,不应该将技术的摊子迅速铺开.而且, 由于新项目的摊子迅速铺开,原有项目被迫严重延迟.这里面有业务的误导,但更多的是自己的误判. 其次,架构要为业务服务,而不能盲目听从技术的"欲望".接第一点来说,以目前已知的业务需求,技术方面的摊子完全没有必要铺这么大.这完全是自己出于对架构的追求而造成的问题. 而且这个问题由来已久了.以前同事就点过我有过度设计的毛病.现在变本加厉了. 第三,没有成本意识.同样接第一点

成功的MES项目,前期都做了些什么?

为了智能化发展的需要,实现精细化管理,提高生产管理信息化水平.降低生产成本,许多企业开始有选择的实施应用MES系统,但是,企业如何选择适合企业发展的MES请添加链接描述系统,在选型和实施过程中会遇到哪些问题,该如何避免?下面小编采用问答的模式来进行解答.Q:目前在国内,MES所具有的功能模块是否在企业中得到了很好的应用,还存在哪些不足,企业应该如何选择?A:MES大部分模块在企业得到了较好应用.但在离散制造行业,由于行业的特殊性,详细调度模块和实时数据采集模块的使用不尽人意,企业在实施时应采取人

看看这些大龄程序员都做了些什么

原文:http://zhuanlan.51cto.com/art/201905/596337.htm?utm_source=tuicool&utm_medium=referral 最近的朋友圈不断被996. 裁员.大龄程序员的出路等话题刷屏,我在想国外的大龄程序员情况如何呢? 对于普通的程序员,我也没有一手的资料,但是对于一些牛人,我在wikipedia上搜索了一些他们的发明和创造: Guido van Rossum 在35岁时创造了Python.James Gosling 在40岁创造了Jav

运行android工程时,eclispe都做了些什么呢

打包安装过程(Run as Android Application ) : 1. 生成apk文件. 1). 生成.dex文件. 2). 资源索引表的生成resources.arsc. 3). 准备未编译文件. 4). 清单文件AndroidMenifest.xml文件转换成二进制. 5). 使用debug.keystore对整个应用程序进行打包签名. 2. 加载apk文件到模拟器中. 把apk文件加载到/data/local/tmp/xxx.apk 3. 安装应用程序. 1). 把/data/l

Class.forName(String driverClassName)加载JDBC驱动程序时,底层都做了些什么???

参考链接: https://www.cnblogs.com/liuxianan/archive/2012/08/04/2623258.html Class.forName(“com.mysql.jdbc.Driver”)是 强制JVM将com.mysql.jdbc.Driver这个类加载入内存, 并将其注册到DriverManager类:在一个类加载入内存的时候,类中的静态初始化过程会执行,这样就完成了驱动程序的注册过程 然后根据DriverManager.getConnection(url,u