‍‍

‍‍

作者 | 轩辕之风O

来源 | 编程技术宇宙(ID:xuanyuancoding)

来电了

“来电了,来电了,起来干活了。”一大早,我还在睡梦中就被吵醒了。

我是CPU一号车间的阿Q,好久不见,不知道大家有没有想我呢?

“今天不是星期六吗?怎么还要工作”,我有些不开心,本以为能睡一个懒觉,谁知道大周末的程序员还开机,这是来加班了吗。

一边抱怨,一边还得赶紧起来干活。

来到我所在的工作车间,提取指令的小A、分析指令的小胖和负责结果回写的老K都已经到了,就差执行指令的我了。

我们几个各就各位,做起了准备工作。

“小A,报告一下各个寄存器的值”,我嘱咐小A,这是我们每天开始工作前必做的检查项。

每次一通电,咱们的电路就会启动自检工作,把所有的寄存器全部重置,如果哪里有异常的话,就会把错误记录到EAX寄存器中,如果发现EAX的值不是0,那可就大事不好了。

“报告,寄存器已确认:”

EAX,EBX, ECX, ESI, EDI, EBP, ESP: 0x00000000

EFLAGS: 0x00000002

CS: 0xF000

EIP: 0xFFF0

······

看起来没什么问题,尤其是CS和IP这两个寄存器,决定着一会儿该从哪里开始执行代码呢。

我们是一个64位的CPU,平时都是工作在保护模式下,使用虚拟地址来访问内存,由厂里的内存管理单元MMU负责给转换成真实的物理地址。

不过在刚刚开机的这会儿功夫,虚拟地址翻译所需要的页目录、页表这些信息都还没准备好,MMU还没法工作,这时候我们只能使用16位的寄存器,工作在实地址模式下,使用段+基址的方式来跟内存打交道,最多只能使用1MB的内存空间,实在是有点局促。

开始执行

“大家都准备好了吗,打起精神来,要准备开始今天的工作了哦!”

“Q哥,这刚刚通电,内存条那家伙应该还是一片空白吧,咱们要去执行哪里的指令啊?”,小A问到。

“这你不用担心,在主板上,咱们CPU隔壁不远处有个叫BIOS的伙计,是一个ROM芯片,咱们已经跟他约定好了,一通电他就映射到地址空间中,你尽管按照CS:IP(0xF000:0xFFF0)指向的地方开始取指令就对了,他会安排好的。”

“原来是这样”,小A点了点头,似懂非懂的样子。

正式开始干活了,小A熟练的从F000:FFF0处,也就是0xFFFF0处取到了第一条指令:jmp xxxx

好家伙,上来就是一个大跳转,我们一下来到了BIOS那家伙地盘的中央,开始执行他准备的程序了。

接下来执行的这一堆指令我已经做过无数次了,对主板上各单位进行检测,看看有没有异常情况,还有初始化我们工作需要的中断向量表等等,我早已经轻车熟路了。

“哥几个忙着呐”,我们正忙的热火朝天,发现有人在门口围观,回头看去,原来是隔壁二号车间、五号车间、八号车间的几个家伙。

“你们几个这么闲,要不来帮我们干会儿活?”

“哎,你想得美,你们一号核是引导处理器(BSP),待遇比我们好,这开机启动的活儿我们怎么能抢呢?”,二号车间的虎子阴阳怪气的说到。

真是羡慕他们,比我们1号车间上班时间晚,每次都可以多睡会儿。

MBR

我继续执行BIOS中的代码,一切检查完毕,没什么异常,要准备启动操作系统大佬了。

接下来,我检查了BIOS中配置的启动顺序,排在第一位的是硬盘兄弟。

于是我把硬盘老哥第0盘第0道第1扇区的内容读取到了内存中的0x7C00位置,他们把这玩意叫做主引导记录MBR,一共512个字节。

听硬盘那哥们说,这是操作系统老大在安装的时候,写到他那里的。

他还告诉我,这个位置很重要,曾经就有病毒占据了这个位置,最后没办法只好重装系统。

