【操作系统】操作系统的启动都干了些什么

编程入门 行业动态 更新时间:2024-10-27 16:30:41

注意:系统在启动过程中干的事情很多,本篇文章挑其骨干进行简介,对系统启动有了一个基本的概念,其他延申的就不成问题啦

先给赶时间的程序猿们回答下题目:操作系统启动可以概括成两件事:1.从磁盘中读入操作系统   2.操作系统初始化

想要详细了解操作系统具体步骤可参考下面详解。

下面是正文————————————————

一.BIOS的苏醒

       当计算机电源键被点击之后,CPU(本文如不加特别说明,以下所述的CPU均为80x86CPU)第一个被唤醒,被唤醒的CPU自动进入实时模式后,会拿到计算机的控制权,并且CPU中CS:IP寄存器将自动指向内存地址为0XFFFF0这个地方,此时你可能会出现三个疑问:

       1.为什么CPU会自动进入实时模式?  答:硬件设定

       2.为什么CS:IP会自动指向0XFFFF0这个地方?  答:因为这个地方被固化了BIOS程序,所以在硬件设计时CS和IP这两个寄存器被设定了开机即分别指向CS = FFFFH IP = 0000H,这两个寄存器具体是怎么运作的可以参考我之前写过的一篇文章:【汇编语言】CS:IP寄存器

        以下图示可以更好地理解这个过程:

                                 

       根据我以前写过的文章【汇编语言】CS:IP寄存器可知,被CS:IP所指向的内存单元里面的内容都会被视为指令,所以会开始自动执行BIOS程序代码,控制权从CPU交到了BIOS系统手上,计算机的BIOS系统将执行某些系统(如键盘,软硬磁盘、RAM等硬件参数)的检测,如果你的计算机某些硬件坏了,获取不到参数,那么有可能没到操作系统就已经在这里的BIOS死机了。检测完硬件后在物理地址0处开始初始化中断向量,而后开启第二个步骤。

二.引导程序的苏醒

        由于计算机的工作方式是取值执行。而操作系统被保存在硬盘上,所以要启动操作系统,就需要将操作系统放入内存中去,再按顺序执行。而BIOS系统现在要做的就是将操作系统放入内存前的一个步骤,它将可启动设备(通常是软驱或者硬盘)的第一扇区(0磁道,0扇区,俗称引导扇区)里的内容读入到位于0X7C00的内存单元内,并且跳转到这个地方开始自动往下执行,而这个从引导扇区翻入内存单元的代码因为使用汇编语言写成的,所以后缀为.s,它的名字叫做bootset.s。

       从它的英文名字就可以知道,bootset的作用就是引导,引导什么?将操作系统引导进内存里面来,在引导的过程中,它会奇妙地将自己从0x7C00这个位置搬到了更高的位置0x90000,为什么要搬?因为它要给操作系统留位置。

       以下图示可以更好地理解这个过程:

      

       当它把自己移动到了一个更高的位置之后,执行一个中断,0x13中断,将setup.s和system模块也导入到内存里面,以下图示可以更好地理解这个过程:

                                                                 

       bootsect的代码为什么不把系统模块直接加载到物理地址0x0000开始处而要在setup程序中再进行移动呢?这是因为在随后执行的setup代码开始部分还需要利用ROM BIOS中的中断调用来获取机器的一些参数(例如显卡卡模式、硬盘参数表等),当BIOS初始化时会在物理内存开始处放置一个大小为0x400字节(1KB)的中断向量表,因此需要在使用完BIOS的中断调用后才能将这个区域覆盖掉。   

       至此,bootset引导程序也完成了它的历史使命,退出了舞台,将控制权交给了最后一个引导程序setup.s,并且在这里,有一位寄存器cr0默默地将自己最后一位设置成了1,将计算机从实时模式转换成了保护模式,CS:IP寄存器也从原来的16位寻址方式变成了32位的寻址方式,将寻址宽度扩充好多好多倍,setup看这个英文名字顾名思义就可以知道这个程序的作用是将整个系统支棱起来,收集操作系统所需要的硬件配置参数(如计算机一个有多少内存可供使用,文件根目录在哪里之类的)以及初始化logo等等,而后将操作系统往内存最下面放,以下图示可以更好地理解这个过程:

                                                           

     当setup也完成了它的使命后,将控制权交给了system模块,此时,系统已经准备启动了。

三.系统开启

     在system模块中,第一个被执行的是head.s程序,程序主要作用是初始化了gdt、idt等页表,方便后期内存管理的调用,而head.s初始化完成之后就进入到了main.c函数,该函数将一个些硬件(如内存、键盘)等init之后,就进行如常进入了一个永不退出的程序——操作系统。总得来看,其实操作系统启动可以用以下一副图表示:

     

 

更多推荐

操作系统,些什么,干了

本文发布于:2023-05-26 18:25:49,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/275504.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:操作系统   些什么   干了

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!