操作系统的启动过程

        操作系统是存在磁盘上的(如下图),开机时,首先会将操作系统读入内存,然后进行一系列初始化操作,操作系统就启动了。下面介绍操作系统的具体启动流程(也可直接看最后的总结)。

操作系统的启动过程_第1张图片 操作系统启动盘

1、以x86PC为例,按下开机键后,CPU处于实模式,内存也啥都没有(除了固化代码,如下图)。首先会寻址内存0xFFFF0(由硬件设计者事先设置好的),读取内存中的固化代码ROM,也就是BIOS映射区(Basic Input OutPut System)。BIOS先检查计算机硬件,硬件一切正常后,就会把引导扇区(位于磁盘零磁道零扇区)读入内存0x7c00,引导扇区的内容就是bootsect.s(汇编代码,因为汇编代码可以控制每一个内存地址,准确可靠)。

操作系统的启动过程_第2张图片 内存固化区

 

2、bootsect.s首先把自己从内存0x7c00的位置挪到0x90000的位置,为后续读入OS代码腾空间。然后从磁盘将setup程序(占4个扇区)读入内存0x90200,然后打印开机logo(如system is loading...,logo可修改,如下图),然后调用13号中断,继续读入system模块(OS代码)。bootsect.s的功能就结束了。bootsect.s的最后一行跳转到了setup所在的0x90200位置,开始执行setup程序。

操作系统的启动过程_第3张图片 打印开机logo

 

3、setup程序负责完成操作系统启动前的一些设置,它做的事情有:

  • 读了一些硬件参数(如内存大小,光标位置等)
  • 把system模块(OS代码)移到内存的0地址处,此后内存0地址一直存放OS代码。
  • 从实模式变为保护模式,即由16位变成32位寻址方式(这样能寻址4G的内存空间)
  • 最后读取一条高级指令(32位),跳到system模块的位置(0地址处)开始执行
操作系统的启动过程_第4张图片 部分setup程序

 

4、system模块的第一个文件是head.s,它初始化了gdt(global description table)、页表等数据结构,然后调用了main.c文件,进行一堆初始化(如下图),包括内存、中断、设备、时钟、CPU等内容的初始化。初始化完成后,操作系统就算启动完成了。

操作系统的启动过程_第5张图片 main.c进行初始化​

 

总结一下就是,按下开机键后:

  • 先读内存固化区BIOS,它负责检查硬件然后读入引导扇区
  • 引导扇区负责把setup和system模块读入内存,并打印开机logo
  • setup读取硬件参数,把system模块(OS代码)移到0地址处,并从实模式变为保护模式
  • 正式开始执行OS代码,首先执行head.s进行一系列初始化操作
  • 初始化完成,启动完成

 

以上内容是本人学习李治军老师操作系统课程时的学习笔记,课程链接https://www.icourse163.org/course/HIT-1002531008

你可能感兴趣的:(操作系统,操作系统)