R语言 VMware ruby gulp Modernizr nginx视频教程 pmp视频教程 linux获取当前时间 配置tomcat环境变量 android入门实例 javaweb是前端还是后端 手动安装fastboot驱动 python运行环境 python3基础教程 python使用教程 python关键字 python编程题 python抛异常 javaindexof java斐波那契数列 java编程课程 java的环境配置 java抽象方法 java实现队列 java8函数式编程 javastring比较 java列表 windows7loader 小米5c拆机 saminside dep robotstudio findall 3d看图软件 ABViewer 视频md5修改器 cinema4d下载 cad乘号 bilibili硬币 微信预约系统
当前位置: 首页 > 学习教程  > 编程语言

谁都能看懂的计算机启动过程boot

2021/1/28 23:46:21 文章标签:

生活中我们往往以为的理所应当有时却不是那么平常,比如boot,平时说到计算机启动,都会提到boot,而boot的英文意思是靴子,跟计算机的启动怎么会联系起来呢。 事实上,boot作为启动的意思来源于 pulloneselfove…

生活中我们往往以为的理所应当有时却不是那么平常,比如boot,平时说到计算机启动,都会提到boot,而boot的英文意思是靴子,跟计算机的启动怎么会联系起来呢。
事实上,boot作为启动的意思来源于
p u l l    o n e s e l f    o v e r    a f e n c e    b y    o n e ′ s    b o o t s t r a p s    \color{red}pull\;oneself\;over\;a fence\; by\; one's\; bootstraps\; pulloneselfoverafencebyonesbootstraps
话说从前有一个人陷入泥潭,但他却用靴子后面的拉环将自己从泥潭里拉了出来,你能想象螺旋升天的场景吗。
这故事本身听起来不可思议,但它所描述的过程却恰与计算机的启动过程相似,因为想要启动计算机必须运行程序,而想要运行计算机必须先启动计算机,仿佛想要启动一台计算机陷入了一个死循环,那么事实上计算机是怎么启动的呢?
相比人类世界运作的复杂,PC的运行过程及其简单,就是不断重复

取 指 ⇒ 执 行 ⇒ 跳 转 下 一 条 指 令 \color{red}取指 \rArr执行\rArr跳转下一条指令

这样的周期,但是想要进入这个周期却并不容易。
就像有了光才有了生命的开始,在你加电的那一刻PC世界才开启。
主板上电后,由于电压尚未稳定,有一块控制芯片告诉CPU先不要急,先进行初始化,也就是"reset", 待电压稳定后,控制芯片撤销"reset",CPU就急不可耐得去执行他人生的第一条执行,当然指令是被存储在存储介质中,实际上就是一个地址,在Intel的x86架构下,这个地址为0xFFFFFFF0,至于为什么是这个地址,涉及的层面就比较高了,我们就先不聊了。
说到地址,有人可能就想到那不就是内存吗。可是这个地址还真不是内存中的地址,因为此时内存还没被初始化呢,这个地址是BIOS芯片里的一个地址。
想要有地址,首先就得编址,就像你家门牌号,是由管理国土规划的人来编址,而cpu就像是国土局的人,给存储介质一字节一字节得划好了地址,cpu编地址有两种方式,一种是统一编址,比如我在内存中划出一块区域专门作为与外设交互的地址,一个超明显的例子就是显存,以Intel的x86架构为例,0xB8000就是显存的地址,你往这个地址下写字符就是能在显示器上显示出来,从这个地址开始,每两个字节被解释为显示在屏幕上的一个字符,这第一个字节表示要显示字符的字模码,就是一个字符的像素点应该怎么点出来,第二个字节用于表示这个字符的前景色和背景色。具体如下
在这里插入图片描述
我们再说回计算机启动的事,等到控制芯片撤销"reset"命令后,cpu便进入BIOS上的上电自检程序(Power On Self Test),比如检查一下内存硬盘能不能正常访问啊,总线上跑数据网卡连接有没有问题啊,当cpu检查这些都没有问题后,他就觉得他行了,此时cpu就去找所有软件的大哥-操作系统,至于去哪里找,就要根据BIOS上的一张设备启动顺序表,对,就是你进入BIOS后能自己设置从硬盘或者u盘启动的那张表。
cpu会根据表上存储介质的顺序,去读每一个存储介质的第一个扇区,即512个字节,假如这个存储介质的最后两个字节是0x55和0xAA,那么cpu认为操作系统就在这块存储介质里,于是开始加载操作系统,并不再去检查后面的设备。
cpu会将存储介质上的第一个扇区的512字节加载到内存的0x7C00处,紧接着开始从0x7C00执行指令,由于512字节大小有限(如果够大的话我直接把操作系统的代码放在这),所以只够我们将操作系统的引导程序放在这里,这段代码由于意义特殊,我们一般把它叫做bootloader程序。
一般单操作系统电脑来说bootloader就是把操作系统内核引导到内存里,但是GNU推出GRUB帮助我们在bootloader阶段来选择一个操作系统进入,以便适应现在操作系统众多的环境。
以上就是关于boot的整个过程,其实就是检查引导这样一个简单节奏,但其中涉及的细节问题却十分复杂,这里所提到的也只是皮毛而已。想了解更多就去把《计算机的奥秘》《体系结构》啥的整起来吧。


本文链接: http://www.dtmao.cc/news_show_650297.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?