MBR

读取到了MBR后,还得检查最后两个字节必须是0x55和0xAA,看起来没什么问题,是一个合法的MBR,我们又跳到了0x7C00的位置开始执行。

操作系统

终于来到操作系统的地盘儿了,在操作系统的指示下,我们切换了工作模式,开始在保护模式下工作了!

刚刚切换到保护模式下,MMU仍然没法做地址翻译工作,我们还是只有直接使用物理地址跟内存联系,所以得赶紧把页目录和页表准备妥当才行。

忙活了一阵子之后,总算把需要的东西都弄好了,我激动的打开了内存分页的开关,通知MMU部门开始工作,现在我们可以使用虚拟地址访问内存了,这感觉棒多了!

这时,一旁围观的二号车间、五号车间、八号车间那几个家伙见状赶紧遛了回去,因为他们知道,马上就该他们工作了。

我们继续执行操作系统的代码,给咱们CPU其他所有核都准备好了数据和指令,创建了多个线程出来,把他们也叫起来一起工作,咱们这个八核CPU终于全面开动起来,一下子热闹了不少。

再后来,不知执行了多少指令,创建了多少线程,才把操作系统老大完整的运行了起来,成功完成了这一次的启动。

这就是通电后,我们CPU开始工作的日常,我已经记不清这是第多少次启动了,也不知道,我们还能启动多少次......

彩蛋

“Q哥,隔壁BIOS芯片老哥摊上事儿了,程序员嫌我们启动太慢 ,拿他开刀了”

“纳尼,那以后还怎么启动?”

“听说用了一个新方案,叫UEFI!

预知后续如何,且听下回分解~

2020年度中国开发者调查报告重磅来袭,直接扫码或微信搜索「CSDN」公众号,后台回复关键词「开发者」,快速获取完整的报告内容!

☞月薪 5 万清华姚班 NOI 金牌得主在线征友被群嘲,当代互联网相亲有多难
☞拼多多“砍价免费拿”始终差“0.09%”遭起诉,官方回应:活动真实
☞网传阿里一总裁 PPT 被员工拍照泄漏,新规划遭曝光
☞首次曝光!腾讯新任 H4 级高管余仁杰提议将公司总部搬往南极
☞年薪 50 万!淘宝重金招聘,35 岁以上优先,学历不限

