按下电源后的几秒钟,CPU在干嘛?一文看懂计算机启动原理

来电了

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

图片

我是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个字节。

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

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

图片

<figcaption style="margin: 5px 0px 0px; padding: 0px; max-width: 100%; box-sizing: border-box !important; word-wrap: break-word !important; text-align: center; color: rgb(136, 136, 136); font-size: 12px; font-family: PingFangSC-Light;">MBR</figcaption>

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

操作系统

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

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

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

图片

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

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

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

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

彩蛋

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

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

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

预知后续如何,请关注下回精彩···

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,980评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,178评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,868评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,498评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,492评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,521评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,910评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,569评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,793评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,559评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,639评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,342评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,931评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,904评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,144评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,833评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,350评论 2 342

推荐阅读更多精彩内容

  • 前一篇文章描述了Intel x86计算机主板和内存映射图,现在我们来解说一下计算机启动的几个阶段。下面是一个简单图...
    Nuk阅读 1,653评论 1 7
  • 姓名:朱佳男 学号:17021210978 专业:信号与信息处理 转载自:http://www.jianshu.c...
    DNYRoo7阅读 2,674评论 0 1
  • 一.编程语言的作用及与操作系统和硬件的关系 编程语言是程序员用来控制计算机的工具,是一种标准化的交流技巧,使得人与...
    梦不觉_ac35阅读 713评论 0 5
  • 计算机的启动过程是一个复杂的过程,我们根据计算机的控制权在哪一部分手上,可以把这一过程划分为以下四个阶段: BIO...
    okcOu阅读 2,364评论 1 0
  • 今天感恩节哎,感谢一直在我身边的亲朋好友。感恩相遇!感恩不离不弃。 中午开了第一次的党会,身份的转变要...
    迷月闪星情阅读 10,548评论 0 11