按下电源后的几秒钟,CPU在干嘛?
2022-11-12 09:56 | 来源:IT之家 | 编辑:牧晓 | 阅读量:10976 |
2022-11-12 09:56 | 来源:IT之家 | 编辑:牧晓 | 阅读量:10976 |
呼,呼,起床干活一大早,我在睡梦中被吵醒
我是CPU一号车间的Q,好久不见,不知道大家想我了吗。
今天不是星期六吗我怎么还能工作我有点不开心我想我可以睡懒觉谁知道程序员周末还在工作这是要加班吗
一边抱怨,我还得赶紧起床干活。
当我来到我的车间时,提取指令的小啊,小胖和负责写回结果的老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哥,这个刚刚通电有记忆模块的人应该还是空白的我们去哪里执行指令,小啊问道
你不用担心这个主板上离我们CPU不远处有个叫BIOS的家伙,是rom芯片我们已经和他约定好了,一上电他就映射到地址空间按照CS:IP指的地方开始取指令就行了,他会安排的
原来如此,小啊点了点头,似乎有些不解。
正式开始工作,小啊熟练地得到了F000的第一条指令:FFF0,也就是0xFFFF0: jmp xxxx。
好家伙,接下来是一个大跳跃我们来到BIOS家伙的领地中央,开始执行他准备的程序
这堆指令我做了无数遍,测试主板上的所有单元看有没有异常,初始化我们工作需要的中断向量表等等我已经很熟悉了
你们几个忙啊我们正热火朝天时,发现有人在门口监视回头一看,原来是隔壁二车间,五车间,八车间的几个家伙
你们这帮人这么闲,愿意帮我们干点活吗。
嘿,你想变漂亮你们一号核心是开机处理器,待遇比我们好怎么才能抢到这个开机工作,2号车间虎子说
我真的很羡慕他们他们比我们一号车间工作得晚,每次都能多睡一会儿
主引导记录
我继续执行BIOS里的代码,一切检查完毕,没有任何异常,准备启动操作系统大佬。
接下来我查了BIOS里配置的启动顺序,硬盘哥排第一。
于是我把硬盘兄弟的0盘0轨第一扇区的内容读到内存中0x7C00位置他们把这个东西叫做MBR,总共有512个字节
听听硬盘上的哥们这是操作系统的老板给他装的时候写的
他还告诉我,这个职位很重要一旦有病毒占据这个位置,最后没办法只能重装系统
主引导记录
读取MBR后,我们仍然要检查最后两个字节必须是0x55和0xAA好像没什么问题,而且是合法的MBR我们再次跳到0x7C00开始执行
操作系统
最后,我们来到了操作系统的网站。在操作系统的指令下,我们切换了工作模式,开始在保护模式下工作!
刚切换到保护模式,MMU还是不能做地址翻译我们还是要直接用物理地址去联系内存,所以要赶紧把页目录和页表准备好
经过一段忙碌的时间,我终于得到了我需要的一切我兴奋地打开内存分页开关,通知MMU部门开始工作
这时,在一旁观望的2号车间,5号车间,8号车间的伙计们赶紧往回走,因为他们知道马上就要轮到他们干活了。
我们继续执行操作系统代码,为CPU的所有其他核心准备数据和指令,创建多线程,并调用它们一起工作我们的八核CPU终于进入了高潮,一下子还挺热闹的
后来不知道执行了多少条指令,创建了多少个线程,让操作系统boss完整运行,成功完成了这次启动。
这是我们的CPU在通电后开始工作的日常我记不清这是第几次启动了,也不知道我们还能启动多少次
声明:本网转发此文章,旨在为读者提供更多信息资讯,所涉内容不构成投资、消费建议。文章事实如有疑问,请与有关方核实,文章观点非本网观点,仅供读者参考。