按下电源后的几秒钟,CPU 在干嘛?相关推荐

  1. 按下电源后的几秒钟,CPU在干嘛?

    来电了 "来电了,来电了,起来干活了",一大早,我还在睡梦中就被吵醒了. 我是CPU一号车间的阿Q,好久不见,不知道大家有没有想我呢? "今天不是星期六吗?怎么还要工作& ...

  2. 威纶通宏开机后使用初始化宏指令_计算机从摁下电源到开机是怎么工作的

    我们几乎每天都要打开电源启动机器,面对屏幕上出现的一幅幅启动画面,我们一点儿也不会感到陌生,但是,计算机在显示这些启动画面时都做了些什么工作呢? 打开计算机电源后到计算机准备接受你发出的命令之间计算机 ...

  3. 接通电源后,计算机做了那些基本操作

    我们几乎每天都要打开电源启动机器,面对屏幕上出现的一幅幅启动画面,我们一点儿也不会感到陌生,但是,计算机在显示这些启动画面时都做了些什么工作呢?  打开计算机电源后到计算机准备接受你发出的命令之间计算 ...

  4. windows8怎么关机_按下电源键后发生了什么?电脑是如何关机的?

    在Windows启动后,最自然的关机方式是什么呢?当然是按下电源键了.有没有好奇,当我们按下电源键,会发生什么呢?为什么Windows可以选择关机或者睡眠?背后的机理又是什么呢? 历史 如果你曾经使用 ...

  5. 联想 笔记本 Lenovo Y410P 在 Linux Ubuntu 下 Wifi无线网不能搜索的问题 博通Broadcom 43xx 无线网卡驱动安装 插耳机后爆破的声音 拔电源后吱吱硬盘声音

    买了联想笔记本Y410P 安装Ubuntu后发现右上角的network-manager菜单中并不能选择和搜索wifi无线网 解决方法: 参考:https://help.ubuntu.com/commu ...

  6. 计算机电源5VSB只有3V,研华工控机接上电源后5vsb那颗灯闪烁是怎么回事

    公告: 为响应国家净网行动,部分内容已经删除,感谢读者理解. 话题:研华工控机接上电源后5vsb那颗灯闪烁是怎么回事,我这里回答:第一次看到这么有内涵的东西 参考回答:太好了 非常喜欢 感谢 辛苦了话 ...

  7. MacBook Pro接通电源后电池不充电 Apple官方解决办法

    型号:MacBook Pro 2018 现象:在确认电源正常的情况下,接入电源后电池不充电.该现象无规律,偶然会出现 原因:Mac有个SMC模块,是否对电池充电是通过SMC控制的,有时候控制逻辑能出不 ...

  8. 四节1.5V的5号电池、一个电容、一个12V的报警蜂鸣器、铜线和螺母,在螺母所栓的铜线触发接通电源后,缓慢放电10秒,制作一个简易震动报警器,需要用什么样的电容合适?...

    根据题目描述,需要制作一个简易震动报警器,使用四节1.5V的5号电池作为电源,一个电容,一个12V的报警蜂鸣器,铜线和螺母.在螺母所栓的铜线触发接通电源后,需要缓慢放电10秒. 在这种情况下,需要一个 ...

  9. 针对xps13无法开机,按下电源键亮几秒无反应的问题

    背景:2018.3.24晚我初学git后,关机睡觉.第二天,起来第一件事就是打开电脑继续我的学习.这个时候,TM的电脑出问题了,怎么都无法开机.我慌了,长按1分钟,30秒......都快要把电源键按烂 ...

最新文章

  1. 贪心 ---- 贪心 + STL维护 + 划分集合 L. Neo-Robin Hood(好题)
  2. Mysql高级之触发器
  3. Go 如何实现热重启
  4. java ajax定义_Ajax的定义
  5. 整合Struts2、Spring、Hibernate构建J2EE应用
  6. php 获取sql字段名,php – 使用DISTINCT和UNION在SQL查询中获取字段名称
  7. java解析xml中文字符乱码_各种Java中文乱码的处理方法
  8. 我的世界服务器皮肤显示插件怎么用,我的世界皮肤和插件安装方法
  9. Centos 网络配置
  10. 用VB编写的一个可在屏幕上移动的十字架
  11. 通过命令管理Windows7桌面防火墙
  12. allure 测试报告本地打开_自动化测试报告太丑?信息实用的Allure Report测试报告拯救你...
  13. 190408每日一句
  14. Cadence Allegro Segments Over Voids 功能介绍图文教程
  15. PSCC2018 安装教程
  16. gitee和gitHub的命令和详细步骤操作
  17. 计算机网络路由交换技术运用,计算机网络路由交换的技术应用与发展趋势研究...
  18. 电脑文件被杀毒软件误删了怎么恢复?
  19. 浪潮提出“计算+”挖大数据商机
  20. 巨杉数据库支持的mysql兼容特性包括_核心特性_SequoiaDB简介_文档中心_SequoiaDB巨杉数据库...

热门文章

  1. 一起走进自然语言处理的世界
  2. 【炫酷秀】仅用4行代码再现《黑客帝国》数字雨,可立即在终端实现!
  3. SAP MM 采购附加费计入物料成本?
  4. SAP公司间STO流程里外向交货单PGI后自动触发内向交货单的实现
  5. SAP WM LT15不能取消二步法确认场景中只做过第一步确认的TO单
  6. 研究人员吐槽当前AI训练效率过于低下
  7. 推荐!最适合初学者的18个经典开源计算机视觉项目
  8. 基于时间卷积神经网络的概率预测
  9. SAP PI - 同步 vs. 异步
  10. 图神经网络(GNN)系列